VisualBasic VB-Script: Schleifenabbruch bei Fehler

!Anonymous

Cadet 4th Year
Registriert
Feb. 2012
Beiträge
92
Hallo Leute,
ich bastle gerade an einem kleinen VB-Script, welches mir mittels Copy&Paste Kontaktnummern von einer Excel-Liste in eine Datenbank einfügt. Im Moment wird pro Script-Ausführung ein Kontakt übertragen. Idealerweise soll das ganze per while-Schleife funktionieren, die so lange weitere Nummern überträgt, bis er in der Excel-Liste auf ein leeres Feld stößt.
Meine Fragen wären folgende:
1. Kann ich / Wie kann ich den Inhalt der Excel-Felder in eine Variable auslesen, um dann Überprüfungen anstellen zu können?
2. Wie kann ich einen geschickten Script-Abbruch einbauen, der erkennt wenn etwas schiefgelaufen ist und z.B. eine Fehlermeldung in der Datenbank angezeigt wird, die ich mit "OK" bestätigen muss.

Es wird immer eine Zeile kopiert und dann schonmal in die nächste gesprungen für den nächsten Script-Durchlauf.
Hier das bisherige Scipt:
Code:
Set fen = CreateObject("Wscript.Shell")

fen.AppActivate "Microsoft Excel"
	
Wscript.Sleep 150
fen.SendKeys("^c")

Wscript.Sleep 150
fen.SendKeys("{DOWN}")

Wscript.Sleep 150
fen.AppActivate "Name des Datenbankfensters"

Wscript.Sleep 150
fen.SendKeys("^v")

'Hier werden zwei aus Excel mitkopierte ungewollte Zeichen gelöscht'

Wscript.Sleep 150
fen.SendKeys("{BS}")

Wscript.Sleep 150
fen.SendKeys("{BS}")

Wscript.Sleep 150
fen.SendKeys("{DOWN}")
 
Verrückte Frage, warum machst das nicht gleich mit vba und schreibst ein makro dafür?
Dieses simulierte Copy&Paste wirkt für mich nicht sonderlich robust.
 
Einfach weil ich mit VBA noch nie was gemacht habe :D
Wie würde denn das einfügen in die Datenbank funktionieren?

BTW ich lese die Zellen aud Excel jetzt so aus:
Code:
PfadXLS = "X:\.....xlsx"

Set objXLS = WScript.CreateObject("Excel.Application")
objXLS.Workbooks.open PfadXLS

curr_numb = objXLS.Cells(2,2).Value

'WScript.Echo MeineVariable'

Set fen = CreateObject("Wscript.Shell")

fen.AppActivate "Datenbankfenster"
	
Wscript.Sleep 150
fen.SendKeys(MeineVariable)

objXLS.Quit

Anders als mit Sendkeys bekomme ich die Variable wahrscheinlich nicht darein oder?
 
Zuletzt bearbeitet:
Was für eine Datenbank ist das denn? Kann man damit nicht einfach z.B. CSV importieren?
In der Regel können die meisten DBs gängige Formate problemlos importieren (je nachdem muss man eine Importspezifikation einmal erstellen). Importe programmieren würde ich nur, wenn die Daten vor dem Einspielen verarbeitet werden müssen.
Copy + Paste Makros sind immer hochgradig fehleranfällig wenn in der gleichen Zeit ein Nutzer am Rechner arbeitet.

Ansonsten kann man per VBA auch mit ADO oder DAO direkt auf Datenbanken zugreifen in Makros, nicht unbedingt schön und schnell aber oft eine einfache Lösung.
 
ok da bin ich dann erstmal raus... :D aber die sache mit dem csv klingt für mich noch sehr sinnvoll?
 
Wie kann ich denn am besten mit einer while-Schleife die Nummern senden und überprüfen ob eine Fehlermeldung auftritt, weil z.B eine Kontaktnummer nicht bekannt ist. Die Fehlermeldung hat einen "OK" Button vlllt hilft das ja :D
 
keine Lösung?

Mit Copy + Paste und per Console externe Fehlermeldung im VBA korrekt auffangen ist fast unmöglich, wenn da was kommt ist es meistens nicht die Fehlerursache.

Fehlerabfangen in einer Schleife ohne die zu unterbrechen wäre vermutlich sowas ähnliches wie:

while...
On Error Goto Fehler:

<dein zeug hier>
if err.Number <> 0 then
Fehler:
<Fehlerbehandlung>
err.Clear
End If

Ende while

Wobei ich selbst nicht Daten einspiele (Rollback) wenn nicht alle Datensätze des Imports auch funktioniert haben.
 
Das Importieren ist wirklich leider keine Lösung, weil mir die Rechte dazu fehlen.

Kann ich mit On Error GoTo bzw. err.Number <> 0 den Error aus MS Navision abfragen?
 
Zurück
Oben