Sendkey zweimal basierend auf Erfolg?

8

Ich habe sendkey verwendet, um auf Power Query zuzugreifen und eine Verbindung zum SharePoint-Ordner herzustellen. Alles war glatt, bis der Power Query Data Preview Dialog erscheint.

Wie erlaube ich sendkey fortzufahren, nachdem der Dialog erscheint? Ich verwende die Schaltfläche, um Makro zu starten und Excel 2016 zu verwenden.

%Vor%

Aktualisieren

Ich habe auch versucht sendkey zweimal mit True , aber das gleiche Ergebnis, Stoppt den Dialog.

%Vor%

Update2

Ich habe versucht, was @peh vorgeschlagen hat, mit sleep() und Application.wait() . Ich fand heraus, dass, sobald das Makro initialisiert wurde, sendkey1 von Application.wait() gestartet und gestoppt wurde. Erst nach Ablauf der Wartezeit wird sendkey1 verarbeitet. Und sobald sendkey1 gestartet wurde, startet auch sendkey2 .

Auch versucht, DoEvents hinzuzufügen, sendkey1 funktioniert perfekt. Erst wenn Sie auf die Schaltfläche Abbrechen klicken, wird Application.wait() und sendkey2 gestartet.

%Vor%

Pannel

    
aaa 15.12.2017, 07:55
quelle

2 Antworten

6

Wenn das Dialogfeld jedes Mal dasselbe ist oder eine konsistente Textzeichenfolge in der Beschriftung enthält, können Sie mithilfe der Beschriftung möglicherweise feststellen, wann diese Funktion in einer Schleife mit einem Zeitgeber verwendet wird, der nach a sucht angemessene Zeit für die Dialogbox:

%Vor%

Wo sCaption ist der Name Ihrer Dialogbox. Dann verwenden Sie in Ihrem Hauptteil des Codes:

%Vor%     
Petrichor 15.12.2017 08:31
quelle
0

Ich bin gerade auf meiner Linux-Box, damit ich nicht daran herumprobieren kann, aber Sie könnten versuchen, andere Eigenschaften des Fensters mit einem Dienstprogramm wie:

zu lesen

Ссылка

  

Bearbeiten: Wenn SendKeys absolut nicht funktioniert, und Sie nicht die UI-Automatisierungsroute gehen wollen, und Sie eine Abhängigkeit nicht stören, könnten Sie AutoHotkey und Skript installieren das von VBA (zB mit dem Befehl Shell() ). AHK ist robuster, wenn es um Tastaturmakroautomatisierung geht.

Wenn Sie beispielsweise einen eindeutigen Klassennamen hätten, könnten Sie FindWindowEx verwenden, um das Fensterhandle zu erhalten:

Modul-Bereich ~

%Vor%

Vorgehensweise ~

%Vor%

Dieser Code ist nur ein Proof of Concept, da Sie beispielsweise mehrere Excel-Fenster öffnen können. Es sollte jedoch einen guten Ausgangspunkt geben.

    
Cora Muirgen 21.12.2017 14:02
quelle

Tags und Links