VBA para mover uma caixa de texto funciona e, em seguida, pára de funcionar

1

Esse código deve encontrar uma caixa de texto comum / básica em uma planilha e depois movê-la para a esquerda. Então vá para a próxima folha e faça a mesma coisa. Faça até a última folha.

Funciona (como eu percorro através dele usando F8), mas a próxima folha diz o objeto não suporta essa propriedade do método .

Eu não tenho ideia do porquê isso está acontecendo.

Dim I As Integer
Dim txBox As Shape
Set txBox = ActiveSheet.Shapes("Text Box 1")


For I = 1 To Worksheets().Count
    Worksheets(I).Activate
    txBox.Select
    **Selection.ShapeRange.IncrementLeft 586.5**

Next I

End Sub
    
por RocketGoal 08.07.2013 / 16:03

1 resposta

3

Supondo que a caixa de texto é denominada "Caixa de texto 1" em cada folha, você só precisa mover a linha Set txBox = dentro do seu loop For . Caso contrário, txBox refere-se apenas à caixa de texto na planilha que estava ativa quando você iniciou sua macro. Como txBox não está mais na planilha ativa, Selection não se refere a txBox , mas é mais provável que seja uma célula e não necessariamente uma caixa de texto, portanto, o erro "Objeto não suporta esta propriedade ou método". Espero que o código abaixo faça o truque ou, pelo menos, faça você avançar na direção certa.

Dim I As Integer
Dim txBox As Shape

For I = 1 To Worksheets().Count
    Worksheets(I).Activate
    Set txBox = ActiveSheet.Shapes("Text Box 1")
    txBox.Select
    Selection.ShapeRange.IncrementLeft 586.5
Next I

Editar:
Como um aparte, você pode melhorar o desempenho de sua macro evitando todas as chamadas .Select , .Activate , Selection .

Dim ws as Worksheet
Dim txBox As Shape

For Each ws in Worksheets
    Set txBox = ws.Shapes("Text Box 1")
    txBox.IncrementLeft 586.5
Next ws
    
por 08.07.2013 / 16:13