| |
 | Online-Kurs: Grundlagen des 3D-Druck-Designs für Industrieingenieure , ein Kurs
|
Autor
|
Thema: Dateinamen aus Tabelleninhalt erzeugen! (1504 mal gelesen)
|
matthiasf Mitglied

 Beiträge: 86 Registriert: 18.11.2004 Core 2 DUO T6400 2130MHz 2GB RAM QuadroFX 1500 HiCAD 12.113b
|
erstellt am: 17. Jul. 2007 08:49 <-- editieren / zitieren --> Unities abgeben:         
Hallo, ich möchte aus einer Exceltabelle einen Vielzahl von einzelnen TXT Dateien erzeugen um mit diesen Dateien ein Makro für das CAD System zu steuern! ich stelle mir das folgendermaßen vor: 1. gehe in Spalte A 2.erzeuge aus A1, A2 und A3 einen Dateinamen 3.Speichere die Spalte A unter diesem Namen als BS(A1)DL(A2)P(A3).TXT 4.gehe zu Spalte B ... DANKE im voraus!! Matthias Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tunnelbauer Ehrenmitglied V.I.P. h.c. Bauingenieur

 Beiträge: 7085 Registriert: 13.01.2004 ich hab eh keine Probleme damit...
|
erstellt am: 17. Jul. 2007 08:52 <-- editieren / zitieren --> Unities abgeben:          Nur für matthiasf
|
matthiasf Mitglied

 Beiträge: 86 Registriert: 18.11.2004 Core 2 DUO T6400 2130MHz 2GB RAM QuadroFX 1500 HiCAD 12.113b
|
erstellt am: 17. Jul. 2007 09:41 <-- editieren / zitieren --> Unities abgeben:         
|
Paulchen Mitglied Bauing./SW-Entwickler
   
 Beiträge: 1227 Registriert: 19.08.2004 Büro: Win10 Enterprise 64bit, Office Professional Plus 2013 - Privat: Linux Mint 15, LibreOffice
|
erstellt am: 17. Jul. 2007 10:01 <-- editieren / zitieren --> Unities abgeben:          Nur für matthiasf
Hallo, Zitat: Original erstellt von matthiasf: NAJA, am Anfang war die Vorstellung und ich hoffe das jemand das gleiche Problem vor einiger Zeit schon hatte, so die ich vom Wissen und Können anderer partizipieren kann :-)))
Hgrmpf... das kannst Du sicher! Nur von ganz alleine geht nicht viel. Die Wahrscheinlichkeit, daß es für Deinen konkreten Fall schon eine 1A-Musterlösung gibt, ist sehr gering. Ohne eigenes Zutun wirst Du nicht weit kommen.Zwei Vorschläge: 1. Textzeichen werden in xls mit einem & verknüpft. Z.B. in einer beliebigen Zelle ="BS"&(A1)&"DL"&(A2)&"P"&(A3)&".TXT" für den Dateinamen. 2. Schmeiß' den Makrorecorder an und werde selbst aktiv. Das ist die runde Schaltfläche Makro aufzeichnen in der Symbolleiste Visual Basic in xls. Gegenfrage: Was verstehst Du unter einer "Vielzahl"? Frederik ------------------ DIN1055.de | Lastannahmen für Anwender Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
matthiasf Mitglied

 Beiträge: 86 Registriert: 18.11.2004 Core 2 DUO T6400 2130MHz 2GB RAM QuadroFX 1500 HiCAD 12.113b
|
erstellt am: 17. Jul. 2007 10:48 <-- editieren / zitieren --> Unities abgeben:         
Danke, geht ja einigermaßen, habe jetzt nur ein Problem mit den " ActiveWorkbook.SaveAs Filename:= _ "C:\Dokumente und Einstellungen\fellerkk.VKK\Eigene Dateien\kesselmakro\""BS" & (A1) & "DL" & (A2) & "P" & (A3) & ".txt""" _, FileFormat:=xlUnicodeText, CreateBackup:=False sind die " so richtig verteilt?? PS.: es sind ca. 300 Datensätze!! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
runkelruebe Moderator Straßen- / Tiefbau
       

 Beiträge: 8086 Registriert: 09.03.2006 MS-Office 365 ProPlus x86 WIN7(x64)
|
erstellt am: 17. Jul. 2007 10:53 <-- editieren / zitieren --> Unities abgeben:          Nur für matthiasf
na wird doch ;-) ich mach sowas immer über ne Variable vorweg: Code: strDateiname = "BS(" & Tabelle1.Cells(1, a).Value & ")" & "DL(" & Tabelle1.Cells(2, a).Value & ")" & "P(" & Tabelle1.Cells(3, a).Value & ").txt"
und dann Code: ActiveWorkbook.SaveAs Filename:= _ "\\C\" & strDateiname _ , FileFormat:=xlText, CreateBackup:=False
also nach dem letzten \ die Variable einsetzen.Und ob Du wirklich richtig stehst, siehst Du, wenn das Licht angeht  maw: Du siehst doch, ob es läuft... geh bei 300 Dateien den code mit F8 durch, nicht einfach laufen lassen! ------------------ Gruß, runkelruebe Herr Kann-ich-nich wohnt in der Will-ich-nich-Straße... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
matthiasf Mitglied

 Beiträge: 86 Registriert: 18.11.2004 Core 2 DUO T6400 2130MHz 2GB RAM QuadroFX 1500 HiCAD 12.113b
|
erstellt am: 17. Jul. 2007 12:23 <-- editieren / zitieren --> Unities abgeben:         
Hier mal das Makro __________ Sub Makro2() ' ' Makro2 Makro ' Makro am 17.07.2007 von harry müller aufgezeichnet ' ' Range("A1:A17").Select Selection.Copy Workbooks.Add ActiveSheet.Paste Application.CutCopyMode = False strDateiname = "BS(" & Tabelle1.Cells(1, a).Value & ")" & "DL(" & Tabelle1.Cells(2, a).Value & ")" & "P(" & Tabelle1.Cells(3, a).Value & ").txt" ActiveWorkbook.SaveAs Filename:="C:\Dokumente und Einstellungen\fellerkk.VKK\Eigene Dateien\kesselmakro\" & strDateiname, FileFormat:=xlText, CreateBackup:=False End Sub ____________ es markiert die gewünschten Werte und erstellt eine neue Tabelle nur das speichern will nicht klappen!!! HILFE!!! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Thomas Harmening Moderator Arbeiter ツ
      

 Beiträge: 2897 Registriert: 06.07.2001 Das Innerste geäussert und aufs Äusserste verinnerlicht
|
erstellt am: 17. Jul. 2007 13:04 <-- editieren / zitieren --> Unities abgeben:          Nur für matthiasf
wie Runkelrübe sagte, baue deinen Speichername vorher zusammen  und schaue nach was die Variable enthält, was ergibt aa= Tabelle1.Cells(1, a).Value ;-) 'denke mal das A steht für eine Variable ;-) Code: Sub ohne_schleife() Range("A1:A17").Copy ' Workbooks.Add ActiveSheet.Paste Set tb = ActiveWorkbook.Worksheets(1) 'Application.CutCopyMode = False strDateiname = "BS(" & tb.Cells(1, 1).Value & ")DL(" & tb.Cells(2, 1).Value & ")P(" & tb.Cells(3,1).Value & ").txt" ActiveWorkbook.SaveAs Filename:="C:\verzeichnis\" & strDateiname, FileFormat:=xlText, CreateBackup:=False ActiveWorkbook.Close SaveChanges:=False 'schliesse Aktives Workbook ;-) End Sub
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
runkelruebe Moderator Straßen- / Tiefbau
       

 Beiträge: 8086 Registriert: 09.03.2006 MS-Office 365 ProPlus x86 WIN7(x64)
|
erstellt am: 17. Jul. 2007 13:09 <-- editieren / zitieren --> Unities abgeben:          Nur für matthiasf
Ist das das ganze Makro? Wenn ja, dann schau Dir bitte im Lokalfenster mal die Variable strDateiname an. Da sollte bislang kein Wert für existieren. ;-) Warum? Weil dort noch weitere Variablen drin stehen: Tabelle1.Cells(1, a).Value Das ganze muß ja schließlich irgendwann mal durch ne Schleife, denn Du willst ja spaltenweise exportieren. Das ist halt bei mir schon drin. Du siehst, reines C&P reicht nicht immer ;-) Tipps zum Einstieg ins VBA ------------------ Gruß, runkelruebe Herr Kann-ich-nich wohnt in der Will-ich-nich-Straße... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
matthiasf Mitglied

 Beiträge: 86 Registriert: 18.11.2004 Core 2 DUO T6400 2130MHz 2GB RAM QuadroFX 1500 HiCAD 12.113b
|
erstellt am: 17. Jul. 2007 13:21 <-- editieren / zitieren --> Unities abgeben:         
|
matthiasf Mitglied

 Beiträge: 86 Registriert: 18.11.2004 Core 2 DUO T6400 2130MHz 2GB RAM QuadroFX 1500 HiCAD 12.113b
|
erstellt am: 17. Jul. 2007 14:27 <-- editieren / zitieren --> Unities abgeben:         
|
runkelruebe Moderator Straßen- / Tiefbau
       

 Beiträge: 8086 Registriert: 09.03.2006 MS-Office 365 ProPlus x86 WIN7(x64)
|
erstellt am: 17. Jul. 2007 14:47 <-- editieren / zitieren --> Unities abgeben:          Nur für matthiasf
Ja, geht: z.B.: Tabelle1.Range(Cells(1, 1), (Cells(10, 1))).Activate Brauchst Du aber hier nicht ;-) Du kannst nämlich die ganze Spalte kopieren: Sheets(2).Columns(1).Value = Tabelle1.Columns(a).Value ------------------ Gruß, runkelruebe Herr Kann-ich-nich wohnt in der Will-ich-nich-Straße... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
matthiasf Mitglied

 Beiträge: 86 Registriert: 18.11.2004 Core 2 DUO T6400 2130MHz 2GB RAM QuadroFX 1500 HiCAD 12.113b
|
erstellt am: 17. Jul. 2007 15:13 <-- editieren / zitieren --> Unities abgeben:         
|
runkelruebe Moderator Straßen- / Tiefbau
       

 Beiträge: 8086 Registriert: 09.03.2006 MS-Office 365 ProPlus x86 WIN7(x64)
|
erstellt am: 17. Jul. 2007 15:21 <-- editieren / zitieren --> Unities abgeben:          Nur für matthiasf
Dafür guckst Du Dir an (F1!), wieviele Argumente das Schlüsselwort Columns erwartet (nämlich nur eins). Oder Du schaust in meinem vorigen Beitrag, da wird's auch schon verwendet ;-) Bitte tu Dir selber den Gefallen und überfliege (und beachte) meine Tipps zum VBA-Einstieg, damit kommst Du solchen "Fehlern" recht einfach auf die Schliche. ------------------ Gruß, runkelruebe Herr Kann-ich-nich wohnt in der Will-ich-nich-Straße... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
matthiasf Mitglied

 Beiträge: 86 Registriert: 18.11.2004 Core 2 DUO T6400 2130MHz 2GB RAM QuadroFX 1500 HiCAD 12.113b
|
erstellt am: 17. Jul. 2007 15:27 <-- editieren / zitieren --> Unities abgeben:         
|
runkelruebe Moderator Straßen- / Tiefbau
       

 Beiträge: 8086 Registriert: 09.03.2006 MS-Office 365 ProPlus x86 WIN7(x64)
|
erstellt am: 17. Jul. 2007 15:36 <-- editieren / zitieren --> Unities abgeben:          Nur für matthiasf
Application.DisplayAlerts = False Aber Vorsicht damit schaltest Du wirklich alle Meldungen ab!!! Und Du solltest nicht vergessen, das vor dem End Sub wieder auf True zu stellen ;-) Postest Du uns noch den kompletten code, bitte? Dann schauen wir da einmal gemeinsam drüber ;-) ------------------ Gruß, runkelruebe Herr Kann-ich-nich wohnt in der Will-ich-nich-Straße... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Thomas Harmening Moderator Arbeiter ツ
      

 Beiträge: 2897 Registriert: 06.07.2001 Das Innerste geäussert und aufs Äusserste verinnerlicht
|
erstellt am: 17. Jul. 2007 16:07 <-- editieren / zitieren --> Unities abgeben:          Nur für matthiasf
Code: Sub Schnippsel() Set tbl = ActiveCell.CurrentRegion areaCount = tbl.Columns.Count MsgBox "Diese Mappe enthält " & _ areaCount & " Spalten." For i = 1 To areaCount Columns(i).Select MsgBox "Spalte " & i & " von " & _ areaCount & " Spalten." 'hier könnte eine Übergabe stehen Next i End Sub
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
matthiasf Mitglied

 Beiträge: 86 Registriert: 18.11.2004 Core 2 DUO T6400 2130MHz 2GB RAM QuadroFX 1500 HiCAD 12.113b
|
erstellt am: 17. Jul. 2007 16:57 <-- editieren / zitieren --> Unities abgeben:         
Das Makro und es funzt so wie es soll!! Sub ChkFirstWhile() s = 1 Application.DisplayAlerts = False Do While s < 218 Columns(s).Select Set tb = ActiveWorkbook.Worksheets(1) 'Application.CutCopyMode = False strDateiname = "BS" & tb.Cells(1, s).Value & "DL" & tb.Cells(2, s).Value & "P" & tb.Cells(3, s).Value & ".DAT" Selection.Copy Workbooks.Add ActiveSheet.Paste Set tb = ActiveWorkbook.Worksheets(1) 'Application.CutCopyMode = False ActiveWorkbook.SaveAs Filename:="C:\Dokumente und Einstellungen\fellerkk.VKK\Eigene Dateien\kesselmakro\SKK\HD0101\Daten\Daten\" & strDateiname, FileFormat:=xlText, CreateBackup:=False 'schliesse Aktives Workbook ;-) ActiveWindow.Close s = s + 1 Loop Application.DisplayAlerts = True End Sub
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
runkelruebe Moderator Straßen- / Tiefbau
       

 Beiträge: 8086 Registriert: 09.03.2006 MS-Office 365 ProPlus x86 WIN7(x64)
|
erstellt am: 17. Jul. 2007 17:15 <-- editieren / zitieren --> Unities abgeben:          Nur für matthiasf
Na prima  Wenn's alles so läuft ist doch gut, Du könntest das jetzt noch optimieren, also so Sachen wie .Select rausnehmen und ich persönlich mag keine loop-schleifen, aber tut's ja auch so ;-) Danke für's Reinstellen, gibt's auch U's für  Schönen Abend noch  ------------------ Gruß, runkelruebe Herr Kann-ich-nich wohnt in der Will-ich-nich-Straße... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Thomas Harmening Moderator Arbeiter ツ
      

 Beiträge: 2897 Registriert: 06.07.2001 Das Innerste geäussert und aufs Äusserste verinnerlicht
|
erstellt am: 17. Jul. 2007 18:53 <-- editieren / zitieren --> Unities abgeben:          Nur für matthiasf
auch von mir ein  trotz select und doppeltem Set tb ;-) meine Variante wäre: Code: Sub nolimit() Set tb = ActiveWorkbook.Worksheets(1) verz = "C:\Dokumente und Einstellungen\fellerkk.VKK\Eigene Dateien\kesselmakro\SKK\HD0101\Daten\Daten\" For Each c In tb.UsedRange.Columns 'nach benutzten Spalten schauen cc = c.Column 'cc= Spaltennummer strDateiname = "BS" & tb.Cells(1, cc) & "DL" & tb.Cells(2, cc) & "P" & tb.Cells(3, cc) & ".DAT" Columns(cc).Copy 'kopieren der Spalte Workbooks.Add 'Neue Mappe ActiveSheet.Paste 'Kopieren der Spalte (...in Spalte A) ActiveWorkbook.SaveAs Filename:=verz & strDateiname, FileFormat:=xlText, CreateBackup:=False ActiveWindow.Close SaveChanges:=False 'schliesse Aktives Workbook ;-) Next End Sub
leere Spalten vor der Ersten und der Letzten benutzten Spalte werden ignoriert, aber nicht die dazwischenliegende leere Spalten.Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
matthiasf Mitglied

 Beiträge: 86 Registriert: 18.11.2004 Core 2 DUO T6400 2130MHz 2GB RAM QuadroFX 1500 HiCAD 12.113b
|
erstellt am: 20. Jul. 2007 13:58 <-- editieren / zitieren --> Unities abgeben:         
Danke, und was mich noch interessiert kann ich ein einem Dateinamen . verwenden, unter DOS ging es ja nicht. In Ecxel sind , zwar als Punkt geschrieben und als Text formatiert beim Export tauchen aber grundsätzlich , auf!! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Thomas Harmening Moderator Arbeiter ツ
      

 Beiträge: 2897 Registriert: 06.07.2001 Das Innerste geäussert und aufs Äusserste verinnerlicht
|
erstellt am: 20. Jul. 2007 17:40 <-- editieren / zitieren --> Unities abgeben:          Nur für matthiasf
Zur ersten Frage, warum sollte das nicht gehen? Zur Zweiten Frage: Ländereinstellung auf englisch (usa) einstellen, oder Dezimalzahl auf Punkt und Code: FileFormat:=42, Local:=True,
könnte helfen.HTH , die 42 ist ja die Antwort auf alle Fragen  Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |