2.1k Aufrufe
Gefragt in Tabellenkalkulation von fmuehlen Einsteiger_in (11 Punkte)
Hallo Zusammen,

bin Unwissender bzgl. VBA-Skripte. Ich habe mir durch googeln ein Skript zusammengestückelt, das auch funktioniert, aber eben nciht ganz :-)

Ich möchte bestimmte Zeilen und Spalten eines Sheets in eine CSV-Datei kopieren. Dabei sollen aber die Werte, nicht die verwendeten Formeln kopiert werden. Hier mein Skript:

Sub Speichern_Artikelgrunddaten_CSV()

Dim varSpalten
Dim AbZeile As Integer
Dim BisZeile As Integer
Dim Zeile As Integer
Dim intSpalte As Integer
Dim objQuellblatt As Worksheet
Dim objZielblatt As Worksheet
Dim strPfad As String
Dim iReply As Integer


AbZeile = InputBox(Prompt:="Bitte ersten Datensatz angeben", Title:="Erster Datenstz: ", Default:=0)
BisZeile = InputBox(Prompt:="Bitte letzten Datensatz angeben", Title:="Letzter Datensatz: ", Default:=0)

If AbZeile >= BisZeile Then
MsgBox ("Erster Datensatz größer als letzter Datensatz !!!")
WScript.Quit
End If

' Datenquelle festlegen
Set objQuellblatt = ThisWorkbook.Sheets("Güde (Artikeldaten)")
' Neues Tabellenblatt zum Auslagern (in Kopie) der zu speichernden Spalten
Set objZielblatt = ThisWorkbook.Worksheets.Add

' Zu speichernde Spalten in Kopierreihenfolge
varSpalten = Array("A", "B", "C", "E", "F", "D", "H", "I", "J", "K", "N", "O", "P", "Y", "X")

Zeile = AbZeile
Do While Zeile < BisZeile

For intSpalte = 0 To UBound(varSpalten)

' Abfragen ob aktuelle Zelle leer ist
If objQuellblatt.Cells(Zeile, varSpalten(intSpalte)) = "" Then
objQuellblatt.Cells(Zeile, varSpalten(intSpalte)) = " "
Else
End If
'Zu speichernde Spalten in neues Tabellenblatt kopieren
objQuellblatt.Cells(Zeile, varSpalten(intSpalte)).Copy _
Destination:=objZielblatt.Cells(Zeile, Columns.Count).End(xlToLeft).Offset(0, 1)

Next 'intSpalte
Zeile = Zeile + 1

Loop
'Erste Spalte bleibt beim Kopieren leer - löschen
objZielblatt.Columns(1).Delete

'Tabellenblatt mit den zu speichernden Spalten in neue Arbeitsmappe schieben
objZielblatt.Move

'Speicherort abfragen
strPfad = GetOrdner()
'Erzeugte Arbeitsmappe als CSV speichern
ActiveWorkbook.SaveAs strPfad & "\" & "Artikelgrunddaten.csv", FileFormat:=xlCSV, Local:=True

End Sub

Function GetOrdner(Optional ByVal def = "") As String

Dim objShell As Object
Dim objFolder As Object

Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.BrowseForFolder(0, "Bitte einen Ordner wählen", 0, def)

If objFolder Is Nothing Then Exit Function
GetOrdner = objFolder.Self.Path

End Function


Ich frage also die Zeilen (Datensätze) ab (von/bis) und noch den Ordner, in dem die CSV-Datei abgespeichert werden soll. Es wird zunächst in ein anderes temp. Sheet kopiert und von dort als csv gespeichert. Aber wie bekomme ich Werte statt Formeln?

Wäre nett, wenn einer der Profis mir helfen könnte.

Danke im Voraus.

5 Antworten

0 Punkte
Beantwortet von hajo_zi Experte (9.1k Punkte)
Hallo,

ersetze diese Zeile
objQuellblatt.Cells(Zeile, varSpalten(intSpalte)).Copy _
Destination:=objZielblatt.Cells(Zeile, Columns.Count).End(xlToLeft).Offset(0, 1)

durch

objQuellblatt.Cells(Zeile, varSpalten(intSpalte)).Copy
objZielblatt.Cells(Zeile, Columns.Count).End(xlToLeft).Offset(0, 1).PasteSpecial = xlValues
Application.CutCopyMode = False

Gruß hajo
0 Punkte
Beantwortet von fmuehlen Einsteiger_in (11 Punkte)
Hmmm... Da bekomme ich nun einen run-time error '1004', Application-defined or object-defined error....
0 Punkte
Beantwortet von hajo_zi Experte (9.1k Punkte)
Halo,

ich habe es Live geschrieben, jetzt habe ich nachgeschaut.
ersetze
.PasteSpecial = xlValues
durch
.PasteSpecial Paste:=xlValues

Gruß hajo
0 Punkte
Beantwortet von fmuehlen Einsteiger_in (11 Punkte)
Hallo hajo,

du bist ein Held. Die Daten werden nun in das temp. Sheet korrekt kopiert (also die Werte), allerdings beim Abspeichern dieses Sheets als csv-Datei bekomme ich nun plötzlich auch den Fehler. Ich könnte natürlich das Speichern als csv nicht durchführen und das dann hinterher manuell machen, aber warum nicht auch gleich automatisch? Und wenn ich Dich schon "an der Strippe" habe, kann ich das temp. Sheet auch gleich wieder schließen? Ich benötige das nicht, sondern lediglich die csv-Datei....

Gruß,

Frank
0 Punkte
Beantwortet von hajo_zi Experte (9.1k Punkte)
Hallo Frank,

csv ist nicht mein Gebiet.

gruß hajo
...