MS kelimesinde paragraf sayısının döngü için kullanılabilir bir Değişkene dönüştürülmesi


0

Belge A'dan seçili miktarda metin kaldıran, B belgesine yapıştıran, B belgesindeki toplam paragraf sayısı için Word'ü yoklayan, ardından B belgesindeki o metne rutin bir işlem yapan ve rutin bittiğinde , gözden geçirilmiş metni A belgesine geri kopyalar. Bunu yaptığında, AI belgesinde kaldırmak istediğiniz metin kalıntılarını geride bırakır. (Makronun ilgili kısmı aşağıda yayınlanmıştır) Makro, paragrafların sayısını belirler ve ardından, B belgesinde bulunan paragrafların sayısına bağlı olarak A belgesindeki bir dizi tablo satırı siler. Satırda bir hata alıyorum ve bana çarptı. Kodumda yanlış olan ne?

Sub info3()
Selection.WholeStory
Dim k As Integer

Dim AD As Document
Dim DP As Object

Set AD = ActiveDocument
Set DP = AD.BuiltInDocumentProperties

' Returns the number of paragraphs and lines in a document.
MsgBox "There are " & DP("Number Of Paragraphs") & _
  " paragraphs containing text " & "and " & DP("Number Of Lines") & _
  " lines counted."
  'top of page
Selection.HomeKey Unit:=wdStory
'remove a row from a table an amount of times determined by # of paragraphs
' if 8 paragraphs detected, do this procedure 4 times.
'following line gets an error statement. Why?
Do Until k > (DP / 2)
Selection.EndKey Unit:=wdLine, Extend:=wdExtend
Selection.EndKey Unit:=wdLine, Extend:=wdExtend
Selection.EndKey Unit:=wdLine, Extend:=wdExtend
Selection.Rows.Delete
k = k + 1
Loop
End Sub

1
Hangi hatta hata alıyorsunuz?
Lili

Yanıtlar:


0

DP sayı olmayan bir nesnedir, bu nedenle 2'ye bölemezsiniz. Paragraf sayısını yeni bir değişkende saklamanız gerekir.

Dim numParagraphs as Integer

numParagraphs = DP("Number Paragraphs")

Ve bunu döngüde kullanın.

Ek olarak, Tablo ve Metin özelliklerini karıştırıyorsunuz. Satırlar Bir satırı silmek için bir tablonun içinde olmanız gereken bir tablo özelliğidir. Ayrıca, belirli bir satıra erişmek için bir dizin kullanmanız gerekir. Örneğin

Selection.Rows(1).Delete

Seçilen metni şöyle bir şeyle temizleyebilirsiniz:

Selection.Text = ""

Ama başarmaya çalıştığın şey bu mu bilmiyorum.


Aslında, "k & gt; (DP / 2) 'ye kadar yapın. Brad'in 2 satırını ekledikten sonra, numParagraphs = DP (" Sayı Paragrafları ") içinde hem de (" Sayı Paragrafları "olmadan) hata alıyorum ") text.Tüm yapmaya çalışıyorum, For-Next döngüsünün tohumuna tespit edilen paragrafların sayısını çevirmek. Word tarafından tespit edilen 8 paragraf varsa, 4 kez bir alt rutin için .....
chris G

Daha fazla bilgi ile güncellendi.
Brad Patton

Silinecek metnim gerçekten bir tabloda. Bazı bilgiler bırakmaya çalıştım, bu yüzden bu daha genel bir kullanışlı soru. Makro UZUNLUK. Bu yüzden asıl soru şu şekilde kalıyor: Belge A'daki metin manipülasyonunda döngü sayacı olarak kullanmak için B belgesindeki paragraf sayısını otomatik olarak nasıl belirleyebilirim (Bir Sonraki İçin mi? Her biri için mi? Vb.)
chris G

@chrisG Kodu Word'e yapıştırdım ve hata ayıklayıcısına adım attı, benim için başarısız olan tek satır Rows'du. Kesme noktaları eklemeyi ve kodu atlamayı deneyin.
Brad Patton

Bir MS web sitesinde bir yorumcu bunu çözmeme yardımcı oldu ... Dim k Tam Sayı Kadar Dim AD Doküman Olarak DP DP Nesne Kadar Dim LP Uzun Küme AD = ActiveDocument Küme DP = AD.BuiltInDocumentProperties LP = DP ("Paragraf Sayısı") / 2 Selection.HomeKey Unit: = wdStory ', 8 paragraf algılandıysa, 4 kez bu işlemi yapın. K & gt; LP Selection.EndKey Birimi: = wdLine, Uzat: = wdExtend Seçim.EndKey Birimi: = wdLine, Uzat: = wdExtend Seçim.EndKey Birimi: = wdLine, Uzat: = wdExtend Seçim.Rows.Delete k = k + 1 Loop End Sub
chris G

0

Bir MS web sitesinde yorum yapan bu çözmeme yardım etti ...

Dim k As Integer
Dim AD As Document
Dim DP As Object
Dim LP As Long
Set AD = ActiveDocument
Set DP = AD.BuiltInDocumentProperties
LP = DP("Number Of Paragraphs") / 2

Selection.HomeKey Unit:=wdStory

' if 8 paragraphs detected, do this procedure 4 times.

Do Until k > LP
Selection.EndKey Unit:=wdLine, Extend:=wdExtend
Selection.EndKey Unit:=wdLine, Extend:=wdExtend
Selection.EndKey Unit:=wdLine, Extend:=wdExtend
Selection.Rows.Delete
k = k + 1
Loop
End Sub
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.