2017-11-16 6 views
0

Ich versuche, die Eingabe von einem Benutzer zu erhalten, suchen Sie den Eingabewert in einer Excel-Spalte und geben Sie den Wert der Zelle auf der rechten Seite des übereinstimmenden Werts zurück.Typenkonflikt in AutoHotkey Excel

Das ist, was ich gefunden habe. Solange ich% index% durch eine Zahl ersetze, wird ein Wert aus der Excel-Datei zurückgegeben.

Der Fehler Ich erhalte sage mir, es ist ein ‚Typenkonflikt‘, wo ich % Index% in

value := workbook.Sheets("Sheet1").Cells(%index%, 1).Value 

Irgendwelche Ideen, wie verwenden, um den Typenkonflikt zu beheben?

#a:: 
workbook := ComObjGet("somepath\tester.xlsx") 

InputBox, OutputVar, Question 1, What are you looking for? 
if (OutputVar) 
    MsgBox, Let me do this for you. 
    intent = OutputVar 

index = 1 
value = "" 

Loop { 
    index := %index% + 1 
    value := workbook.Sheets("Sheet1").Cells(%index%, 1).Value 
} 
Until %intent% = %value% 

SendInput, workbook.Sheets("Sheet1").Cells(%index%, 2).Value 

Return 
+0

Ich habe ein paar Kommentare zu finden ist. Wissen Sie, dass Sie in Excel direkt nach Werten suchen und Werte benachbarter Zellen abrufen können? Warum lesen Sie die Excel-Spalten außerhalb von Excel nicht in ein AHK-Array und führen die Suche lokal aus? –

Antwort

2

Verwenden index, nicht %index%, in Ausdrücken. Außerdem können Sie die eingebaute in A_INDEX Variable innerhalb von Schleifen

Hier ist Ihre korrigierten Code verwenden:

#a:: 
    workbook := ComObjGet("somepath\tester.xlsx") 
    MAX_ROWS := 10 

    InputBox intent, Question 1, What are you looking for? 

    if (ErrorLevel == 0 && intent) { 
    Loop %MAX_ROWS% { 
     if (intent == workbook.Sheets("Sheet1").Cells(A_Index, 1).Value) { 
     SendInput % workbook.Sheets("Sheet1").Cells(A_Index, 2).Value 
     return 
     } 
    } 
    MsgBox 48, Not Found, "%intent%" not found in column a 
    } 
    return 

Hinweise:

  • Sie nicht Substitution verwenden können, wenn ein Befehl nimmt ein Ausdruck
  • bedeutet, dass OK gedrückt wurde. Siehe InputBox
  • SendInput % macht die Linie verwenden expression mode; alles folgende „%“ als Ausdruck ausgewertet
  • Ihre Schleife beendet nie, wenn intent nicht in der Tabelle