Transformando a contagem de parágrafos na palavra MS em uma variável utilizável para loop

0

Eu tenho uma macro que levanta uma quantidade selecionada de texto do Documento A, cola no documento B, pesquisa o Word para o número total de parágrafos no documento B, depois faz uma rotina para esse texto no documento B, e quando terminada a rotina, copia o texto revisado de volta para o documento A. Quando ele faz isso, ele deixa os restos de texto no documento AI que deseja remover. (parte relevante do macro postada abaixo) A macro determina o número de parágrafos e, em seguida, exclui uma quantidade definida de linhas da tabela no documento A, com base no número de parágrafos localizado no documento B. Eu recebo um erro na linha e ele ficou perplexo. O que há de errado com meu código?

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
    
por chris G 30.04.2013 / 01:39

2 respostas

0

DP é um objeto e não um número, portanto você não pode dividir por 2. Você precisa armazenar o número de parágrafos em uma nova variável

Dim numParagraphs as Integer

numParagraphs = DP("Number Paragraphs")

E use isso no seu loop.

Além disso, você está misturando as propriedades Table e Text. Linhas é uma propriedade de tabela que você precisa dentro de uma tabela para excluir uma linha. Além disso, você tem que usar um índice para acessar uma linha específica. Por exemplo

Selection.Rows(1).Delete

Você pode limpar o texto selecionado com algo como:

Selection.Text = ""

Mas não sei se é isso que você está tentando realizar.

    
por 30.04.2013 / 02:24
0

Um comentarista em um site da Microsoft me ajudou a resolver isso ...

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
    
por 02.05.2013 / 21:32