Sou muito novo em macros no Word, mas quero automatizar um processo e vagar se alguém puder me ajudar.
Eu sou professora de idiomas. Eu quero pegar uma história que minha turma criou, selecionar cada oitava (ou enésima) palavra e recortar o documento. Eu quero então substituir a palavra extraída por um 'em branco' (ou seja, 8 sublinha a qual o aluno irá escrever) e depois colar a palavra extraída em algum outro lugar.
Eu tive uma confusão com isso e surgiu o seguinte:
Sub Blankify8()
Blankify8 Macro
Selection.MoveRight Unit:=wdWord, Count:=8
Selection.MoveRight Unit:=wdWord, Count:=1, Extend:=wdExtend
Selection.Cut
Selection.TypeText Text:="____________ "
Windows("Document4").Activate
Selection.PasteAndFormat (wdFormatOriginalFormatting)
Selection.TypeParagraph
Windows("Document3").Activate
End Sub
Existem alguns problemas com isso. Primeiro, prefiro que as palavras sejam coladas em uma caixa de texto ou tabela no mesmo documento e não coladas em outro documento. Eu não consegui descobrir como fazer isso. É claro que, se não houver nenhum documento '4' aberto no momento da execução da macro, ele também não funcionará.
O segundo problema é que apenas mantendo o controle e pulando 8 teclas pressionadas pelo cursor, às vezes, cortará um sinal de pontuação ou um retorno de carro, o que estraga o documento original. Eu só quero retirar palavras.
Além disso, gostaria de poder repetir o comando para que ele seja repetido até o final do documento.
E, finalmente, existe uma maneira de eu ter a macro perguntando ao usuário que intervalo eles querem usar para o número de etapas a serem ignoradas?
Para a pessoa que respondeu:
Muito obrigado, de fato.
Limitar a seleção a mais de 3 caracteres é melhor, mas quero que a macro corte palavras do texto indiscriminadamente (o objetivo é o ensino de idiomas e geralmente são as palavras menores que podem exigir ênfase em tal atividade).
Encontrei algum código escrito por outra pessoa que pode funcionar, mas não entendo como implementá-lo na minha macro com o restante dos comandos:
Function IsLetter(strValue As String) As Boolean
Dim intPos As Integer
For intPos = 1 To Len(strValue)
Select Case Asc(Mid(strValue, intPos, 1))
Case 65 To 90, 97 To 122
IsLetter = True
Case Else
IsLetter = False
Exit For
End Select
Next
End Function
Sub Blank()
Dim OriginalStory As Document
Set OriginalStory = ActiveDocument
Dim WordListDoc As Document
Set WordListDoc = Application.Documents.Add
Windows(OriginalStory).Activate
sPrompt = "How many spaces would you like between each removed word?"
sTitle = "Choose Blank Interval"
sDefault = "8"
sInterval = InputBox(sPrompt, sTitle, sDefault)
Selection.HomeKey Unit:=wdStory
Do Until Selection.Bookmarks.Exists("\EndOfDoc") = True
Selection.MoveRight Unit:=wdWord, Count:=sInterval, Extend:=wdMove
Selection.MoveRight Unit:=wdWord, Count:=1, Extend:=wdExtend
If IsLetter = True Then
Selection.Cut
Selection.TypeText Text:="__________ "
Windows(WordListDoc).Activate
Selection.PasteAndFormat (wdFormatOriginalFormatting)
Selection.TypeParagraph
Windows(OriginalStory).Activate
Else
Selection.MoveRight Unit:=wdWord, Count:=1, Extend:=wdMove
Selection.MoveRight Unit:=wdWord, Count:=1, Extend:=wdExtend
Loop
Loop
End Sub
A função deve ficar "acima" do resto do código, certo? Mas eu recebo um erro 'argumento não opcional' quando eu o executo. Quero destacar todas as enésimas seleções, verificar se é uma palavra real, se é recortar e colá-la no outro documento e, se não, passar para a próxima seleção e verificar até encontrar uma palavra.