كلمة vba tabstop سلوك خاطئ
سؤال
لدي رمز 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.
(مصدر: lans-msp.de.)
يعمل الرمز بشكل مثالي لعدد تعسفي من الأسطر، ولكن بعد ذلك في بعض النقاط يتوقف فقط تطبيق Tabstops.
أعلم أنه إذا لم أعد إعادة تعيين التنسيق كل 10 أسطر، فسيعمل الكود على ما يبدو إلى الأبد (حقا؟!؟). ولكن كل الفرامل 10 خط أمر لا بد منه.
رقم الخط الدقيق حيث يعتمد كل شيء ينهار على كمية ذاكرة الوصول العشوائي. على جهاز الكمبيوتر الخاص بي مع 1GB يعمل فقط حتى يتم فقط على السطر 800 (كما ترون). جهاز الكمبيوتر الخاص بي في المنزل مع 4GB لم يظهر هذا السلوك. لكنني متأكد من أنه كان من الممكن أن أظهر ذلك أيضا إذا كنت قد تركته لفترة طويلة بما فيه الكفاية، لأنه في كود الإنتاج الخاص بي (وهو أكثر تعقيدا قليلا) يوضح الكمبيوتر المنزلي المشكلة أيضا.
هل هذا نوع من تسرب الذاكرة أو شيء من هذا؟ أي خطأ ارتكبت؟ ربما، لا يمنع الله، VBA نفسه الجاني هنا؟
المحلول
حاول تطبيق التنسيق باستخدام نمط محدد. لنرى إن كان سيحدث فرقا.
نصائح أخرى
قد تحاول تحويل الصفحات التلقائية أثناء إضافة الأسطر، لمعرفة ما إذا كان ذلك يساعد.
Application.Options.Pagination = False