VBA Problem in Excel
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 schreiben
Antwort 1 von Seradest vom 27.08.2019, 10:14 Options
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 vom 27.08.2019, 10:32 Options
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 vom 27.08.2019, 10:40 Options
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
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 vom 27.08.2019, 11:40 Options
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.
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 vom 27.08.2019, 13:20 Options
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?