Freigeisterhaus Foren-Übersicht
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   NutzungsbedingungenNutzungsbedingungen   BenutzergruppenBenutzergruppen   LinksLinks   RegistrierenRegistrieren 
 ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Frage zu Makro und VBA

 
Neues Thema eröffnen   Neue Antwort erstellen   Drucker freundliche Ansicht    Freigeisterhaus Foren-Übersicht -> DAU's Paradise
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Alchemist
registrierter User



Anmeldungsdatum: 03.08.2004
Beiträge: 27897
Wohnort: Hamburg

Beitrag(#1623809) Verfasst am: 31.03.2011, 13:47    Titel: Frage zu Makro und VBA Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
satsche
registrierter User



Anmeldungsdatum: 30.07.2006
Beiträge: 2091
Wohnort: Südhessen

Beitrag(#1623828) Verfasst am: 31.03.2011, 15:08    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Alchemist
registrierter User



Anmeldungsdatum: 03.08.2004
Beiträge: 27897
Wohnort: Hamburg

Beitrag(#1623869) Verfasst am: 31.03.2011, 17:05    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
satsche
registrierter User



Anmeldungsdatum: 30.07.2006
Beiträge: 2091
Wohnort: Südhessen

Beitrag(#1623871) Verfasst am: 31.03.2011, 17:12    Titel: Antworten mit Zitat

„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
Benutzer-Profile anzeigen Private Nachricht senden
nocquae
diskriminiert nazis



Anmeldungsdatum: 16.07.2003
Beiträge: 18183

Beitrag(#1623872) Verfasst am: 31.03.2011, 17:17    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden ICQ-Nummer
Alchemist
registrierter User



Anmeldungsdatum: 03.08.2004
Beiträge: 27897
Wohnort: Hamburg

Beitrag(#1623876) Verfasst am: 31.03.2011, 17:32    Titel: Antworten mit Zitat

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.

Am Kopf kratzen

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
Benutzer-Profile anzeigen Private Nachricht senden
nocquae
diskriminiert nazis



Anmeldungsdatum: 16.07.2003
Beiträge: 18183

Beitrag(#1623883) Verfasst am: 31.03.2011, 18:18    Titel: Antworten mit Zitat

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.

Am Kopf kratzen

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
Benutzer-Profile anzeigen Private Nachricht senden ICQ-Nummer
AgentProvocateur
registrierter User



Anmeldungsdatum: 09.01.2005
Beiträge: 7851
Wohnort: Berlin

Beitrag(#1623890) Verfasst am: 31.03.2011, 19:03    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Alchemist
registrierter User



Anmeldungsdatum: 03.08.2004
Beiträge: 27897
Wohnort: Hamburg

Beitrag(#1623892) Verfasst am: 31.03.2011, 19:12    Titel: Antworten mit Zitat

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.

Am Kopf kratzen

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
Benutzer-Profile anzeigen Private Nachricht senden
Alchemist
registrierter User



Anmeldungsdatum: 03.08.2004
Beiträge: 27897
Wohnort: Hamburg

Beitrag(#1623893) Verfasst am: 31.03.2011, 19:12    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Alchemist
registrierter User



Anmeldungsdatum: 03.08.2004
Beiträge: 27897
Wohnort: Hamburg

Beitrag(#1623894) Verfasst am: 31.03.2011, 19:12    Titel: Antworten mit Zitat

Der Dank gilt natürlich euch allen.

zwinkern
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Alchemist
registrierter User



Anmeldungsdatum: 03.08.2004
Beiträge: 27897
Wohnort: Hamburg

Beitrag(#1628959) Verfasst am: 18.04.2011, 19:15    Titel: Antworten mit Zitat

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... Cool
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Zoff
registrierter User



Anmeldungsdatum: 24.08.2006
Beiträge: 21668

Beitrag(#1628973) Verfasst am: 18.04.2011, 20:02    Titel: Antworten mit Zitat

Magst Du den Code mal posten?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Alchemist
registrierter User



Anmeldungsdatum: 03.08.2004
Beiträge: 27897
Wohnort: Hamburg

Beitrag(#1628982) Verfasst am: 18.04.2011, 20:41    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Zoff
registrierter User



Anmeldungsdatum: 24.08.2006
Beiträge: 21668

Beitrag(#1629003) Verfasst am: 18.04.2011, 21:55    Titel: Antworten mit Zitat

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. zwinkern
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Alchemist
registrierter User



Anmeldungsdatum: 03.08.2004
Beiträge: 27897
Wohnort: Hamburg

Beitrag(#1684471) Verfasst am: 07.09.2011, 17:59    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
moritura
pan narrans



Anmeldungsdatum: 01.12.2003
Beiträge: 1358
Wohnort: Berlin

Beitrag(#1684486) Verfasst am: 07.09.2011, 19:17    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Alchemist
registrierter User



Anmeldungsdatum: 03.08.2004
Beiträge: 27897
Wohnort: Hamburg

Beitrag(#1684736) Verfasst am: 08.09.2011, 12:51    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Landei
Gesinnungspolizist



Anmeldungsdatum: 27.02.2011
Beiträge: 1180
Wohnort: Sandersdorf-Brehna

Beitrag(#1684763) Verfasst am: 08.09.2011, 14:54    Titel: Antworten mit Zitat

ActiveCell.Row ist doch die Zeilennummer der Zelle, nicht die Höhe. Selbige wird mit ActiveCell.RowHeight gesetzt.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Alchemist
registrierter User



Anmeldungsdatum: 03.08.2004
Beiträge: 27897
Wohnort: Hamburg

Beitrag(#1684765) Verfasst am: 08.09.2011, 14:58    Titel: Antworten mit Zitat

Ihr Lieben,
ich hab es geschafft!!! Smilie

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
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen   Drucker freundliche Ansicht    Freigeisterhaus Foren-Übersicht -> DAU's Paradise Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.



Impressum & Datenschutz


Powered by phpBB © 2001, 2005 phpBB Group