Parâmetro no DDEExecute

Boa tarde, colegas, gostaria de saber se é possível passar parâmetros para macros através do DDEExecute, por exemplo: DDEExecute(“Excel”, “Plan1”, ‘[Run(“Macro1”)]’)

Neste caso gostaria de passar um argumento “string” para a macro, já que ela está definida para receber esse string.

Grato pela atenção

Diego,

Como você faz isso no Excel?

Paulo, só para testes eu criei uma macro simples em que eu pego o argumento e imprimo em uma MsgBox.

Sub Macro1(x as String)

MsgBox x

End Sub

Basicamente isso.

Mas como você executa essa macro no Excel?

Paulo, desculpa a demora. Mas respondendo,estou apenas testando essa função DDEExecute. Eu apenas abri o excel e criei a macro acima descrita, com esse argumento String. Quando a crio sem necessidade de passar o parâmetro, funciona perfeitamente, ou seja, executo a diretamente do elipse. Mas quando crio a macro com parâmetros, não consigo executá-la pelo elipse.

Entendo, Diego.

A primeira coisa a fazer então seria descobrir como executar a macro com parâmetro no próprio Excel, para depois tentar fazer o mesmo pelo Elipse.

Entendi. Achei que poderia passar algo como DDEExecute(“Excel”, “Plan1”, ‘[Run(“Macro1(parâmetros)”)]’), mas não funcionou. Vou ver como farei no excel e tentarei novamente via elipse. Obtendo resultado positivo, posto aqui. De toda maneira, obrigado pelo empenho.

Diego,

Pelo o que eu pesquisei, parece que não é possível fazer isso.

Uma alternativa seria passar o valor para uma célula da planilha e a macro acessar o valor dessa célula.

Exato, Paulo. Foi a mesma conclusão que cheguei. Tentei de várias formas, inclusive criando uma função, ao invés de uma macro. O que eu pretendia fazer era converter arquivos .dat para .xls e no mesmo script salvar os arquivos em .pdf. Se essa forma que tentei funcionasse, conseguiria salvar em .pdf. Vou tentar outra alternativa. De toda forma, grato pelo empenho em solucionar.

Sugestão: http://kb.elipse.com.br/pt-br/questions/983

Paulo, cheguei a ver esse KB, mas nesse caso sempre que eu for salvar um arquivo .pdf precisarei digitar o nome do arquivo. A ideia de usar uma macro era justamente de passar o nome do arquivo como parâmetro e salvar o .xls em .pdf de forma automática, com o nome passado como parâmetro o do arquivo .pdf.

Vou testar via DDE, porém já fiz algo parecido criando um objeto (Excel.Application) via vbs para abrir e executar uma macro previamente criada num arquivo excel (xlsm).

Veja se isto te ajuda.

No ELIPSE

Sub button_Click()
	Dim objExcel
	Dim objWorkbook
	
	Set objExcel = CreateObject("Excel.Application")
	
	Set objWorkbook = objExcel.Workbooks.Open("c:\temp\myfile.xlsm", 0, True)
	objExcel.Application.Visible = True
	objExcel.Run "Foo", "param"
	objWorkbook.Close
	objExcel.Quit
	
	Set objWorkbook = Nothing
	Set objExcel = Nothing
End Sub

No EXCEL (em um módulo)

Public Sub Foo(Optional ByVal msg As String = "World")
    MsgBox "Hello " & msg
End Sub

Olá @leandrobpedro, veja que no caso do @diegomoura o problema é no Elipse SCADA, portanto não é possível usar VBScript (a não ser que chame um bat).

@balestrin, de fato, não me atentei a este fato, falha minha. É possível executar um .bat ou um .vbs via SCADA?

Sim, é possível rodar um programa através do ShellExecute do Elipse SCADA.

Um caminho é associar no Windows o arquivo de vbscript (.VBS) ao CScript e após executar o arquivo .vbs no ShellExecute. Acho que funciona.

Sobre o CScript: https://technet.microsoft.com/en-us/library/ee156587.aspx

Ah, então penso que seja possível, ao invés de usar o código vbs que eu associei ao botão no e3/power, criar um arquivo .vbs e executá-lo através do SCADA.

Exatamente @leandrobpedro