| |
VB & Windows APIkeybd_event Anwendungen steuern | | | Autor: SCHAUAN | Datum: 06.04.05 12:13 |
| Hallo allerseits,
ich möchte gern Daten aus Excel in einer zweiten Anwendung bearbeiten und zurück an Excel geben. Also in Excel kopieren, die Anwendung starten --> Anwendung erhält dabei den Focus, die Daten einfügen, bearbeiten und kopieren, die Anwendung schließen --> Excel sollte dann wieder den Focus haben, und am Ende wieder in Excel einfügen. Alle Aktionen werden ausschließlich mit Tastenkombinationen ausgeführt. Leider stecke ich da zuwenig drin. Ich habe mal ein "einfaches" Beispiel erstellt, um in Notepad Zeichen ( a <--> c) auszutauschen. Das kann man natürlich auch in Excel, sollte aber für mich zum einfacheren Verständnis der Lösung mit keybd_events dienen.
Da habe ich schon 3 Probleme.
1. Aus Excel wird nichts kopiert. Es werden im Notepad vorhandene Daten der Zwischenablage eingefügt
2. Notepad wird nicht beendet
3. In Excel wird nichts eingefügt
Versionen: Excel XP, NT 4
Hier ist der code:
Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, _
ByVal bScan As Byte, ByVal dwFlags As Long, _
ByVal dwExtraInfo As Long)
Const KEYEVENTF_KEYUP = &H2
Public Ergebnis
Sub bearbeiten3()
DoEvents
copy_excel3 'in Excel kopieren
oeffne3 'Notepad öffnen
paste_notepad3 'in Notepad einfügen
replace_notepad3 'in Notepad ersetzen
copy_excel3 'in Notepad kopieren - Tastenkombination Kopieren in Excel = Notepad
schliesse3 'Notepad schliessen
paste_notepad3 'in Excel einfügen - Tastenkombination Einfügen in Excel = Notepad
End Sub
Sub copy_excel3()
keybd_event vbKeyMenu, 0, 0, 0
keybd_event vbKeyB, 0, 0, 0 'Alt-B für Bearbeiten
keybd_event vbKeyB, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyMenu, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyDown, 0, 0, 0 ' unter XP ist zuweilen die Down-Taste nötig
keybd_event vbKeyDown, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyK, 0, 0, 0 'K für Kopieren
keybd_event vbKeyK, 0, KEYEVENTF_KEYUP, 0
End Sub
Sub paste_notepad3()
keybd_event vbKeyMenu, 0, 0, 0
keybd_event vbKeyB, 0, 0, 0 'Alt-B für Bearbeiten
keybd_event vbKeyB, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyMenu, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyE, 0, 0, 0 'E für Einfügen
keybd_event vbKeyE, 0, KEYEVENTF_KEYUP, 0
End Sub
Sub replace_notepad3()
keybd_event vbKeyMenu, 0, 0, 0
keybd_event vbKeyS, 0, 0, 0 'Alt-S für Suchen
keybd_event vbKeyS, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyMenu, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyE, 0, 0, 0 'E für Ersetzen
keybd_event vbKeyE, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyC, 0, 0, 0 'kleines c, für großes c vorher shift betätigen
keybd_event vbKeyC, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyTab, 0, 0, 0
keybd_event vbKeyTab, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyA, 0, 0, 0 'kleines a, für großes a vorher shift betätigen
keybd_event vbKeyA, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyMenu, 0, 0, 0
keybd_event vbKeyL, 0, 0, 0 'Alt-L für alles ersetzen
keybd_event vbKeyL, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyF4, 0, 0, 0 'Alt-F4 für Ersetzen-Fenster schließen
keybd_event vbKeyF4, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyMenu, 0, KEYEVENTF_KEYUP, 0
End Sub
Sub oeffne3()
Ergebnis = Shell("C:\WINnt\notepad.EXE", 3)
End Sub
Sub schliesse3()
Close Ergebnis
End Sub
Bin für jede Hilfe dankbar,
Gr??e, SchauAn | |
Re: keybd_event Anwendungen steuern | | | Autor: SCHAUAN | Datum: 07.04.05 07:26 |
| Hallo Martoeng,
wie ich geschrieben habe, dass dient dem Verständnis. Dass was ich dann tun will geht mit Excel nicht.
... ich glaube, ich bin einen Schritt weiter. Am Ende vom Makro copy_excel4
ein DoEvents.
Hier der komplette Entwicklungsstand.
Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, _
ByVal bScan As Byte, ByVal dwFlags As Long, _
ByVal dwExtraInfo As Long)
Const KEYEVENTF_KEYUP = &H2
Public Ergebnis
Sub bearbeiten4()
copy_excel4 'in Excel kopieren
oeffne4_NT 'Notepad öffnen
paste_notepad4 'in Notepad einfügen
replace_notepad4_NT 'in Notepad ersetzen
copy_excel4 'in Notepad kopieren - Tastenkombination Kopieren in Excel = Notepad
schliesse4 'Notepad schliessen
paste_notepad4 'in Excel einfügen - Tastenkombination Einfügen in Excel = Notepad
End Sub
Sub copy_excel4()
keybd_event vbKeyControl, 0, 0, 0 'STRG-C für Kopieren,
keybd_event vbKeyC, 0, 0, 0 'im Notepad muss ggf. vorher alles markiert werden !
keybd_event vbKeyC, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyControl, 0, KEYEVENTF_KEYUP, 0
DoEvents
End Sub
Sub paste_notepad4()
keybd_event vbKeyControl, 0, 0, 0 'STRG-V für Einfügen
keybd_event vbKeyV, 0, 0, 0
keybd_event vbKeyV, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyControl, 0, KEYEVENTF_KEYUP, 0
End Sub
Sub replace_notepad4_NT()
keybd_event vbKeyMenu, 0, 0, 0
keybd_event vbKeyS, 0, 0, 0 'Alt-S für Suchen - in XP Alt-H !
keybd_event vbKeyS, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyMenu, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyE, 0, 0, 0 'E für Ersetzen
keybd_event vbKeyE, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyC, 0, 0, 0 'kleines c, für großes c vorher shift betätigen
keybd_event vbKeyC, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyTab, 0, 0, 0
keybd_event vbKeyTab, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyA, 0, 0, 0 'kleines a, für großes a vorher shift betätigen
keybd_event vbKeyA, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyMenu, 0, 0, 0
keybd_event vbKeyL, 0, 0, 0 'Alt-L für alles ersetzen
keybd_event vbKeyL, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyF4, 0, 0, 0 'Alt-F4 für Ersetzen-Fenster schließen
keybd_event vbKeyF4, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyMenu, 0, KEYEVENTF_KEYUP, 0
End Sub
Sub oeffne4_NT()
Ergebnis = Shell("C:\WINnt\notepad.EXE", 3)
End Sub
Sub oeffne4_XP()
Ergebnis = Shell("C:\WINDOWS\notepad.EXE", 3)
End Sub
Sub schliesse4()
keybd_event vbKeyMenu, 0, 0, 0
keybd_event vbKeyF4, 0, 0, 0 'Alt-F4 für Ersetzen-Fenster schließen
keybd_event vbKeyF4, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyMenu, 0, KEYEVENTF_KEYUP, 0
'Close Ergebnis
End Sub
Sub replace_notepad4_XP()
keybd_event vbKeyControl, 0, 0, 0 'Alt-B für Bearbeiten
keybd_event vbKeyH, 0, 0, 0 'Alt-B für Bearbeiten
keybd_event vbKeyH, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyControl, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyC, 0, 0, 0 'kleines c, für großes c vorher shift betätigen
keybd_event vbKeyC, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyTab, 0, 0, 0
keybd_event vbKeyTab, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyA, 0, 0, 0 'kleines a, für großes a vorher shift betätigen
keybd_event vbKeyA, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyMenu, 0, 0, 0
keybd_event vbKeyL, 0, 0, 0 'Alt-L für alles ersetzen
keybd_event vbKeyL, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyF4, 0, 0, 0 'Alt-F4 für Ersetzen-Fenster schließen
keybd_event vbKeyF4, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyMenu, 0, KEYEVENTF_KEYUP, 0
End Sub
Gr??e, SchauAn | |
Re: keybd_event Anwendungen steuern | | | Autor: SCHAUAN | Datum: 07.04.05 17:12 |
| Hallo Martoeng,
ich möchte z.B. eine Grafik aus einem Excel-Sheet in Paint spiegeln. Das bekomme ich anders nicht gebacken. Den Test-Code für Notepad habe ich jetzt soweit, dass er läuft, mit folgenden Änderungen zur letzten Version
- in jedem Makro mit keybd.. am Ende DoEvents
- im Schließen-Makro noch die Taste n - wegen der Speichern-Abfrage
- ein Extra - Makro für das Kopieren im Notepad - zusätzlich alles markieren, unter NT per Menübefehl, für XP muß noch STRG-A programmiert werden
- und vor dem Einfügen in Excel im Hauptmakro (bearbeiten4) eine kurze Wartezeit sonst kommen die vorher kopierten Daten und nicht die in Notepad kopierten.
Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, _
ByVal bScan As Byte, ByVal dwFlags As Long, _
ByVal dwExtraInfo As Long)
Const KEYEVENTF_KEYUP = &H2
Public Ergebnis
Sub bearbeiten4()
copy_excel4 'in Excel kopieren
oeffne4_NT 'Notepad öffnen
paste_notepad4 'in Notepad einfügen
replace_notepad4_NT 'in Notepad ersetzen
copy_notepad4 'in Notepad kopieren
Application.Wait TimeSerial(Hour(Now()), Minute(Now()), Second(Now()) + 2)
schliesse4 'Notepad schliessen
paste_notepad4 'in Excel einfügen - Tastenkombi Einfügen in Excel = Notepad
End Sub
Sub copy_excel4()
keybd_event vbKeyControl, 0, 0, 0 'STRG-C für Kopieren,
keybd_event vbKeyC, 0, 0, 0
keybd_event vbKeyC, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyControl, 0, KEYEVENTF_KEYUP, 0
DoEvents
End Sub
Sub copy_notepad4()
keybd_event vbKeyControl, 0, 0, 0 'STRG-A-C für Markieren und Kopieren,
keybd_event vbKeyA, 0, 0, 0
keybd_event vbKeyA, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyC, 0, 0, 0
keybd_event vbKeyC, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyControl, 0, KEYEVENTF_KEYUP, 0
DoEvents
End Sub
Sub paste_notepad4()
keybd_event vbKeyControl, 0, 0, 0 'STRG-V für Einfügen
keybd_event vbKeyV, 0, 0, 0
keybd_event vbKeyV, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyControl, 0, KEYEVENTF_KEYUP, 0
End Sub
Sub replace_notepad4_NT()
keybd_event vbKeyMenu, 0, 0, 0
keybd_event vbKeyS, 0, 0, 0 'Alt-S für Suchen - in XP Alt-H !
keybd_event vbKeyS, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyMenu, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyE, 0, 0, 0 'E für Ersetzen
keybd_event vbKeyE, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyC, 0, 0, 0 'kleines c, für großes c vorher shift
keybd_event vbKeyC, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyTab, 0, 0, 0
keybd_event vbKeyTab, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyA, 0, 0, 0 'kleines a, für großes a vorher shift
keybd_event vbKeyA, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyMenu, 0, 0, 0
keybd_event vbKeyL, 0, 0, 0 'Alt-L für alles ersetzen
keybd_event vbKeyL, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyF4, 0, 0, 0 'Alt-F4 für Ersetzen-Fenster schließen
keybd_event vbKeyF4, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyMenu, 0, KEYEVENTF_KEYUP, 0
DoEvents
End Sub
Sub oeffne4_NT()
Ergebnis = Shell("C:\WINnt\notepad.EXE", 3)
End Sub
Sub oeffne4_XP()
Ergebnis = Shell("C:\WINDOWS\notepad.EXE", 3)
End Sub
Sub schliesse4()
keybd_event vbKeyMenu, 0, 0, 0
keybd_event vbKeyF4, 0, 0, 0 'Alt-F4 für Fenster schließen
keybd_event vbKeyF4, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyMenu, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyN, 0, 0, 0 'N für nicht Speichern
keybd_event vbKeyN, 0, KEYEVENTF_KEYUP, 0
'Close Ergebnis
DoEvents
End Sub
Sub replace_notepad4_XP()
keybd_event vbKeyControl, 0, 0, 0 'Alt-H für Bearbeiten
keybd_event vbKeyH, 0, 0, 0
keybd_event vbKeyH, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyControl, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyC, 0, 0, 0 'kleines c, für großes c vorher shift betätigen
keybd_event vbKeyC, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyTab, 0, 0, 0
keybd_event vbKeyTab, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyA, 0, 0, 0 'kleines a, für großes a vorher shift betätigen
keybd_event vbKeyA, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyMenu, 0, 0, 0
keybd_event vbKeyL, 0, 0, 0 'Alt-L für alles ersetzen
keybd_event vbKeyL, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyF4, 0, 0, 0 'Alt-F4 für Ersetzen-Fenster schließen
keybd_event vbKeyF4, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyMenu, 0, KEYEVENTF_KEYUP, 0
DoEvents
End Sub
Gr??e, SchauAn | |
Re: keybd_event Anwendungen steuern | | | Autor: SCHAUAN | Datum: 07.04.05 17:42 |
| ... mein Problem ist, dass es bis runter zu Excel97 laufen muss und in vba. Da klappt auch die Picturebox (noch?) nicht.
Gr??e, SchauAn | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
Neu! sevEingabe 3.0
Einfach stark!
Ein einziges Eingabe-Control für alle benötigten Eingabetypen und -formate, inkl. Kalender-, Taschenrechner und Floskelfunktion, mehrspaltige ComboBox mit DB-Anbindung, ImageComboBox u.v.m. Weitere InfosTipp des Monats Access-Tools Vol.1
Über 400 MByte Inhalt
Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB
Nur 24,95 EURWeitere Infos
|