616 Aufrufe
Gefragt in Tabellenkalkulation von
Hallo,
ich habe folgendes Makro hinterlegt, möchte aber, dass die zu speichernde CSV-Datei einen anderen Namen bekommt. Wo trage ich den neuen Namen ein?

Sub spaltenexport()
Worksheets("Logomate").Unprotect Password:="kibek"

Dim Ausgabepfad As String
Dim Ausgabedatei As String
Dim lngLetzte As Long
Dim lngSpalte As Long
Dim Zeile As String
Dim VollZeile As String
Dim Trennzeichen As String
Dim arrTabellen
Dim arrSpalten
Dim i As Long
Dim z As Long

'Bildschirmaktualisierung ausschalten
Application.ScreenUpdating = False

'Ausgabepfad wird festgelegt
Ausgabepfad = "\\192.168.50.9\LogoMate_Transfer\LogoMate\Daten\Manuell\Aktionen\"

'Trennzeichen wird festgelegt
Trennzeichen = ";"

'Namen der Tabellenblätter die als CSV-ausgegeben werden
arrTabellen = Array("Logomate")

'letzte Spalte, die in den einzelnen Blättern ausgegeben werden soll, ab Spalte A = 1
arrSpalten = Array(8)

'Schleife zum Durchlauf
For i = 0 To 2

'Ausgabepfad und Dateinamen für Ausgabedatei erstellen
Ausgabedatei = Ausgabepfad & arrTabellen(i) & ".csv"

'letzte Zeile des jeweiligen Tabellenblatts ermitteln
lngLetzte = Worksheets(arrTabellen(i)).Cells(Rows.Count, 1).End(xlUp).Row

'Falls Ausgabedatei bereits besteht, wird diese gelöscht
If Dir(Ausgabedatei) <> "" Then Kill (Ausgabedatei)

'Datei Öffen zur Ausgabe
Open Ausgabedatei For Output As #1


For z = 1 To lngLetzte

For lngSpalte = 1 To arrSpalten(i)
Zeile = Trim(Worksheets(arrTabellen(i)).Cells(z, lngSpalte).Text)
Zeile = Replace(Zeile, Trennzeichen, "") 'ggf in Text vorkommendes Trennzeichen wird gelöscht
VollZeile = VollZeile & Zeile & Trennzeichen
Next lngSpalte

'Ausgabe in Datei
VollZeile = Left(VollZeile, Len(VollZeile) - 1) 'Letzten Semicolon abschneiden
Print #1, VollZeile
VollZeile = ""

Next z

Close #1 'Datei schliessen

Next i

'Bildschirmaktualiserung
Application.ScreenUpdating = True

'Abschlussmeldung
MsgBox "Sicherung CSV übertragen", 64
End Sub


Beim Ausführen des Makros zeigt der Debugger eine Meldung an, führt das Makro aber weiter aus. Wie kann ich die Meldung ausstellen?
Laufzeitfehler '9':
Index außerhalb des gültigen Bereichs.

Vielen Dank schon mal.

5 Antworten

0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
Hallo,

das Makro kommt mir irgendwie bekannt vor, ist aber etwas verstümmelt ;-).

Der ursprüngliche Code war dafür gedacht mehrere Tabellen einer Arbeitsmappe mit jeweils unterschiedlicher Spaltenanzahl als CSV-Datei zu exportieren. Daher auch die verschiedenen Arrays.
Da du für die Tabellennamen nur einen Namen festgelegt hast, die Schleife zum Auslesen der Arbeitsblätter aber 3 mal durchlaufen wird (Schleife zum Durchlauf For i = 0 To 2) funktioniert der Code beim ersten Durchlauf, beim zweiten Durchlauf gibt es aber eine Fehlermeldung, da kein weiterer Tabellenname existiert.

Wenn du nur die Spalte A des Tabellenblatts "Logomate" exportieren willst, dann probier mal das folgende Makro:

Sub Logomate_csv()

Dim Ausgabepfad As String
Dim Ausgabedatei As String
Dim lngLetzte As Long
Dim lngSpalte As Long
Dim Zeile As String
Dim VollZeile As String
Dim Trennzeichen As String
Dim z As Long

'Bildschirmaktualisierung ausschalten
Application.ScreenUpdating = False

'Ausgabepfad wird festgelegt
Ausgabepfad = "\\192.168.50.9\LogoMate_Transfer\LogoMate\Daten\Manuell\Aktionen\"

'Trennzeichen wird festgelegt
Trennzeichen = ";"

'Ausgabepfad und Dateinamen für Ausgabedatei erstellen - Dateinamen anpassen!!!
Ausgabedatei = Ausgabepfad & "Logomate_export.csv"

With Worksheets("Logomate")
'letzte Zeile des jeweiligen Tabellenblatts ermitteln
lngLetzte = .Cells(Rows.Count, 1).End(xlUp).Row

'Falls Ausgabedatei bereits besteht, wird diese gelöscht
If Dir(Ausgabedatei) <> "" Then Kill (Ausgabedatei)

'Datei Öffnen zur Ausgabe
Open Ausgabedatei For Output As #1

For z = 1 To lngLetzte
Zeile = Trim(.Cells(z, 1).Text)
Zeile = Replace(Zeile, Trennzeichen, "") 'ggf in Text vorkommendes Trennzeichen wird gelöscht
VollZeile = VollZeile & Zeile & Trennzeichen

'Ausgabe in Datei
VollZeile = Left(VollZeile, Len(VollZeile) - 1) 'Letzten Semicolon abschneiden
Print #1, VollZeile
VollZeile = ""

Next z

End With

Close #1 'Datei schliessen

'Bildschirmaktualiserung
Application.ScreenUpdating = True

'Abschlussmeldung
MsgBox "Sicherung CSV übertragen", 64
End Sub


Den Blattschutz brauchst du nicht aufzuheben, da auf das Blatt nur lesend zugegriffen wird.

Gruß

M.O.
0 Punkte
Beantwortet von
Hallo M.O.,

:-) stimmt, die alte Liste musste nun doch noch mal geändert werden.

Das neue Makro funktioniert, allerdings ist da noch eine Kleinigkeit. Es soll nicht nur die Spalte A gespeichert werden, sondern Spalte A-H. Wo trag' ich das denn ein?

Gruß,
Colatrinker
0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
Hallo,

dann so:
Sub Logomate_csv()

Dim Ausgabepfad As String
Dim Ausgabedatei As String
Dim lngLetzte As Long
Dim lngSpalte As Long
Dim Zeile As String
Dim VollZeile As String
Dim Trennzeichen As String
Dim z As Long

'Bildschirmaktualisierung ausschalten
Application.ScreenUpdating = False

'Ausgabepfad wird festgelegt
Ausgabepfad = "\\192.168.50.9\LogoMate_Transfer\LogoMate\Daten\Manuell\Aktionen\"

'Trennzeichen wird festgelegt
Trennzeichen = ";"

'Ausgabepfad und Dateinamen für Ausgabedatei erstellen - Ausgabename anpassen
Ausgabedatei = Ausgabepfad & "Logomate_export.csv"

With Worksheets("Logomate")
'letzte Zeile des Tabellenblatts ermitteln
lngLetzte = .Cells(Rows.Count, 1).End(xlUp).Row

'Falls Ausgabedatei bereits besteht, wird diese gelöscht
If Dir(Ausgabedatei) <> "" Then Kill (Ausgabedatei)

'Datei Öffen zur Ausgabe
Open Ausgabedatei For Output As #1

For z = 1 To lngLetzte
For lngSpalte = 1 To 8
Zeile = Trim(.Cells(z, lngSpalte).Text)
Zeile = Replace(Zeile, Trennzeichen, "") 'ggf in Text vorkommendes Trennzeichen wird gelöscht
VollZeile = VollZeile & Zeile & Trennzeichen
Next lngSpalte
'Ausgabe in Datei
VollZeile = Left(VollZeile, Len(VollZeile) - 1) 'Letzten Semicolon abschneiden
Print #1, VollZeile
VollZeile = ""

Next z

End With

Close #1 'Datei schliessen

'Bildschirmaktualiserung
Application.ScreenUpdating = True

'Abschlussmeldung
MsgBox "Sicherung CSV übertragen", 64
End Sub


Gruß

M.O.
0 Punkte
Beantwortet von
Hi,

vielen Dank für die schnelle Hilfe. Das Makro selbst funktioniert wieder super. Toll :-)

Habe jetzt aber noch eine Frage. Beim Ausführen des Makros kommt ständig ein Sicherheitshinweis:
"Warnung: Es kann nicht festgestellt werden, ob dieser Inhalt aus einer vertrauenswürdigen Quelle stammt. Sie sollten diesen Inhalt deaktiviert lassen, außer wenn von diesem Inhalt wichtige Funktionalität bereitgestellt wird und Sie dess Quelle vertrauen.

Dateipfade: xxxx.xlsm

Makros wurden deaktiviert. Makros können Viren....."

Der angegebene Dateipfad hat nichts mit dieser Datei oder dem Makro zu tun. Wenn ich die Makros aktiviere, öffnet sich die im Dateipfad genannte Exceltabelle zusätzlich.
Kann ich das irgendwie ausstellen?

Gruß, Colatrinker.
0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
Hallo,

die Meldung kenne ich natürlich (allerdings ohne Dateipfade), das hängt mit den Sicherheitseinstellungen zusammen. Du kannst in den Sicherheitseinstellungen z. B. den Speicherort der Datei als vertrauenswürdigen Speicherort definieren.
Warum aber ein Pfad mit einer anderen Datei angezeigt wird, die auch noch geöffnet wird kann ich leider nicht sagen.
Vielleicht hilft es ja auch, den Code digital zu signieren (Klick mich!).

Gruß

M.O.
...