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 |