سؤال

لدي رمز VBA التالي

Private Sub CreateQuery_Click()

  Dim doc As Document
  Dim i As Integer

  Set doc = ActiveDocument
  i = doc.Paragraphs.Count

  doc.Paragraphs(i).Range.InsertParagraphAfter
  i = i + 1

  For j = 0 To 1000
      doc.Paragraphs(i).Range.InsertParagraphAfter
      i = i + 1
      doc.Paragraphs(i).Range.InsertParagraphAfter
      i = i + 1
      With doc.Paragraphs(i)
          .Range.Font.Italic = True
          .Range.ListFormat.ApplyBulletDefault
          .Indent
          .Indent
          .TabStops.Add Position:=CentimetersToPoints(3.14)
          .TabStops.Add Position:=CentimetersToPoints(10)
          .TabStops.Add Position:=CentimetersToPoints(11)
      End With
      For k = 0 To 10
          With doc.Paragraphs(i)
              .Range.InsertAfter "testState" & vbTab & CStr(doc.Paragraphs(i).Range.ListFormat.CountNumberedItems) & vbTab & CStr(doc.Paragraphs.Count)
              .Range.InsertParagraphAfter
          End With
          i = i + 1
      Next
      i = doc.Paragraphs.Count
      With doc.Paragraphs(i)
          .Range.ListFormat.ApplyBulletDefault
          .TabStops.ClearAll
          .Outdent
          .Outdent
      End With
  Next

  i = doc.Paragraphs.Count

  doc.Paragraphs(i).Range.InsertParagraphAfter
  i = i + 1

End Sub

أساسا هذا الرمز يطبع فقط N أرقام الخطوط مع التنسيق المحدد.

  • قائمة الرصاص
  • المسافة البادئة
  • و tabstops.

alt text
(مصدر: lans-msp.de.)

يعمل الرمز بشكل مثالي لعدد تعسفي من الأسطر، ولكن بعد ذلك في بعض النقاط يتوقف فقط تطبيق Tabstops.

أعلم أنه إذا لم أعد إعادة تعيين التنسيق كل 10 أسطر، فسيعمل الكود على ما يبدو إلى الأبد (حقا؟!؟). ولكن كل الفرامل 10 خط أمر لا بد منه.

رقم الخط الدقيق حيث يعتمد كل شيء ينهار على كمية ذاكرة الوصول العشوائي. على جهاز الكمبيوتر الخاص بي مع 1GB يعمل فقط حتى يتم فقط على السطر 800 (كما ترون). جهاز الكمبيوتر الخاص بي في المنزل مع 4GB لم يظهر هذا السلوك. لكنني متأكد من أنه كان من الممكن أن أظهر ذلك أيضا إذا كنت قد تركته لفترة طويلة بما فيه الكفاية، لأنه في كود الإنتاج الخاص بي (وهو أكثر تعقيدا قليلا) يوضح الكمبيوتر المنزلي المشكلة أيضا.

هل هذا نوع من تسرب الذاكرة أو شيء من هذا؟ أي خطأ ارتكبت؟ ربما، لا يمنع الله، VBA نفسه الجاني هنا؟

هل كانت مفيدة؟

المحلول

حاول تطبيق التنسيق باستخدام نمط محدد. لنرى إن كان سيحدث فرقا.

نصائح أخرى

قد تحاول تحويل الصفحات التلقائية أثناء إضافة الأسطر، لمعرفة ما إذا كان ذلك يساعد.

Application.Options.Pagination = False
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top