VBS Wert aus Excel in TXT schreiben?

1 Antwort

Vom Fragesteller als hilfreich ausgezeichnet

Excel-Applikation starten (Excel muss auf dem Computer installiert sein)

Dim XLA: Set XLA = CreateObject("Excel.Application")

Mit Visible=True wird das Fenster sichtbar, mit False wird es wieder unsichtbar. Beim debuggen empfiehlt es sich, wenn man das Fenster sichtbar hat, später ist das je nach Anwendung nicht mehr notwendig.

Damit mögliche Fehlermeldungen aus Excel angezeigt werden können, muss das Fenster einmal Sichtbar geschaltet werden. Dannach kann man es gleich wieder unsichtbar schalten. Ist sicher, dass sich kein Fenster öffnet, kann man die Zeilen auch weglassen

XLA.Visible=True
XLA.Visible=False

Nun muss die Datei geöffnet werden

Set WB = XLA.Workbooks.Open("C:\Users\...\Datei.xlsx")

Wenn nur ein Wert gelesen werden soll, reicht es wenn man es stattdessen nur Read-Only und ohne Update-Links macht. Dann gibt es keine Probleme, wenn die Datei schon offen ist

Set WB = XLA.Workbooks.Open("C:\Users\...\Datei.xlsx", False, True)

Nun könnten wir kurz prüfen, ob kein Fehler aufgetreten ist

If Err.Number <> 0 Then
	MsgBox("Fehler beim Öffnen: " & Err.Description)
	Err.Clear
else
	'Programm hier fortführen...
End If

Auf die einzelnen Worksheets kann mit

WB.Worksheets(1)

oder mit

WB.Worksheets("Name")
'Verwendung
Dim WS
Set WS = WB.Worksheets("Name")

zugegriffen werden

Zellen gibt es mit

WB.Worksheets(1).Cells(Zeile,Spalte)
'Beispiel:
WB.Worksheets(1).Cells(1,2)

Alternativ funktioniert auch

WB.Worksheets(1).Range("A2")

Also z.B.

Wert = WB.Worksheets(1).Range("A2")
'bzw.
Wert = WS.Range("A2")

Will man nicht den Wert der Zelle (.Value), kann man auch die Formel (.Formula) abrufen. Falls du noch weitere Befehle brauchst, kannst du den Excel-Makro-Editor die gewünschte Aktion aufzeichnen lassen.

Dannach muss nur noch Wert als txt-Datei abgespeichert werden.

Am Ende musst du noch die Datei schließen und Excel beenden

'Workbook speichern ohne Änderungen zu speichern (sollen Änderungen gespeichert werden True statt False oder vorher WB.Save ausführen)
WB.Close False
XLA.Quit

Leider wird Excel nicht mehr immer beendet. Es kann passieren, dass Excel als unsichtbarer Prozess im Taskmanager erhalten bleibt und dann im ungünstigsten Fall erst bei einem Neustart verschwindet. Es ist zwar möglich das Beenden zu erzwingen, aber das macht den Code deutlich umständlicher.

Fidibus180 
Fragesteller
 16.07.2021, 07:46

Danke für diese tolle Antwort!

0