Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Alchemist registrierter User
Anmeldungsdatum: 03.08.2004 Beiträge: 27897
Wohnort: Hamburg
|
(#1623809) Verfasst am: 31.03.2011, 13:47 Titel: Frage zu Makro und VBA |
|
|
Ich hoffe einer von euch kann mir bei einem kleinen Excelproblem helfen:
Ich möchte einem Makro beibringen eine .xlsx Datei als .txt (mit tabstopp) zu speichern.
Das kriege ich ja noch hin, aber beim Speichern werden die Formate der Zellen irgendwie durcheinander gebracht. Anstatt wie beim manuellen Speichern Zahlenwerte und Datumswerte korrekt zu übernehmen, werden bei dem Automatismus per Makro diese Formate durcheinander gewürfelt.
(so ändert sich beispielsweise das Datumsformat von TT.MM.YYYY in MM/DD/YYYY)
Kann mir einer sagen, welche Parameter ich einfügen muss, dass einfach nur die Werte gespeichert werden? Geht das überhaupt?
|
|
Nach oben |
|
 |
satsche registrierter User
Anmeldungsdatum: 30.07.2006 Beiträge: 2091
Wohnort: Südhessen
|
(#1623828) Verfasst am: 31.03.2011, 15:08 Titel: |
|
|
Ich würde versuchen die Zellen auf „text“ zu formatieren
_________________ Keiner hat das Recht zu gehorchen. Hannah A.
Das, was lebt, ist etwas anderes als das, was denkt. G. Benn
|
|
Nach oben |
|
 |
Alchemist registrierter User
Anmeldungsdatum: 03.08.2004 Beiträge: 27897
Wohnort: Hamburg
|
(#1623869) Verfasst am: 31.03.2011, 17:05 Titel: |
|
|
satsche hat folgendes geschrieben: | Ich würde versuchen die Zellen auf „text“ zu formatieren |
Wenn ich die Zellen als Text formatiere, habe ich doch gar kein Datumsformat mehr...
|
|
Nach oben |
|
 |
satsche registrierter User
Anmeldungsdatum: 30.07.2006 Beiträge: 2091
Wohnort: Südhessen
|
(#1623871) Verfasst am: 31.03.2011, 17:12 Titel: |
|
|
„Als Text formatierte Zahlen behandeln auch Zahlen als Text. Der Zellinhalt wird genauso angezeigt wie eingegeben.“
_________________ Keiner hat das Recht zu gehorchen. Hannah A.
Das, was lebt, ist etwas anderes als das, was denkt. G. Benn
|
|
Nach oben |
|
 |
nocquae diskriminiert nazis
Anmeldungsdatum: 16.07.2003 Beiträge: 18183
|
(#1623872) Verfasst am: 31.03.2011, 17:17 Titel: |
|
|
Alchemist hat folgendes geschrieben: | satsche hat folgendes geschrieben: | Ich würde versuchen die Zellen auf „text“ zu formatieren |
Wenn ich die Zellen als Text formatiere, habe ich doch gar kein Datumsformat mehr... |
Wenn du die Datei als Reintext abspeichern willst, gibt es darin doch sowieso nur ein "Format", eben Text.
Wenn du das nur als „Exportfunktion“ nutzen willst, würde ich dem Makro beibringen, die Datei erst entsprechend zu formatieren, dann abzuspeichern und zum Schluss das Ursprungsformat wieder herzustellen.
Da sollte es vermutlich aber auch elegantere Wege geben.
_________________ In Deutschland gilt derjenige, der auf den Schmutz hinweist, als viel gefährlicher, als derjenige, der den Schmutz macht.
-- Kurt Tucholsky
|
|
Nach oben |
|
 |
Alchemist registrierter User
Anmeldungsdatum: 03.08.2004 Beiträge: 27897
Wohnort: Hamburg
|
(#1623876) Verfasst am: 31.03.2011, 17:32 Titel: |
|
|
satsche hat folgendes geschrieben: | „Als Text formatierte Zahlen behandeln auch Zahlen als Text. Der Zellinhalt wird genauso angezeigt wie eingegeben.“ |
Das ist ja gerade mein Problem!
Wenn ich die Tabelle manuel abspeicher, ergibt das ne TXT Datei, die genau das beinhaltet, was man sieht, mit einem tab als Zellenunterbrechung.
Wenn ich das per Makro machen lasse, dann verändern sich teilweise die Zahlenwerte.
Ich finde das merkwürdig. Ich meine, Makros aufzeichnen ist doch ganz einfach. Aber dann macht es trotzdem was anderes, als man beim Aufzeichnen vorgemacht hat,
|
|
Nach oben |
|
 |
nocquae diskriminiert nazis
Anmeldungsdatum: 16.07.2003 Beiträge: 18183
|
(#1623883) Verfasst am: 31.03.2011, 18:18 Titel: |
|
|
Alchemist hat folgendes geschrieben: | satsche hat folgendes geschrieben: | „Als Text formatierte Zahlen behandeln auch Zahlen als Text. Der Zellinhalt wird genauso angezeigt wie eingegeben.“ |
Das ist ja gerade mein Problem!
Wenn ich die Tabelle manuel abspeicher, ergibt das ne TXT Datei, die genau das beinhaltet, was man sieht, mit einem tab als Zellenunterbrechung.
Wenn ich das per Makro machen lasse, dann verändern sich teilweise die Zahlenwerte.
Ich finde das merkwürdig. Ich meine, Makros aufzeichnen ist doch ganz einfach. Aber dann macht es trotzdem was anderes, als man beim Aufzeichnen vorgemacht hat, |
Als csv abspeichern ist keine Lösung?
_________________ In Deutschland gilt derjenige, der auf den Schmutz hinweist, als viel gefährlicher, als derjenige, der den Schmutz macht.
-- Kurt Tucholsky
|
|
Nach oben |
|
 |
AgentProvocateur registrierter User
Anmeldungsdatum: 09.01.2005 Beiträge: 7851
Wohnort: Berlin
|
(#1623890) Verfasst am: 31.03.2011, 19:03 Titel: |
|
|
Du könntest es mal so probieren, (kopiert erst alles in die Zwischenablage und schreibt die dann in eine Textdatei):
Code: | Public Sub schreibeInTextdatei()
Dim DataObj As New MSForms.DataObject
Dim filename As String
filename = "Test123.txt"
' Alles auswählen
Cells.Select
' In Zwischenablage kopieren
Selection.Copy
Range("A1").Select
' Aus Zwischenablage lesen
DataObj.GetFromClipboard
' Datei schreiben
Open filename For Output As #1
Print #1, DataObj.GetText
Close #1
End Sub |
Dabei geht jedoch der aktuelle Inhalt der Zwischenablage verloren.
Damit das läuft, musst Du einen Verweis auf die "Microsoft Forms 2.0 Object Library" setzen. Das geht am einfachsten, wenn Du eine UserForm einfügst und die dann wieder löschst.
|
|
Nach oben |
|
 |
Alchemist registrierter User
Anmeldungsdatum: 03.08.2004 Beiträge: 27897
Wohnort: Hamburg
|
(#1623892) Verfasst am: 31.03.2011, 19:12 Titel: |
|
|
nocquae hat folgendes geschrieben: | Alchemist hat folgendes geschrieben: | satsche hat folgendes geschrieben: | „Als Text formatierte Zahlen behandeln auch Zahlen als Text. Der Zellinhalt wird genauso angezeigt wie eingegeben.“ |
Das ist ja gerade mein Problem!
Wenn ich die Tabelle manuel abspeicher, ergibt das ne TXT Datei, die genau das beinhaltet, was man sieht, mit einem tab als Zellenunterbrechung.
Wenn ich das per Makro machen lasse, dann verändern sich teilweise die Zahlenwerte.
Ich finde das merkwürdig. Ich meine, Makros aufzeichnen ist doch ganz einfach. Aber dann macht es trotzdem was anderes, als man beim Aufzeichnen vorgemacht hat, |
Als csv abspeichern ist keine Lösung? |
Die Daten werden später mit Indesign importiert.
Das Programm schnallt die Zeilentrennung per Semikolon einer csv Datein nicht.
Und in der Textdatei sind teilweise auch Kommata, die Indesign eben auch trennen würde...
|
|
Nach oben |
|
 |
Alchemist registrierter User
Anmeldungsdatum: 03.08.2004 Beiträge: 27897
Wohnort: Hamburg
|
(#1623893) Verfasst am: 31.03.2011, 19:12 Titel: |
|
|
AgentProvocateur hat folgendes geschrieben: | Du könntest es mal so probieren, (kopiert erst alles in die Zwischenablage und schreibt die dann in eine Textdatei):
Code: | Public Sub schreibeInTextdatei()
Dim DataObj As New MSForms.DataObject
Dim filename As String
filename = "Test123.txt"
' Alles auswählen
Cells.Select
' In Zwischenablage kopieren
Selection.Copy
Range("A1").Select
' Aus Zwischenablage lesen
DataObj.GetFromClipboard
' Datei schreiben
Open filename For Output As #1
Print #1, DataObj.GetText
Close #1
End Sub |
Dabei geht jedoch der aktuelle Inhalt der Zwischenablage verloren.
Damit das läuft, musst Du einen Verweis auf die "Microsoft Forms 2.0 Object Library" setzen. Das geht am einfachsten, wenn Du eine UserForm einfügst und die dann wieder löschst. |
Das schau ich mir mal an
Danke!
|
|
Nach oben |
|
 |
Alchemist registrierter User
Anmeldungsdatum: 03.08.2004 Beiträge: 27897
Wohnort: Hamburg
|
(#1623894) Verfasst am: 31.03.2011, 19:12 Titel: |
|
|
Der Dank gilt natürlich euch allen.
|
|
Nach oben |
|
 |
Alchemist registrierter User
Anmeldungsdatum: 03.08.2004 Beiträge: 27897
Wohnort: Hamburg
|
(#1628959) Verfasst am: 18.04.2011, 19:15 Titel: |
|
|
Ich habe es übrigens geschafft eine für mich akzeptable Lösung zu finden:
Ich hab dem Makro beigebracht den texteditor von Windows zu öffnen und dann kann ich mit dem Super Befehl "SendKeys" Speichern und schließen.
Richtige Programmierer werden sich sicherlich über meine Lösung amüsieren können, ich war aber trotzdem ganz stolz auf mich, dass ich das geschafft habe.
Und es sieht auch beeindruckend aus, wenn sich auf Knopfdruck nacheinander 27 Excelfiles, öffnen, Tabellen kopiert und sortiert werden und dann 12 mal der Editor geöffnet wird, und dann nacheinander alles wieder geschlossen wird.
Pure Magie...
|
|
Nach oben |
|
 |
Zoff registrierter User
Anmeldungsdatum: 24.08.2006 Beiträge: 21668
|
(#1628973) Verfasst am: 18.04.2011, 20:02 Titel: |
|
|
Magst Du den Code mal posten?
|
|
Nach oben |
|
 |
Alchemist registrierter User
Anmeldungsdatum: 03.08.2004 Beiträge: 27897
Wohnort: Hamburg
|
(#1628982) Verfasst am: 18.04.2011, 20:41 Titel: |
|
|
Zoff hat folgendes geschrieben: | Magst Du den Code mal posten? |
der würde aber den Rahmen mehr als sprengen.
Außerdem hab ich den zur Zeit auf der Arbeit
|
|
Nach oben |
|
 |
Zoff registrierter User
Anmeldungsdatum: 24.08.2006 Beiträge: 21668
|
(#1629003) Verfasst am: 18.04.2011, 21:55 Titel: |
|
|
Alchemist hat folgendes geschrieben: | Zoff hat folgendes geschrieben: | Magst Du den Code mal posten? |
der würde aber den Rahmen mehr als sprengen.
Außerdem hab ich den zur Zeit auf der Arbeit |
Oder halt e-mail, hat auch Zeit.
|
|
Nach oben |
|
 |
Alchemist registrierter User
Anmeldungsdatum: 03.08.2004 Beiträge: 27897
Wohnort: Hamburg
|
(#1684471) Verfasst am: 07.09.2011, 17:59 Titel: |
|
|
Ich schon wieder und meine stümperhaften VBA Versuche!
Ich möchte gerne folgendes:
Eine Tabelle von einem Tabellenblatt ins andere kopieren.
Dabei soll angegeben werden können, wie oft das geschehen soll!
(mit Eingabefenster, oder auch nur mit Zellenbezug)
ok, mit Zellenbezug ist einfacher!
Sagen wir es gibt eine Zelle mit Namen Firmenanzahl.
der User gibt nun eine Zahl in diese Zelle ein und drückt nen Button, der das Makro startet.
Dieses kopiert nun diese Tabelle untereinander und zwar so oft, wie die Zahl in der Zellen "Firmenanzahl" es vorgibt!
Weiß jemand, wie ich das anstellen kann?
Mein Problem ist, dass ich nicht weiss wie man diese Bedingung erstellt, dass der Kopiervorgang so oft stattfindet, wie die Zahl es vorgibt.
Und wie man angibt, dass das Einfügen der Tabelle immer untereinander erfolgt
Edit: Eine FOR-Funktion hab ich jetzt gemacht! Der kopiert jetzt tatsächlich so oft die Tabelle, wie ich es in die Zelle eingebe, allerdings immer übereinander.
|
|
Nach oben |
|
 |
moritura pan narrans
Anmeldungsdatum: 01.12.2003 Beiträge: 1358
Wohnort: Berlin
|
(#1684486) Verfasst am: 07.09.2011, 19:17 Titel: |
|
|
Alchemist hat folgendes geschrieben: | Ich schon wieder und meine stümperhaften VBA Versuche!
Ich möchte gerne folgendes:
Eine Tabelle von einem Tabellenblatt ins andere kopieren.
Dabei soll angegeben werden können, wie oft das geschehen soll!
(mit Eingabefenster, oder auch nur mit Zellenbezug)
ok, mit Zellenbezug ist einfacher!
Sagen wir es gibt eine Zelle mit Namen Firmenanzahl.
der User gibt nun eine Zahl in diese Zelle ein und drückt nen Button, der das Makro startet.
Dieses kopiert nun diese Tabelle untereinander und zwar so oft, wie die Zahl in der Zellen "Firmenanzahl" es vorgibt!
Weiß jemand, wie ich das anstellen kann?
Mein Problem ist, dass ich nicht weiss wie man diese Bedingung erstellt, dass der Kopiervorgang so oft stattfindet, wie die Zahl es vorgibt.
Und wie man angibt, dass das Einfügen der Tabelle immer untereinander erfolgt
Edit: Eine FOR-Funktion hab ich jetzt gemacht! Der kopiert jetzt tatsächlich so oft die Tabelle, wie ich es in die Zelle eingebe, allerdings immer übereinander. |
Du must in der For-Schleife mit der activen Zelle weiter runter:
Cell(ActiveCell.Row + Firmenanzahl;ActiveCell.Column).Activate
oder so ähnlich
Die genauen Befehle und Syntax musst du noch raussuchen.
Hier zuhause habe ich kein Excel.
|
|
Nach oben |
|
 |
Alchemist registrierter User
Anmeldungsdatum: 03.08.2004 Beiträge: 27897
Wohnort: Hamburg
|
(#1684736) Verfasst am: 08.09.2011, 12:51 Titel: |
|
|
moritura hat folgendes geschrieben: | Alchemist hat folgendes geschrieben: | Ich schon wieder und meine stümperhaften VBA Versuche!
Ich möchte gerne folgendes:
Eine Tabelle von einem Tabellenblatt ins andere kopieren.
Dabei soll angegeben werden können, wie oft das geschehen soll!
(mit Eingabefenster, oder auch nur mit Zellenbezug)
ok, mit Zellenbezug ist einfacher!
Sagen wir es gibt eine Zelle mit Namen Firmenanzahl.
der User gibt nun eine Zahl in diese Zelle ein und drückt nen Button, der das Makro startet.
Dieses kopiert nun diese Tabelle untereinander und zwar so oft, wie die Zahl in der Zellen "Firmenanzahl" es vorgibt!
Weiß jemand, wie ich das anstellen kann?
Mein Problem ist, dass ich nicht weiss wie man diese Bedingung erstellt, dass der Kopiervorgang so oft stattfindet, wie die Zahl es vorgibt.
Und wie man angibt, dass das Einfügen der Tabelle immer untereinander erfolgt
Edit: Eine FOR-Funktion hab ich jetzt gemacht! Der kopiert jetzt tatsächlich so oft die Tabelle, wie ich es in die Zelle eingebe, allerdings immer übereinander. |
Du must in der For-Schleife mit der activen Zelle weiter runter:
Cell(ActiveCell.Row + Firmenanzahl;ActiveCell.Column).Activate
oder so ähnlich
Die genauen Befehle und Syntax musst du noch raussuchen.
Hier zuhause habe ich kein Excel. |
Ach Danke übrigens, dein kleiner Tipp war ein ganz wichtiger Stein des Anstoßes!
Ich in fast fertig.
Ich brauch nur noch eine Möglichkeit dem ActiveCell.Row zwei verschiedene Variable unterzujubeln, bzw. zwei sich wechselnde Zellenabstände
|
|
Nach oben |
|
 |
Landei Gesinnungspolizist
Anmeldungsdatum: 27.02.2011 Beiträge: 1180
Wohnort: Sandersdorf-Brehna
|
(#1684763) Verfasst am: 08.09.2011, 14:54 Titel: |
|
|
ActiveCell.Row ist doch die Zeilennummer der Zelle, nicht die Höhe. Selbige wird mit ActiveCell.RowHeight gesetzt.
|
|
Nach oben |
|
 |
Alchemist registrierter User
Anmeldungsdatum: 03.08.2004 Beiträge: 27897
Wohnort: Hamburg
|
(#1684765) Verfasst am: 08.09.2011, 14:58 Titel: |
|
|
Ihr Lieben,
ich hab es geschafft!!!
das dauert zwar, weil der immer jede Zelle einzeln kopiert, aber ich hab es nicht hinbekommen, dass Reihenmäßig zu machen.
So sieht das aus(Gekürzt):
Zitat: | Sub test_ganzneu()
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim l As Integer
If Range("I2") = 0 Then GoTo Fehler
For i = 1 To Range("I2")
j = 16
k = 1
Range("O3:U15").Select
Selection.Copy
Range("A1").Select
Cells(ActiveCell.Row + i * j, ActiveCell.Column).Select
ActiveSheet.Paste
Next i
For i = 1 To Range("I2")
j = 16
k = 1
Sheets("Auswertung").Select
Range("A14").Select
Cells(ActiveCell.Row + i * k, ActiveCell.Column).Select
Selection.Copy
Sheets("Darstellung").Select
Range("A1").Select
Cells(ActiveCell.Row + i * j, ActiveCell.Column).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Next i
For i = 0 To Range("I2")
For l = 0 To 11
Sheets("Auswertung").Select
Range("ANR15").Select
Cells(ActiveCell.Row + i, ActiveCell.Column + l * 6).Select
Selection.Copy
Sheets("Darstellung").Select
Range("b18").Select
Cells(ActiveCell.Row + i * 16, ActiveCell.Column).Select
Cells(ActiveCell.Row + l * 1, ActiveCell.Column).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
[... usw. für 6 weitere Zeilen]
Next l
Next i
Exit Sub
Fehler: MsgBox "Bitte eine Zahl eingeben!"
End Sub
|
|
|
Nach oben |
|
 |
|