Autor
|
Thema: Daten in externe Datei schreiben oder in Excel Tabelle speichern? (25826 mal gelesen)
|
kingmar Mitglied Schüler
Beiträge: 3 Registriert: 10.01.2005
|
erstellt am: 10. Jan. 2005 16:31 <-- editieren / zitieren --> Unities abgeben:
Hallo Leute, da ich erst neu im VBA Gebiet bin, hab ich folgenden Frage. Wie kann man Daten die ich laut einer Berechung bekomme in eine externe Datei schreiben oder in Excel in Tabellenform bringen.? Und zwar geht es um die Berechnung einer Ladung und Entladung eines Kondensators. i(t) und uc(t) sollen demnach in einer solchen Tabelle oder externen Tabelle erscheinen. Die benötigten Daten werden in eine Excel Tabelle eingegeben wie Uq usw. und dann folgt die Berechung und das schreiben in die Datei...aber wie.? Gruß kingmar Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andreas2DEasy Mitglied Softwareentwickler
Beiträge: 73 Registriert: 29.12.2004
|
erstellt am: 10. Jan. 2005 17:44 <-- editieren / zitieren --> Unities abgeben: Nur für kingmar
Also von wo kommen die Daten denn? aus einem externen Programm? Ich prog normalerweise in C++ oder Delphi , da machen wir sowas mit writeFile Methoden. man muss also einfach eine Stringliste Komma-oder Semikolon getrenntschreiben und diese in file schreiben und als csv abspeichern(csv kann man mit exel lesen. Wenn du mit Mit Visual Basic arbeitetest gibt es auch Ole-Objekte zum Arbeiten mit Office -Anwendungen. ------------------ Nobody is perfect Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
kingmar Mitglied Schüler
Beiträge: 3 Registriert: 10.01.2005
|
erstellt am: 10. Jan. 2005 18:25 <-- editieren / zitieren --> Unities abgeben:
also ich bekomme die daten aus der excel datei... ich geb die daten ein und diese werden dann in den einzelnen zellen abgelegt... die berechnungen habe ich dann schon in der excel tabelle hingekriegt... aber das speichern in der externen datei hab ich noch nicht hingekriegt. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andreas2DEasy Mitglied Softwareentwickler
Beiträge: 73 Registriert: 29.12.2004
|
erstellt am: 10. Jan. 2005 18:50 <-- editieren / zitieren --> Unities abgeben: Nur für kingmar
|
kingmar Mitglied Schüler
Beiträge: 3 Registriert: 10.01.2005
|
erstellt am: 10. Jan. 2005 19:07 <-- editieren / zitieren --> Unities abgeben:
also ich hab die daten in einer excel tabelle stehen in A1 - die Spannung in B1 den Strom und in C1 den Widerstand... A1 B1 C1 laufen jeweils bis 30 also 30 Daten pro Spalte wie kann ich diese Datein jetzt mit VBA in einer externen Textdatei speichern. z.B. ein Button neben der Tabelle der mit VBA das speichern in eine Textdatei ermöglicht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
startrek Moderator Architekt
Beiträge: 1361 Registriert: 13.02.2003 .
|
erstellt am: 10. Jan. 2005 19:35 <-- editieren / zitieren --> Unities abgeben: Nur für kingmar
Hi, eine mögliche Sache wär sowas, nimmt jeweils immer das aktive Tabellenblatt, schau Dir aber vielleicht auch einfach mal die 'speichern unter' Möglichenkeiten an.
Code:
Sub toText() Dim r&, c%, s$ Open "c:\temp\deinfile.txt" For Output As #1 For r = 1 To 30 'zeile 1 - 30 s = "" For c = 1 To 3 'Spalte A,B,C s = s & Cells(r, c).Value & Chr(9) 'Chr(9)=Tab Next Print #1, s Next Close #1 End Sub
Gruss Nancy Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andreas2DEasy Mitglied Softwareentwickler
Beiträge: 73 Registriert: 29.12.2004
|
erstellt am: 10. Jan. 2005 19:38 <-- editieren / zitieren --> Unities abgeben: Nur für kingmar
Button auf exeldatei ziehen doppelclick drauf und folgenden Code eintragen Set NewBook = Workbooks.Add Do fName = Application.GetSaveAsFilename Loop Until fName <> False NewBook.SaveAs Filename:=fName bei click auf den Button wird dann der Speicherndialog aufgerufen siehe in Exelhilfe folgende stichwörter: Save Saveas GetSaveAsFilename irgendwas wird dabei sein ( glaube getsaveasFilename) ach so wenn du den Code eingetragen hast , dann den Status Entwurfsmodus ausschalten
------------------ Nobody is perfect Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andreas2DEasy Mitglied Softwareentwickler
Beiträge: 73 Registriert: 29.12.2004
|
erstellt am: 10. Jan. 2005 19:41 <-- editieren / zitieren --> Unities abgeben: Nur für kingmar
fileSaveName = Application.GetSaveAsFilename( _ fileFilter:="Text Files (*.txt), *.txt") If fileSaveName <> False Then MsgBox "Save as " & fileSaveName End If dieser code setzt auch noch gleich den Filter( für Text-Files)
------------------ Nobody is perfect Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rodster Mitglied
Beiträge: 5 Registriert: 05.11.2007
|
erstellt am: 05. Nov. 2007 11:34 <-- editieren / zitieren --> Unities abgeben: Nur für kingmar
Moin, habe mir erlaubt den Code von Startrek zu verwenden. Vielen Dank dafür. Aber ich habe da noch ein kleines Problem . Und zwar möchte ich gerne, dass in der zu schreibenden Datei immer weider untereinander weg geschrieben bzw. eingefügt wird... Ist das möglich? Ich sage schon einmal vielen Dank im voraus. Gruß
rodster Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
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: 05. Nov. 2007 11:42 <-- editieren / zitieren --> Unities abgeben: Nur für kingmar
|
rodster Mitglied
Beiträge: 5 Registriert: 05.11.2007
|
erstellt am: 05. Nov. 2007 12:58 <-- editieren / zitieren --> Unities abgeben: Nur für kingmar
Danke, das klappt. Aber nochwas : das was in die externe Datei geschrieben wird, ändert sich immer bzw. es kommen immer neue Datensätze hinzu. Dit Tabelle umfasst momentan 3 Zeilen. Per Makro kann ich einen neuen Datensatz hinzufügen und es sind dann 4 Zeilen vorhanden. Wie kann man das Makro gestallten, wenn es also nicht immer eine feste Anzahl von Zeilen in die Datei schreiben soll, sondern eine dynamische Anzahl von Zeilen (nämlich jetzt vier Zeilen und nicht mehr 3)? Vielen Dank für die Hilfe... Gruß
rodster Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
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: 05. Nov. 2007 13:10 <-- editieren / zitieren --> Unities abgeben: Nur für kingmar
Hm... ohne das jetzt zu testen: Code: For r = 1 To 30 'zeile 1 - 30
steht da zu lesen. Es sollten ohnehin die ersten 30 Zeilen gelesen werden?! Durchforste - wieder mal;) - die Hilfe zu 'CurrentRegion' bzw. probier' (ins Blaue hinein) 'For r = 1 To CurrentRegion.Rows.Count'. Falls Du Spalten meintest: Mach' ausCode: For c = 1 To 3 'Spalte A,B,C
'ne 4 für A-D...Frederik ------------------ DIN1055.de | Lastannahmen für Anwender Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rodster Mitglied
Beiträge: 5 Registriert: 05.11.2007
|
erstellt am: 05. Nov. 2007 13:25 <-- editieren / zitieren --> Unities abgeben: Nur für kingmar
|
rodster Mitglied
Beiträge: 5 Registriert: 05.11.2007
|
erstellt am: 05. Nov. 2007 13:33 <-- editieren / zitieren --> Unities abgeben: Nur für kingmar
|
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: 05. Nov. 2007 14:59 <-- editieren / zitieren --> Unities abgeben: Nur für kingmar
*Hüstel* Zitat: Die Zeilen 1 bis 30 steht da deswegen, weil ich das so von startrek kopiert habe. Für Mich hat das keine Bedeutung.
Nun ja, für mich aber schon - und für VBA/den Verlauf des Makros auch. Mach' aus der 1 'ne 17 - wenn es bei Dir sowieso erst in Zeile 17 losgeht? Verkleinere das VBA-Fenster, sodaß Du Deine xls-Mappe sehen kannst, und drücke in VBA die Taste F8. Ich sagte ja: Ungetestet. Vorschlag: 'For r = 17 To Range("A17").CurrentRegion.Rows.Count'. Ansonsten bist Du herzlich eingeladen, selbst aktiv zu werden und die Hilfe zu lesen . Gruß, Frederik ------------------ DIN1055.de | Lastannahmen für Anwender 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: 05. Nov. 2007 15:16 <-- editieren / zitieren --> Unities abgeben: Nur für kingmar
eigentlich wollte ich den Fisch, äh die Antwort, ja noch länger zappeln lassen ich verweise mal auf den gerade vorhandenen Nachbarthread ;-) Die Information ist manchmal greifbar nahe ;-)
Code: For r = 17 To ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row '17 bis letzte Zeile in der ein Wert drinnen steht
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rodster Mitglied
Beiträge: 5 Registriert: 05.11.2007
|
erstellt am: 05. Nov. 2007 15:18 <-- editieren / zitieren --> Unities abgeben: Nur für kingmar
Moin Frederik, vielen Dank für die Hlfe. So wie es momentan aussieht, klappt alles. Wenn ich gewusst hätte, dass so etwas in der Hilfe steht, hätte ich es auch sicherlich versucht. Werds für die nächsten Probleme beherzigen und erst nach gescheiterte Suche im Hilfemenü das Forum aufsuchen. Gruß und baldigen Feierabend rodster Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
agent-64 Mitglied Projektleiter
Beiträge: 3 Registriert: 13.01.2008
|
erstellt am: 13. Jan. 2008 13:23 <-- editieren / zitieren --> Unities abgeben: Nur für kingmar
Hallo startrek, ich habe fast das gleiche problem gehabt wie der kollege dem du diesen tip gegeben hast. im prinzip as das ja ein normaler csv-export. stimmts? wie kann ich das ganze erweitern, ich denke mit einer weiteren schleife darum, um den text der in die datei geschrieben wird, statischen text voranzustellen. das ergebnis der einzelnen zeile soll ein "insert into table..........values " werden. die values kommen aus deiner for-schleife. [code] Sub toText() Dim r&, c%, s$ Open "c:\temp\deinfile.txt" For Output As #1 For r = 1 To 30 'zeile 1 - 30 s = "" For c = 1 To 3 'Spalte A,B,C s = s & Cells(r, c).Value & Chr(9) 'Chr(9)=Tab Next Print #1, s Next Close #1 ich hoffe du kannst mir helfen.4 gruß ralf [Diese Nachricht wurde von agent-64 am 13. Jan. 2008 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
runkelruebe Moderator Straßen- / Tiefbau
Beiträge: 8075 Registriert: 09.03.2006 MS-Office 365 ProPlus x86 WIN7(x64)
|
erstellt am: 13. Jan. 2008 19:13 <-- editieren / zitieren --> Unities abgeben: Nur für kingmar
Hallo ralf und Herzlich Willkommen bei cad.de. Ich bin zwar nicht startrek, aber ich versuch's trotzdem ;-) der Text, der exportiert wird setzt sich in der Zeile s = s & Cells(r, c).Value & Chr(9) 'Chr(9)=Tab zusammen. Hier kannst Du also nach Deinen Bedürfnissen schrauben. Vorbelegt wird s mit "", da kannst Du auch ansetzen, wenn der Text jeweils nur einmal am Anfang der Zeile erscheinen soll: Code: Sub toText() Dim r&, c%, s$ Open "c:\temp\deinfile.txt" For Output As #1 For r = 1 To 30 'zeile 1 - 30 s = "DEIN TEXT......" & Chr(9) For c = 1 To 3 'Spalte A,B,C s = s & Cells(r, c).Value & Chr(9) 'Chr(9)=Tab Next Print #1, s Next Close #1 End Sub
HTH, schönen Abend noch------------------ Gruß, runkelruebe Herr Kann-ich-nich wohnt in der Will-ich-nich-Straße... System-Info Alte Suche Excel Alte Suche Autodesk FAQ Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
agent-64 Mitglied Projektleiter
Beiträge: 3 Registriert: 13.01.2008
|
erstellt am: 14. Jan. 2008 21:16 <-- editieren / zitieren --> Unities abgeben: Nur für kingmar
Danke dir, hat fast funktioniert. ich muss jetzt nur noch zeilenumbrüche hinbekommen. wo finde ich denn mal eine übersicht der einzelnen Steuerzeichen. sorry bin schon etwas länger aus der materie raus. hab das eigentlich vor ca. zehn jahren mal gelernt und auch jobmäßig gebraucht. aber wenn man lange nichts gemacht hat, ist etwas schwierig wieder reinzukommen. gruß ralf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
runkelruebe Moderator Straßen- / Tiefbau
Beiträge: 8075 Registriert: 09.03.2006 MS-Office 365 ProPlus x86 WIN7(x64)
|
erstellt am: 14. Jan. 2008 21:52 <-- editieren / zitieren --> Unities abgeben: Nur für kingmar
Hi, Zeilenumbruch = Chr(10) Zitat: Aus F1; Stichwort Chr-Funktion: Die Zahlen von 0 bis 31 entsprechen den nicht darstellbaren Standard-ASCII-Codes. Chr(10) gibt zum Beispiel ein Zeilenvorschubzeichen zurück. Der normale Bereich für Zeichencode ist 0 bis 255. Auf DBCS-Systemen entspricht der tatsächliche Bereich für Zeichencode jedoch -32768 bis 65535.
weitere Zeichen findest Du unter dem Stichwort ZeichensatzIm VBA-Editor auf was ähnliches stellen (z.B. dafür hab ich das Chr(9) dringelassen ;-) ) und F1 drücken kann beim Finden helfen. Schönen Abend noch. ------------------ Gruß, runkelruebe Herr Kann-ich-nich wohnt in der Will-ich-nich-Straße... System-Info Alte Suche Excel Alte Suche Autodesk FAQ Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
agent-64 Mitglied Projektleiter
Beiträge: 3 Registriert: 13.01.2008
|
erstellt am: 15. Jan. 2008 18:46 <-- editieren / zitieren --> Unities abgeben: Nur für kingmar
|