9.6k Aufrufe
Gefragt in Tabellenkalkulation von
Hi erstmal da ich son mittelhalber excel neuling bin, habe ich mometan grad folgendes problem:

ich arbeite in einer tischlerei und dort haben wir eine neue plattensäge die man mit csv datein, die man aus excel generiert füttern kann, um sich das mühselige eintippen an der maschine zu ersparen. Soweit so gut.

Wir haben schon vorher unsere stücklisten in excel geschrieben und die liste würden wir gerne weiternutzen. Das problem ist das die exceldatei aus der ich die csv generiere eine gewisse formatierung haben muss sonst frisst die maschine die daten nicht. für die maschine muss die excel liste in zeile zwei und spalte 1 beginnen und darf keine weiteren informationen enthalten als länge/breite/dicke.
das ist aber leider total unübersichtlich und man kann damit nicht wirklich arbeiten.

mein gedanklicher ansatz ist das ich unsere "schöne" liste nehme und ganz normal mit den daten fülle und dann quasi zellen auswählen kann die er mir in eine csv übergibt oder ich sie in eine neue liste generieren kann, die ich dann in die csv umwandle

hoffe das das problem verständlich ist und noch viel mehr hoffe ich das es dafür eine einfache und simple lösung gibt :-D

29 Antworten

0 Punkte
Beantwortet von dochossa Einsteiger_in (43 Punkte)
Das funktioniert alles so astrein *daumenhoch*

eine klitzekleine kleinigkeit noch dann bin ich zufrieden mit sternchen

'Hier wird die erstelle CSV-Datei gespeichert, Tennzeichen ist das Semikolon
'Soll als Trennzeichen das Komma benutzt werden ist local:=False zu setzen
'Pfad anpassen!
Dateiname_neu = Application.GetSaveAsFilename("C:\Test\" & mappeq & "_" & blattq & "_HPL" & ".csv", FileFilter:="Excel Files (*.csv), *.csv")
If Dateiname_neu <> "False" Then
ActiveSheet.SaveAs Filename:=Dateiname_neu, FileFormat:=xlCSV, Local:=True


sagt ihm ja das er die datei in c:/test/name der exceldatei_name des blattes_HPL.csv speichern soll

jetzt die ultimative frage ist es möglich das man für mappeq C:\Test\" & mappeq & was anderes einsetzt und zwar das er aus der tabelle wo er exportiert in zeile 3 H den wert ausliest und ihn anstatt von mappeq einsetzt.

das problem ist das die gespeicherte csv ansonsten holzliste.xls_blattname_hpl.csv heist. das .xls stört mich und ist auch völlig unnötig im namen


bis hierhin ist das alles so gut was du mir erstellt hast und das wäre jetzt quasi die kirsche auf der kirsche auf der sahne die auf der sahne liegt :-D
0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
Hallo Benjamin,

klar geht das :-).
mit
Worksheets(blattq).Cells(3, 8).value
liest du den Wert aus der Zelle H3 der Quell-Liste aus.
Eingebaut in den Code musst die die Zeile mit Dateinamen_neu wie folgt ändern:

Dateiname_neu = Application.GetSaveAsFilename("C:\Test\" & Worksheets(blattq).Cells(3, 8).value & "_" & blattq & "_HPL" & ".csv", FileFilter:="Excel Files (*.csv), *.csv")


Den Pfad musst du allerdings drin stehen lassen, damit der Speicherort mit übergeben wird. Was zwischen Worksheets(blattq).Cells(3, 8).value und ".csv" kommt, kannst du deinen Bedürfnissen anpassen.

Gruß

M.O.
0 Punkte
Beantwortet von dochossa Einsteiger_in (43 Punkte)
hmmmm scheint nicht zu funktionieren, wenn ich das ändere sagt er mir laufzeit fehler 9, vorher gings mit der änderung gehts nicht mehr. hab auch alles x mal kontrolliert....... auch wenn ich deine zeile 1 zu 1 kopiere gehts nicht :-((((
0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
Hallo Benjamin,

war mein Fehler :-(. Ich habe die Antwort geschrieben ohne zu Testen.

Hier das Makro mit Speicherung:

Sub Holzliste3()

Dim i, zeile, zzeile As Integer
Dim Dateiname_neu, Name, blattq, blattz As String
Dim bExists As Boolean
Dim Rueckgabe

'Bildschirmaktualisierung ausschalten:
Application.ScreenUpdating = False


'Name für neues Arbeitsblatt definieren
blattz = "csv_fuer_maschine"

'Name des aktuellen Arbeitsblattes
blattq = ActiveSheet.Name

'Name zur Speicherung der neuen Datei wird eingelesen
Name = Worksheets(blattq).Cells(3, 8).Value

' Testen ob ein Arbeitsblatt mit dem Namen "csv_fuer_maschine" existiert

For i = 1 To Sheets.Count
If Sheets(i).Name = blattz Then
bExists = True: Exit For
End If
Next i

If bExists Then
' ... wenn ja: Nachfragen, ob Inhalt des Blattes gelöscht werden soll
Rueckgabe = MsgBox("Ein Blatt mit dem Namen " & blattz & " existiert bereits! Sollen die Daten in dem Blatt überschrieben werden?", 4, "Frage")

Select Case Rueckgabe

Case vbYes

'Inhalte des Blatts werden gelöscht
ThisWorkbook.Worksheets(blattz).Activate
Range(Cells(1, 1), Cells(Worksheets(blattz).UsedRange.SpecialCells(xlCellTypeLastCell).Row, Worksheets(blattz).UsedRange.SpecialCells(xlCellTypeLastCell).Column)).ClearContents


Case vbNo
'Makro wird beendet
MsgBox "Abbruch durch Benutzer", vbOKOnly, "Abbruch-Meldung"
Exit Sub

End Select


Else
' ... wenn nein: ein solches Blatt erstellen.
'Neues Blatt wird am Ende eingefügt
Worksheets.Add After:=Worksheets(Worksheets.Count)
'Neues Blatt benennen
ActiveSheet.Name = blattz
End If

'Überschrift in Export-Blatt einfügen
ThisWorkbook.Worksheets(blattz).Cells(1, 1) = "Bauteil"
ThisWorkbook.Worksheets(blattz).Cells(1, 2) = "Material"
ThisWorkbook.Worksheets(blattz).Cells(1, 3) = "Laenge"
ThisWorkbook.Worksheets(blattz).Cells(1, 4) = "Breite"
ThisWorkbook.Worksheets(blattz).Cells(1, 5) = "Anzahl"
ThisWorkbook.Worksheets(blattz).Cells(1, 6) = "Materialnummer"
ThisWorkbook.Worksheets(blattz).Cells(1, 7) = "Funierrichtung"
'Zeile in Zieldatei definieren, Daten werden ab Zeile 2 geschrieben
zzeile = 2


'Prüfen, ob Blattschutz vorhanden ist und falls ja, dann Blattschutz aufheben:
If Worksheets(blattq).ProtectContents = True Then
Worksheets(blattq).Unprotect "holz"
End If


'Kopieren der Daten
For zeile = 7 To Worksheets(blattq).UsedRange.SpecialCells(xlCellTypeLastCell).Row Step 2
'Prüfen ob in Bezeichnung etwas steht, falls nicht wird die Schleife verlassen (das Kopieren beendet)
If IsEmpty(Worksheets(blattq).Cells(zeile, 3)) = True Then Exit For

'ab hier werden die ersten Daten kopiert
Worksheets(blattz).Cells(zzeile, 1) = Worksheets(blattq).Cells(zeile, 3).Value 'Bauteil
Worksheets(blattz).Cells(zzeile, 3) = Worksheets(blattq).Cells(zeile, 9).Value + 5 'Länge
Worksheets(blattz).Cells(zzeile, 4) = Worksheets(blattq).Cells(zeile, 12).Value + 5 'Breite
Worksheets(blattz).Cells(zzeile, 6) = Worksheets(blattq).Cells(zeile, 5).Value 'Materialnummer
Worksheets(blattz).Cells(zzeile, 7) = Worksheets(blattq).Cells(zeile, 16).Value 'Funierrichtung

'Prüfen, ob Unterseite leer ist
If IsEmpty(Worksheets(blattq).Cells(zeile, 7)) = True Then
Worksheets(blattz).Cells(zzeile, 2) = Worksheets(blattq).Cells(zeile, 6).Value 'Material
Worksheets(blattz).Cells(zzeile, 5) = Worksheets(blattq).Cells(zeile, 8).Value * 2 'Anzahl
'Zeilennummer für Zielblatt um 1 erhöhen
zzeile = zzeile + 1
Else
'hier werden die Daten kopiert, wenn in Unterseite auch etwas steht
Worksheets(blattz).Cells(zzeile, 5) = Worksheets(blattq).Cells(zeile, 8).Value 'Anzahl
'Zeilennummer für Zielblatt um 1 erhöhen
zzeile = zzeile + 1

'Daten für Unterseite kopieren
Worksheets(blattz).Cells(zzeile, 1) = Worksheets(blattq).Cells(zeile, 3).Value 'Bauteil
Worksheets(blattz).Cells(zzeile, 2) = Worksheets(blattq).Cells(zeile, 7).Value 'Material
Worksheets(blattz).Cells(zzeile, 3) = Worksheets(blattq).Cells(zeile, 9).Value + 5 'Laenge
Worksheets(blattz).Cells(zzeile, 4) = Worksheets(blattq).Cells(zeile, 12).Value + 5 'Breite
Worksheets(blattz).Cells(zzeile, 5) = Worksheets(blattq).Cells(zeile, 8).Value 'Anzahl
Worksheets(blattz).Cells(zzeile, 6) = Worksheets(blattq).Cells(zeile, 5).Value 'Materialnummer
Worksheets(blattz).Cells(zzeile, 7) = Worksheets(blattq).Cells(zeile, 16).Value 'Funierrichtung

'Zeilennummer für Zielblatt um 1 erhöhen
zzeile = zzeile + 1
End If

Next zeile

'Blattschutz wieder herstellen, falls keiner vorhanden ist
If Worksheets(blattq).ProtectContents = False Then
Worksheets(blattq).Protect "holz"
End If

'Tabelle mit Daten für csv-Export in neue Arbeitsmappe verschieben
ThisWorkbook.Sheets(blattz).Move

'Bildschirmaktualisierung einschalten:
Application.ScreenUpdating = True

'Hier wird die erstelle CSV-Datei gespeichert, Tennzeichen ist das Semikolon
'Soll als Trennzeichen das Komma benutzt werden ist local:=False zu setzen
'Pfad anpassen!

Dateiname_neu = Application.GetSaveAsFilename("C:\Test\" & Name & "_" & blattq & "_HPL" & ".csv", FileFilter:="Excel Files (*.csv), *.csv")
If Dateiname_neu <> "False" Then
ActiveSheet.SaveAs Filename:=Dateiname_neu, FileFormat:=xlCSV, Local:=True
End If

End Sub


Gruß

M.O.
0 Punkte
Beantwortet von dochossa Einsteiger_in (43 Punkte)
astrein jetzt rockts danke danke danke

thread lann geschlossen werden alles geforderte wurde zur vollsten zufriedenheit erfüllt und teilweise sogar noch übertroffen!!!!!!!

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

danke für die Rückmeldung und gern geschehen :-).

Gruß

M.O.
0 Punkte
Beantwortet von dochossa Einsteiger_in (43 Punkte)
'Hier wird die erstelle CSV-Datei gespeichert, Tennzeichen ist das Semikolon
'Soll als Trennzeichen das Komma benutzt werden ist local:=False zu setzen
'Pfad anpassen!
Dateiname_neu = Application.GetSaveAsFilename("C:\Test\" & Name & "_" & blattq & ".csv", FileFilter:="Excel Files (*.csv), *.csv")
If Dateiname_neu <> "False" Then
ActiveSheet.SaveAs Filename:=Dateiname_neu, FileFormat:=xlCSV, Local:=True
End If



so wie du in der bemerkung geschrieben hast, das es als csv mit semikolon ausgegeben wird, gibt er es mir trozdem mit comma aus, auch wenn ich lokal auf false setzte bleibt es beim comma??????


brauche es aber dringend als semikolon, liegt das eventuell an der office version??? benutze office 2007


MFG

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

bei mir wird die CSV-Datei mit Semikolon erstellt (Office 2010). Das sollte auch in Office 2007 so laufen.
Bei dem Rechner, auf dem das Makro läuft, ist aber die deutsche Spracheinstellung aktiv?
Ggf. kannst du auch mal in der Systemsteuerung bei den Regions- und Sprachoptionen - Regionale Einstellungen - Anpassen
(das ist der Weg bei XP) bei Listentrennzeichen ein Semikolon steht

Du kannst mal versuchen die Zeile
ActiveSheet.SaveAs Filename:=Dateiname_neu, FileFormat:=xlCSV, Local:=True

mit
ActiveWorkbook.SaveAs Filename:=Dateiname_neu, FileFormat:=xlCSV, Local:=True

zu ersetzen.

Gruß

M.O.
0 Punkte
Beantwortet von dochossa Einsteiger_in (43 Punkte)
mit
ActiveWorkbook.SaveAs Filename:=Dateiname_neu, FileFormat:=xlCSV, Local:=True
klappt es wunderbar



Vielen Dank

MFg Hossa
...