problema com variável

Tire suas dúvidas sobre programação em AutoHotkey

Moderator: Gio

cimerio
Posts: 22
Joined: 29 Apr 2019, 15:37

problema com variável

21 Jul 2020, 13:21

boa tarde, estou tentando manipular uma variavel, mas da erro e não sei onde,

Code: Select all

X1 := ComObjActive("Excel.Application")


Loop, 1
{
	
	celula%A_Index% := X1.Range("A" A_Index).Text
	n := 1
;	MsgBox, %celula1%

lineA = Worksheets(planilha).Cells(3, 2).Value = `"% celula%n%`" 

MsgBox , %lineA%
}
return
aparece ==> The following variable name contains an illegal character: " celula"
mas se eu usar

Code: Select all

;lineA = % celula%n%
funciona normal
User avatar
Gio
Posts: 1038
Joined: 30 Sep 2013, 10:54
Location: Brazil

Re: problema com variável

22 Jul 2020, 12:06

Bom dia Cimerio.

Tem várias questões relacionadas à sintaxe da linguagem que não estão corretas na sua expressão (ou cujo significado talvez você não tenha entendido).

Primeiro vamos definir novamente o básico:

1. O símbolo de igual (=) é o operador de inserção de valores literais (ou seja, texto) no AutoHotkey (e em alguns casos, é também o operador de comparação de igualdade).
2. O símbolo de dois-pontos-e-igual (:=) é o operador de inserção de valores matemáticos no AutoHotkey.

Então, vejamos essa expressão:

Code: Select all

lineA = % celula%n%
Nesta expressão você está utilizando o operador de inserção de expressões literais (=) para inserir texto na variável lineA.

OCORRE, que logo em seguida você colocou um sinal de percentual solto (ou seja, separado por espaços). Na sintaxe do AutoHotkey, um sinal de percentual solto no início (somente no início) de um parâmetro significa que os parâmetros dali em diante devem ser forçosamente tratados como expressões matemáticas pelo interpretador. Sendo assim, apesar de você ter usado o operador de inserção de expressões literais, a parte celula%n% está sendo tratada primeiro como expressão matemática. Ademais, como você colocou a variável n entre dois percentuais (mesmo já estando dentro de uma expressão matemática) você causou o efeito da dupla-dereferenciação, onde o valor de n será considerado como parte do nome de uma variável que será depois dereferenciada (dereferenciar é trocar o nome de uma variável pelo seu valor e colocar de volta na expressão).

Por exemplo, se n for igual a 23, e a expressão celula%n% for interpretada matematicamente (como neste caso está sendo), o interpretador vai buscar o conteúdo de uma variável de nome celula23. Se esta variável existir e tiver um valor, aquele valor será ali colocado na expressão.

Exemplo de expressão com resultado equivalente usando o operador de inserção de expressões matemáticas (:=):

Code: Select all

lineA := celula%n%

:arrow: Agora vamos ao código que você disse que não está funcionando.

Code: Select all

lineA = Worksheets(planilha).Cells(3, 2).Value = `"% celula%n%`"
Aqui você está usando exclusivamente o operador de inserções literais, de modo que Worksheets(planilha).Cells(3, 2).Value = `"% celula%n%`" está tudo sendo interpretado como texto (inclusive o segundo igual). OCORRE que em expressões literais não é possível a dupla-dereferênciação, então o interpretador tentou interpretar celula, que é aquilo que está entre dois parêntesis, como sendo o nome de uma variável. OCORRE que tem um espaço ali dentro, e nomes de variável não podem conter espaços. Por este motivo, ele verificou que havia um erro de sintaxe na expressão e recursou a interpretação da linha.

Mas francamente, está expressão está muito confusa. Me diga o que exatamente você queria fazer (inserir o que dentro de qual variável) que posso te indicar a maneira de escrever.


OBS: Eu não recomendo a você que continue usando o operador de inserção de expressões literais (=), ele foi adicionado à linguagem por conveniência quando ela era muito menor, e com o tempo, verificou-se que causava mais confusão do que facilidade. Infelizmente, devido ao costume das pessoas com o uso do símbolo de igual vindo da matemática (na matéria de equações), os usuários novatos costumam adotar primeiro este operador, mesmo sendo o mais limitado, e depois acabam tendo dificuldade em mover para o operador mais completo. Por este motivo, a partir da versão 2.0+ o AutoHotkey simplesmente não aceitará mais o uso do operador de inserção de expressões literais = (somente o operador := fará parte da sintaxe para inserções de valores). O operador de comparação de igualdade = continuará sendo utilizado, sendo este o único uso do símbolo de igual solto a partir de então.
cimerio
Posts: 22
Joined: 29 Apr 2019, 15:37

Re: problema com variável

29 Jul 2020, 12:56

obrigado, Gio.
vou estudar o assunto e suas observações mais detalhadamente.

Return to “Ajuda e Suporte Geral”

Who is online

Users browsing this forum: No registered users and 1 guest