Supportnet Computer
Planet of Tech

Supportnet / Forum / Tabellenkalkulation

VBA Problem in Excel





Frage

Guten morgen zusammen! Ich habe ein Problem mit VBA in Excel und hoffe, dass hier vielleicht jemand weiß, woran es liegt. Für die Hilfe schonmal vielen Dank!! Jetzt zu meinem Problem: Mit einem Programm zur Verwaltung einer Datenbank kann ich mir auf Knopfdruck eine *.csv Datei exportieren in der alle Datensätze der Datenbank stehen (ca. 30.000). Das Programm speichert diese Datei unter C:\Temp\dateiname.csv und öffnet dann die Datei mit Excel. In einer anderen Exceldatei stehen ca. 4000 dieser Datensätze. Um jetzt die Exceldatei mit den 4000 Datensätzen zu aktualisieren (die Datenbank mit den 30.000 Datensätzen ist immer am aktuellsten) habe ich mir ein Makro in VBA geschrieben. Exportiere ich die CSV-Datei welche dann ja auch in Excel geöffnet ist bekomme ich nach der Zeile Set wks_alle = Workbooks("dateiname.csv").Worksheets("1") den Laufzeitfehler '9' - Index außerhalb des gültigen Bereichs - Excel kann die Datei also nicht finden. Die Datei ist aber vorhanden UND geöffnet. Wenn ich die CSV-Datei vorher manuell speichere, dann schließe und erneut öffne funktioniert alles problemlos! Woran kann das liegen?? Ich hoffe jemand hat einen Rat. Viele Grüße und einen schönen Tag! Danke. Nils

Antwort 1 von Seradest

Hallo Nils!
Du schreibst, dass es geht wenn du die Datei gespeichert hast. Gibt es die Datei vor dem Speichern denn auch schon? Oder wird sie erst beim Speichern auch tatsächlich angelegt?

Grüße
Carsten

Antwort 2 von lagerverwalter

Hallo Carsten,

die Datei wird im Ordner C:\TEMP vom Programm angelegt, sie ist also vorhanden, ja.

Das is ja auch genau das, was ich nicht verstehe...
Die Datei ist vorhanden und geöffnet. Ich kann aber per VBA nicht darauf zugreifen. Mit ".Activate" gehts auch nicht. Hab schon viel probiert... :-(

Helft mir...

Antwort 3 von Seradest

Mmh sehr seltsam, kannst du gar nicht auf die Datei, also das Workbook zugreifen oder nur nicht auf das Tabellenblatt? Hast du das mal ausprobiert?

Grüße
Carsten

Antwort 4 von ChatAlligator

Wenn du nur auf dem ersten Blatt Daten liegen hast und diese in einen Ordner (der kein geschützter Systemordner ist) schreiben willst, dann versuch doch al folgende Alternative

'Löschen von Seiten und überschreiben einer Datei würden Warnmeldungen zum manuellen bestätigen senden


Application.DisplayAlerts = False 'Warnmeldungen ausschalten

For Seite = Worksheets.Count To 2 Step -1 'Jeweils letzte Seite zum löschen ansprechen ohne die erste

Worksheets(Seite).Delete

Next Seite 'Ende der Seitenschleife

ActiveWorkbook.SaveAs Filename:="C:\Temp\dateiname.CSV", FileFormat:=xlCSVMSDOS, CreateBackup:=False '"Datei speichern unter"

Application.DisplayAlerts = True 'Warnmeldungen einschalten


Antwort 5 von lagerverwalter

Ich kann weder auf das Worksheet noch auf das Workbook zugreifen.

Workbooks("dateiname.csv").Activate


führt zur selben Meldung wie

Workbooks("strommasten.csv").Worksheets(1).Activate


@ChatAlligator: Sorry, aber ich weiß grade nicht, was du mir sagen möchtest. Ich verstehe den Zusammenhang zu meinem Problem nicht... Kannst du mir den evtl. erklären? Dankeschön.

Antwort 6 von ChatAlligator

Zitat:
@ChatAlligator: Sorry, aber ich weiß grade nicht, was du mir sagen möchtest.
Du wollst doch ein Tabellenblatt in eine CSV-Datei exportieren.
CSV-Dateien bilden nur jeweils eine Tabelle als Text ab.
Wenn die zu exportierenden Daten in einer geöffneten EXCEL-Datei vorliegen, dann ist auch kein Objekt erforderlich, das mit Set .. gefüttert werden will.

Wenn eine Excel-Datei (.xls) als CSV-Datei gespeichert werden soll, dann kann nur ein Tabellenblatt gespeichert werden. Also löscht das Makro alle weiteren Tabellenblätter (in der vordergrundig geöffneten EXCEL-Datei) mit For ... Next Schleife, damit es kein Auswahlproblem gibt - realisiert durch die .
Weiter wird "Datei speichern unter" verwendet, um die CSV-Datei aus dem einzigen Tabellenblatt zu erstellen.
Warnmeldungen wie
Zitat:
"Tabellenblatt wird endgültig gelöscht .
- Klicken sie auf 'OK' um ausgewählte Blätter wirklich zu löschen"
oder
Zitat:
"Die Datei dateiname.CSV besteht bereits.
Möchten Sie die bestehende Datei ersetzen?"
werden anfangs abgeschaltet und später wieder angeschaltet

Antwort 7 von lagerverwalter

Zitat:
Du wollst doch ein Tabellenblatt in eine CSV-Datei exportieren.


Nein, das wollte ich nicht ;-)
Das Problem ist ein ganz anderes. Die CSV Datei exportiere ich aus einem Programm welches auf eine Datenbank zugreift. Es wird also eine CSV Datei erstellt und automatisch in Excel geöffnet. Das Problem ist, dass ich auf diese geöffnete Datei mit VBA nicht zugreifen kann. Ich muss die Datei erst
erneut abspeichern, schließen und wieder öffnen...

Aber danke für deinen Tip, dann weiß ich das ja auch jetzt :-)

Hat noch jemand eine Idee woran es liegen könnte?