Folgender Code öffnet eine Website dort werden die Daten markiert und kopiert, dann werden sie mit MsgBox bei OK aus der Zwischenablage in eine Datei in Zeile 2 eingefügt, ein direktes abgreifen ist nicht möglich da keine Tabellen erkannt werden. Nun kommt es aber vor das das markieren und kopieren nicht korrekt funktioniert, daher wird nach dem einfügen mit MsgBox "Prüfen ob Daten korrekt eingefügt!", vbOKCancel geprüft sind die Daten korrekt eingefügt läuft das Makro weiter durch bei Abbruch, wird das Makro abgebrochen, ich möchte jetzt aber nicht wieder von vorne anfangen sondern zu dem Punkt MsgBox "Daten kopieren und einfügen mit OK bestätigen.", vbInformation sodass ich die Daten einfach nochmal einfügen kann und mir die Prozedur mit dem Öffnen der Website erspare, habe leider selbst keine Möglichkeit gefunden zu diesem Punkt zurückzu kehren.
Die besagte Stelle besteht deiner Beschreibung nach aus drei weiteren Vorgehensweisen:
- OK → Weiter mit dem nächsten Schritt
- NICHT OK → Zurück zum "Kopieren"-Schritt
- ABBRUCH → Vorgang abbrechen
Dies lässt sich in der MsgBox durch vbYesNoCancel abbilden.
Eine zwar naive aber funktionale Implementierung könnte so aussehen.
Die einzelnen Schritte. Das könnte man auch als Enum definieren; macht keinen großen Unterschied.
Private Const STEP_EXECUTE As Integer = 0
Private Const STEP_COPY As Integer = 1
Private Const STEP_PASTE As Integer = 2
Private Const STEP_VALIDATE As Integer = 3
Private Const STEP_FORMAT As Integer = 4
Private Const STEP_EXIT As Integer = 5
Code ist ungetestet
Dim chromePath As String
Dim url As String
'CromeBrower Pfad
chromePath = """C:\Program Files\Google\Chrome\Application\chrome.exe"""
url = "https://???????"
Dim currentStep As Integer
currentStep = STEP_EXECUTE
Do
Select Case currentStep
Case STEP_EXECUTE
Call Shell(chromePath & " --new-window " & url, vbNormalFocus)
currentStep = STEP_COPY
Case STEP_COPY
Call MsgBox("Daten in die Zwischenablage kopieren - z.B. mit [STRG]+[C] - und mit OK bestätigen.", vbOKOnly Or vbInformation)
' Nutzer muss die Daten per Hand im Browser auswählen und in die Zwischenablage kopieren
currentStep = STEP_PASTE
Case STEP_PASTE
Set ws = ActiveWorkbook.Sheets(1)
'Daten aus der Zwischenablage einfügen
Call ws.Paste()
'ws.Range("A2").Paste = xlPasteAll
Call ws.Rows(2).Delete()
currentStep = STEP_VALIDATE
Case STEP_VALIDATE
Select Case MsgBox("Prüfen ob Daten korrekt eingefügt! (Nein = Vorgang wiederholen)", vbExclamation Or vbYesNoCancel Or vbDefaultButton2)
Case vbYes ' Daten korrekt
currentStep = STEP_FORMAT
Case vbNo ' Daten nicht korrekt -> Vorgang wiederholen
currentStep = STEP_COPY
Case vbCancel ' Daten nicht korrekt -> Vorgang abbrechen
currentStep = STEP_EXIT
End Select
Case STEP_FORMAT:
'Textumbruch aufheben
ws.usedRange.WrapText = False
'Spaltenbreite und Zeilenhöhe optimieren
Call ws.usedRange.Columns.AutoFit()
Call ws.usedRange.Rows.AutoFit()
Call ActiveWorkbook.Save()
Call Workbooks("MMMM.xlsm").Close(SaveChanges:=True)
currentStep = STEP_EXIT
Case STEP_EXIT:
Exit Do
End Select
Loop
Grüße
|