Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
968to972
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
968to972
968to972
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Mit VBA Workbooks identifizieren

Mit VBA Workbooks identifizieren
23.04.2008 20:43:00
Christian
Hallo zusammen,
mit einem kurzen VBA-Code exportiere ich ein Tabellenblatt als csv-File. Das klappt auch schon ganz gut, so lange nur die Arbeitsmappe offen ist, aus der das Makro gestartet wird. Sind mehr Mappen offen, dann kommt es zu verwechslungen und der Code steigt aus. Eine Beispieldatei inkl. Code liegt hier:
https://www.herber.de/bbs/user/51811.xls.
Es wär cool, wenn jemand eine Idee hätte, wie ich auch mehrere geöffnete Arbeitsmappen gezielt mit VBA ansprechen kann.
Besten Dank und Viele Grüße,
Christian

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Mit VBA Workbooks identifizieren
23.04.2008 20:52:00
Ramses
Hallo
WO treten Verwechslungen auf ?
Ansonsten müsste das zumindest so heissen
Sheets("csv-File").Copy Before:=Newbook.Sheets(1)
Gruss Rainer

AW: Mit VBA Workbooks identifizieren
23.04.2008 21:59:39
Christian
Hallo Rainer,
wie Daniel richtig erkannt hat treten die Verwechslungen auf, weil ich den INDEX verwende, um die Workbooks anzusprechen. Bei mehreren offenen Arbeitsmappen vertauscht Excel den INDEX willkürlich und für mich nicht mehr steuerbar.
Danke und Viele Grüße
Christian

AW: Mit VBA Workbooks identifizieren
23.04.2008 21:04:00
Daniel
Hi
es gibt mehrere Möglichkeiten ein Workbook zu referenzieren, unteranderem über:
- feste VBA-Begriffe: THISWORKBOOK und ACTIVEWORKBOOK
- Objektvariablen (wenn ich das Workbook einer solchen zugewiesen habe)
- den Workbook-Namen: Workbooks("Tabelle1.xls")
- die Index-Nummer: Workbooks(1)
du wendest alles mal an, quer durcheinander.
das Problem kommt dann bei der INDEX-Variante, da bei mehreren geöffneten Workbooks Excel selbst entscheidet, welches Workbook welche Index-Nummer bekommt.
um eindeutig zu sein, sollte man immer die Variablen- oder die Workbook-Namenvariante nehmen.
opitimert auf die Variablenvariante sieht dein Code so aus:

Option Explicit
Sub csv_export()
Dim Dateiname As String
Dim csv_name As String
Dim Jahr As String
Dim wbQuelle As Workbook
Dim wbNeu As Workbook
Set wbQuelle = ActiveWorkbook
Jahr = Right(wbQuelle.Sheets("nebenberechnungen").Range("A1").Value, 4)
Dateiname = Year(Date) & "." & Format(Month(Date), "00") & "." & Day(Date) & "_SONST_" & Jahr &  _
".csv"
Set wbNeu = Workbooks.Add
wbQuelle.Sheets("csv-File").Copy Before:=wbNeu.Sheets(1)
csv_name = Application.GetSaveAsFilename(Dateiname, FileFilter:="CSV (Trennzeichen-getrennt) _
(*.csv), *.csv")
If csv_name = False Then
MsgBox "CSV wurde nicht gespeichert."
Else
wbNeu.Sheets("csv-File").SaveAs Filename:=csv_name, FileFormat:=6, CreateBackup:=False,  _
Local:=True
SendKeys "^s~~%dcn"
End If
End Sub


Außerdem solltest du dringend unter EXTRAS-OPTIONEN das Häkchen bei "Variablendeklaration erforderlich" setzen.
das Zwingt dich, alle variablen zu deklarieren und vermeidet damit viele schwer auffindbare Fehler, die durch Tippfehler entstehen können.
Gruß, Daniel

Anzeige
AW: Mit VBA Workbooks identifizieren
23.04.2008 21:56:00
Christian
Hallo Daniel,
Danke für die einleuchtende Erklärung. Das Problem mit dem INDEX habe ich schon erkannt, aber nach mehreren fehlgeschlagenen Versuchen Variablen durchgehend zu verwenden, wusste ich nicht mehr weiter ;-)
Mit der Deklaration stehe ich auch noch auf Kriegsfuss. Dein Code funktioniert bei mir nur, wenn ich die Variable csv_name nicht als String deklariere, also wenn da nur "Dim csv_name" steht. Das zu verstehen ist aber "nice to have". Hauptsache es funktioniert.
Viele Grüße
Christian

AW: Mit VBA Workbooks identifizieren
23.04.2008 22:39:00
Daniel
Hi
ok, habe ich übersehen.
das Problem mit csv_str liegt daran, daß du diese Variable mal als String und mal als Boolsche Variable (wahr/falsch) verwendest.
ändere die IF-Abfrage mal so ab:

If csv_name = "Falsch" Then 

,
dann kannst du csv_name als String deklarieren.
mit der Variablendeklaration bzw den Variablentypen solltest du dich durchaus etwas beschäftigen, eine saubere Variablendeklation ist der erste Baustein zum erfolgreichen Programmieren.
Gruß, Daniel

Anzeige
AW: Mit VBA Workbooks identifizieren
23.04.2008 22:50:00
Christian
Super, danke nochmals. Klingt logisch...
Prädikat: sehr hilfreich!

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige