Nomeando um objeto no Excel VBA para que ele possa ser selecionado assim que for copiado para outra planilha / pasta de trabalho

1

Eu estou amadoramente juntando macro / VBA no Excel. Envolve copiar uma imagem, que é de uma legenda em um idioma diferente, do Source.xlsx e colá-la em Destination.xlsx. A imagem é apenas isso, não é mais um objeto em um gráfico.

O código abaixo funciona. No entanto, estou tentando alinhar a nova imagem para que ela substitua o antigo xlamLegendGroup no Destination.xlsx. Atualmente, apenas colo em uma célula que está próxima ("AO6") e a movo manualmente.

Meu problema é que não consigo selecionar a imagem depois que ela está em Destination.xlsx. Se eu pudesse, tenho certeza que poderia descobrir como incluir esses valores X e Y no meu VBA.

Eu tentei nomear usando o gerenciador de nomes, mas meu código não reconhece. Eu até tentei nomear isso em VBA durante a seleção, mas acabei de receber erros e métodos incorretos, etc. (como eu disse, compreensão do nível amador do VBA)

Se algum de vocês puder me ajudar a resolver esse problema de nomeação e re-seleção, seria muito apreciado.

Copia uma imagem da pasta de trabalho soure. É a única imagem na folha para que eu possa selecioná-la dessa maneira

Workbooks("MyWkbSource.xlsx").Sheets("LEGEND_AVG").Activate
ActiveSheet.DrawingObjects.Select
Selection.Copy

Ative a pasta de trabalho de destino e cole a imagem. É aqui que eu gostaria de alinhá-lo (centralizando-o no topo) com a imagem que estou prestes a excluir.

Workbooks(MyWkbDestination.xlsx").Sheets("AVG").Activate
ActiveSheet.Range("AO6").Select
ActiveSheet.Paste

Selecione a imagem antiga existente e exclua-a

ActiveSheet.Shapes.Range(Array("xlamLegendGroup")).Select
Selection.Delete
    
por RocketGoal 19.02.2016 / 10:46

3 respostas

0

Quando você cola uma imagem, provavelmente receberá o nome Picture # , em que # é incrementado em 1 se o item já existir.

Assim, a primeira imagem que você colar deve ser chamada de Picture 1 . Você pode descobrir o nome das imagens atualmente no seu documento com:

For Each Shape In ActiveSheet.DrawingObjects
    MsgBox Shape.Name
Next

Isso passaria por cada um deles e mostraria em uma caixa de mensagem.

Como você acabou de colar um objeto, não é fácil manipulá-lo na mesma varredura. Você poderia usar o loop acima para encontrar o último Picture # e, em seguida, saberia que o próximo colado seria # + 1 e poderia alterar o nome conforme necessário, usando ActiveSheet.Shapes.Range(Array("Picture #+1")).Name .

Você também pode usar .Top e .Left para mover a imagem conforme necessário, bem como .Height e .Width se precisar redimensioná-la.

    
por 19.02.2016 / 16:09
0

Sempre que você copiar um único objeto (digamos uma Shape) de uma planilha para outra ou uma pasta de trabalho para outra, consulte o objeto de destino examinando seu lugar em .Count . Por exemplo:

Sub CopyShape()
    Dim sh1 As Worksheet, sh2 As Worksheet
    Dim shp1 As Shape, shp2 As Shape
    Set sh1 = Sheets("Sheet1")
    Set sh2 = Sheets("Sheet2")
    Set shp1 = sh1.Shapes(1)

    shp1.Copy
    sh2.Paste

    Set shp2 = sh2.Shapes(sh2.Shapes.Count)
    shp2.Name = "Most recent Shape on Sheet2"
End Sub

Quando a cópia estiver completa, a forma mais recente colocada no destino aparecerá por último na lista de Formas naquele destino.

    
por 19.02.2016 / 18:07
0

Basta nomear a forma com um nome personalizado. Evite números após o nome.

Ex: retângulo 1 altere para > MyRectangle

    
por 25.09.2018 / 01:49