Macro Personalizada

Boa noite. Tenho esta macro simples que utilizava no excel . Basicamente ela seleciona um intervalo e deixa na área de transferência como imagem. Tentei de varias formas faze-la funcionar o Calc mas sem êxito. Alguém poderia me ajudar?

Sub CopiarComoImagem_diário()
'Seleciona o intervalo de célulasRange(“A1:u45”).Select
'Copia o intervalo como imagemSelection.CopyPicture Appearance:=xlScreen, Format:=xlBitmap
'Cola a imagem na área de transferênciaApplication.CutCopyMode = False
End Sub

Se fizeres um “Select”, presumo que copias sempre a mesma posição… está correcto?

Depois que estiver na área de transferência, o que vai fazer?

Posteriormente vou colar no Skype. (Se fizer ctrl c + ctrlv ) no Skype ele cola como texto. Por isso preciso que seja como imagem.

Tem que copiar e depois colar como imagem. Se simplesmente copiar e colar ele cola como texto.

Se esta usando Win,

1 - deixe a área completa na tela
2 - tecle Windows+Shft+S
3 - selecione a área.

Desta maneira a imagem da tela, esta na área de transferência.

Não atende a minha necessidade pois pega a tela toda. Preciso mesmo apenas do intervalo. Mesmo assim obrigado pelo empenho.

Atenção …

Vou usar Linux Ubuntu

Try this code:

Sub copy_like_image()

	doc = ThisComponent
	sheet = doc.CurrentController.ActiveSheet
	'Or get range by name
	'sheet = doc.Sheets.getByName("Sheet1")
	
	range = sheet.getCellRangeByName("A1:C5")
	'Or
	'range = doc.CurrentController.Selection
	
	'Comment this line if you used Selection
	doc.CurrentController.select(range)

	'Copy current selection
	Call execute_dispatch(doc, "Copy")
	
	'Paste like image
	Dim args(0) As New com.sun.star.beans.PropertyValue
	args(0).Name = "SelectedFormat"
	args(0).Value = 141
	Call execute_dispatch(doc, "ClipboardFormatItems", args)

	'Cut current image
	Call execute_dispatch(doc, "Cut")
	
End Sub

Sub execute_dispatch(doc, url, Optional args())
	If IsMissing(args) Then
		args = Array()
	End If
	frame = doc.CurrentController.Frame
	dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
	dispatcher.executeDispatch(frame, ".uno:" + url, "", 0, args)
End Sub
2 Likes

range = sheet.getCellRangeByName(“A1:u45”)

Ele deve estar em capital: "A1:U45"

isso este é o intervalo que eu preciso para compartilhar no skype (como imagem)

já te dei a resposta.

Obrigado. Deu certinho quando substitui range por rng. Muito obrigado.

A macro funciona, não há erros, tente alterar todas as ocorrências do range com rng, talvez tenha algo que entre em conflito, por exemplo uma macro com esse nome ou outra coisa, ou reescreva essa linha manualmente e não com o copiar e colar.

1 Like

Na mosca! Substitui range por rng e funcionou. Muito obrigado.

Talvez você tenha a compatibilidade VBA ativada.

RANGE é uma palavra reservada em VBA

Eu recomendo sempre reescrever as macros no LO Basic.

1 Like

Certo!! :raised_hands: Tenha uma boa noite.

Estou feliz pela resolução do seu problema, mas o crédito pela solução vai para quem escreveu a macro @elmau