Access-o-Mania

Office-Forum (Deutsch/German) => Microsoft Excel => Thema gestartet von: Salvation am Juni 27, 2011, 08:44:21

Titel: Textmarken in Excel
Beitrag von: Salvation am Juni 27, 2011, 08:44:21
Hi,
ich habe wieder ein neues Problemchen.
Diesmal möchte ich Datensätze aus Access herraus exportieren. Immer nur den aktuell angezeigten Datensatz in einem Formular. Dieser soll dann in eine *.CSV Datei geschrieben werden.

Nun ist die Frage, da dies nicht über eine Abfrage laufen soll, wie ich es umsetzen kann. Ich habe sowas schon mal nach Word hingemacht, jedoch gibt es in Word die Textmarken, die angesprungen werden, diese gibt es in Ecxel scheinbar nicht.

Gibt es eine Möglichkeit, dies auch in Excel zu benutzen?

Salvation
Titel: Re: Textmarken in Excel
Beitrag von: database am Juni 27, 2011, 21:43:42
Hallo,

Zitatdiese gibt es in Ecxel scheinbar nicht
RICHTIG

ZitatGibt es eine Möglichkeit, dies auch in Excel zu benutzen
NEIN

Zitatda dies nicht über eine Abfrage laufen soll
Wird aber so sein müssen, sonst kriegst du den aktuellen DS des Formulars nicht exportiert - und ausserdem spricht TransferText m.E. nur Abfragen oder Tabellen an.

Wozu würdest du denn die Textmarken benötigen? Soll der Export an eine bestehende Datei angehängt werden?
Titel: Re: Textmarken in Excel
Beitrag von: Salvation am Juni 28, 2011, 09:07:36
Hi,

japp, der Export soll an eine bestehende Datei angehängt werden. ggf. soll der erste Export auch schauen, ob die Datei vorhanden ist oder nicht. Sprich, absicherung, ob jemand die Datei vielleicht gelöscht hat. Da diese ins ORBIS geladen wird, dmait daten darin aufgenommen werden. Dafür wird die CSV-Datei gebaucht. Danach kann sie ggf. gelöscht oder eben geleert werden. Danach werden wieder neue Datensätze darin gesammelt. Ich denke aber, dass die Kontrolle mit jedem Datensatz der exportiert wird durchlaufen werden soll, da sie jederzeit ins ORBIS geladen und damit ggf gelöscht werden kann.

Salvation
Titel: Re: Textmarken in Excel
Beitrag von: DF6GL am Juni 29, 2011, 11:00:00
Hallo,

erstell erst mal ein genaues (!) Ablaufkonzept zu diesem Vorgang.


Dann kannst Du mit Hilfe dieser Beispiele:

http://dbwiki.net/wiki/Access_Tipps_und_Tricks   unter  "Verarbeitung von Textdateien"


(nach gewissen Code-Anpassungen) den Export der Formulardaten in eine CSV-Datei und sonstige Überprüfungen erledigen.




Titel: Re: Textmarken in Excel
Beitrag von: Salvation am Juli 03, 2011, 11:24:12
Hi,

so, ich hab mich nun für eine TXT-Datei entscheiden, da man diese fix in eine CSV-Datei umwandeln kann. Einen Export mit allen Datensätzen bekomme ich nun schon hin, jedoch möchte ich nur den Datensatz exportieren, der mir grade in dem Formular angezeigt wird.

Des Weiteren sollen weiter Datensätze angehängt werden, so dass nur eine TXT-Datei besteht und da dann mehrere verschiedene Datensätze drin stehen.

Sinn und Zweck:
Der Export erfolgt, nachdem die Person neu angelegt wurde. Diese muss dann in ORBIS (ein Krankenhaus-Programm) eingebunden werden, dafür werden CSV-Dateien benötigt, aber wie gesagt, eine TXT-Datei kann man schnell mal eben Umwandeln.

Ich bin nun soweit, dass ich folgendes Modul eingebunden habe:

Option Compare Database

Public Function ExportDelim(SQL As String, _
  Optional FName As String = "C:\Temp\Temp.txt", _
  Optional HasFieldNames As Boolean = True, _
  Optional Delim As String = ";", Optional Quote As String = """")

Dim C As Long, Tmp As String, DB As DAO.Database
Dim RS As DAO.Recordset, Fld As DAO.Field
  Set DB = CurrentDb
  Set RS = DB.OpenRecordset(SQL, dbOpenSnapshot, dbForwardOnly)
  C = FreeFile
  Open FName For Output As #C
  If Not RS.EOF And HasFieldNames Then
    Tmp = ""
    For Each Fld In RS.Fields
      Tmp = Tmp & Delim & Quote & Fld.Name & Quote
    Next Fld
    Print #C, Mid(Tmp, Len(Delim) + 1)
  End If
  Do While Not RS.EOF
    Tmp = ""
    For Each Fld In RS.Fields
      Tmp = Tmp & Delim & Quote & Fld.Value & Quote
    Next Fld
    Print #C, Mid(Tmp, Len(Delim) + 1)
    RS.MoveNext
  Loop
  Close #C
  RS.Close
  DB.Close
End Function


Der Aufruf erfolgt so:


Private Sub Befehl8_Click()

MsgBox Me.RecordSource
MsgBox Me.Vorname
MsgBox Me.Nachname
MsgBox Me.Einstelungsdatum


    ExportDelim "SELECT Me.Vorname, Me.Nachname, Me.Einstellungsdatum FROM Me.RecordSource", "C:\Dokumente und Einstellungen\Reaver\Desktop\Testumgebung\Test.TXT"
End Sub



Die MsgBox sind noch zur Kontrolle da, damit ich schauen kann, ob auch der Datensatz genommen wird, der aktuell angezeigt wird.

Nun hab ich jedoch einen Laufzeitfehler:


Laufzeitfehler '3024':
Datei 'C:\Dokumente und Einstellungen\Reaver\Eigene Dateien\Me.mdb' nicht gefunden



Markiert wird mir im Modul folgende Zeile:

Set RS = DB.OpenRecordset(SQL, dbOpenSnapshot, dbForwardOnly)



Irgendwie bin ich grade leicht verwird, da ich nirgends eine Me.mdb angelegt habe, geschweige den suchen lasse. Oder schaue ich da grade nur drüber hinweg?

Salvation
Titel: Re: Textmarken in Excel
Beitrag von: DF6GL am Juli 03, 2011, 11:45:55
Hallo,


"ich hab mich nun für eine TXT-Datei entscheiden, da man diese fix in eine CSV-Datei umwandeln kann. "

??  Was willst Du da umwandeln?  eine (entspr. formatierte)  txt-Datei ist doch eine csv-Datei...

.
.
Optional FName As String = "C:\Temp\Temp.csv", _
.



ExportDelim "SELECT Me.Vorname, Me.Nachname, Me.Einstellungsdatum FROM Me.RecordSource", "C:\Dokumente und Einstellungen\Reaver\Desktop\Testumgebung\Test.CSV"

Die Recordsoure-Eigenschaft kann nicht als "Datenlieferant" für eine Abfrage (SQL-String) herhalten. Da muß ein Tabellen/Abfragename stehen.
Ein Formularobjekt-Verweis (Me) ist in einem SQL-String unsinnig.

Um einen bestimtmen DS in die Datei zu verfrachten, kann das Kriterium in den SQL-String eingebaut werden:


ExportDelim "SELECT Vorname, Nachname, Einstellungsdatum FROM tblDeineTabelle where PersID= " & Me!PersID, "C:\Dokumente und Einstellungen\Reaver\Desktop\Testumgebung\Test.CSV"


Um Datensätze an die CSV-Datei anzuhängen, kann das Öffnungsargument "For Append" bei "Open Dateiname" benutzt werden.
Titel: Re: Textmarken in Excel
Beitrag von: database am Juli 03, 2011, 12:02:25
Hallo,

und in Anlehnung und als Ergänzung zu den Ausführungen von Franz KÖNNTEST du ja auch das Recordset deines Formulars verwenden um den aktuellen Datensatz zu erhalten:

Option Compare Database
Option Explicit

Public Function ExportDelim(SQL As String, _
 Optional FName As String = "C:\Temp\Temp.txt", _
 Optional HasFieldNames As Boolean = True, _
 Optional Delim As String = ";", Optional Quote As String = """")

Dim C As Long, Tmp As String, DB As DAO.Database
Dim RS As DAO.Recordset, Fld As DAO.Field
 Set DB = CurrentDb  
 Set RS = Me.RecordsetClone
  RS.FindFirst "[PersID]=" & Me!PersID
 C = FreeFile
 Open FName For Output As #C
 ...
 ..
 .
  Close #C

 Set RS = Nothing

End Function


Aufruf dann OHNE den SQL-String ...

ExportDelim "SELECT Vorname, Nachname, Einstellungsdatum FROM tblDeineTabelle where PersID= " & Me!PersID, "C:\Dokumente und Einstellungen\Reaver\Desktop\Testumgebung\Test.CSV"


Titel: Re: Textmarken in Excel
Beitrag von: DF6GL am Juli 03, 2011, 12:08:19
Hallo,

dann muss die Funktion (wegen der "ME"-Referenzierung) aber im Formularklassen-Modul stehen, es sei denn, es wird der Recordset(Clone) anstelle der SQL-Strings übergeben..
Titel: Re: Textmarken in Excel
Beitrag von: database am Juli 03, 2011, 12:16:18
Hallo Franz,

ja - habe ich vergessen zu erwähnen - oder eben das Form mit seinem Namen angesprochen werden.
Ausserdem könnte der Teil ...

 Do While Not RS.EOF
   Tmp = ""
   For Each Fld In RS.Fields
     Tmp = Tmp & Delim & Quote & Fld.Value & Quote
   Next Fld
   Print #C, Mid(Tmp, Len(Delim) + 1)
   RS.MoveNext
 Loop

...eigentlich entfallen, da Salvation ja nur den aktuellen DS angesprochen hat - oder?
Titel: Re: Textmarken in Excel
Beitrag von: DF6GL am Juli 03, 2011, 12:37:43
Hallo


ja, sicher... Es gibt halt immer Optimierungsmöglichkeiten, wenn man die Situation individuell nimmt.   :D


Titel: Re: Textmarken in Excel
Beitrag von: Salvation am Juli 03, 2011, 12:56:16
Hi,

Zitat??  Was willst Du da umwandeln?  eine (entspr. formatierte)  txt-Datei ist doch eine csv-Datei...

Das sollte auch nicht das Problem sein. Dennoch danke für den Tipp, ich hätte notfalls die Dateiändung umgeändert, aber wenn es auch so geht, um so besser :)


Nehme ich das Beispiel von DF6GL, bekomme ich folgene Fehlermeldung:

Laufzeitfehler '3464': Datentyen in Kriterienausdruck unverträglich.

Makiert wird hierbei die Textzeile:

ExportDelim "SELECT Vorname, Nachname, Einstellungsdatum FROM tblDeineTabelle where PersNr= " & Me!PersNr, "C:\Dokumente und Einstellungen\Reaver\Desktop\Testumgebung\Test.CSV"


Vermische ich nu beide Vorschläge - ja ich musste es mal versuchen - dann bekomme ich folgende Fehlermeldung. Im Endeffekt die selbe wie vorher:


Laufzeitfehler '13': Typen unverträglich


Dazu sollte vielleicht gesagt werden, das die PersID als Text geklariert wurde, da diese auch Punkte oder Komma enthalten kann. Ich meine, da dar dann was, dass man da noch einfache Gänsefüsse setzen muss, aber ich weiß grade nicht mehr wie und wo.


Nehme ich nun das Beispiel von database bekomme ich diese Fehlermeldung:


Fehler beim Kompilieren:
Variablen nicht Definiert


Hierbei wird im Modul der komplette Kopf markiert:

Public Function ExportDelim( _
  Optional FName As String = "C:\Temp\Temp.csv", _
  Optional HasFieldNames As Boolean = True, _
  Optional Delim As String = ";", Optional Quote As String = """")


Salvation
Titel: Re: Textmarken in Excel
Beitrag von: DF6GL am Juli 03, 2011, 13:03:00
Hall,

"Dazu sollte vielleicht gesagt werden, das die PersID als Text geklariert wurde,"

ja, das ist auch der Grund für die Fehlermeldung. Ich hatte PersID geschrieben mit der Annahme, dass das das Primärschlüsselfeld vom DatenTyp Long , respektive Autowert sein könnte...


Wenn es sich um ein Textfeld handelt, dann muß es so heissen:

ExportDelim "SELECT Vorname, Nachname, Einstellungsdatum FROM tblDeineTabelle where PersNr= '" & Me!PersNr & "'",  "C:\Dokumente und Einstellungen\Reaver\Desktop\Testumgebung\Test.CSV"

wenn wir bei der ursprünglichen Code-Version mit einem SQL-String als Übergabeargument bleiben.

Titel: Re: Textmarken in Excel
Beitrag von: database am Juli 03, 2011, 13:03:42
Hallo,
Zitat...aber ich weiß grade nicht mehr wie und wo...

PersNr='" & Me!PersNr & "'"

und

ZitatNehme ich nun das Beispiel von database bekomme ich diese Fehlermeldung...

Public Function ExportDelim( _  
 Optional FName As String = "C:\Temp\Temp.csv", _
 Optional HasFieldNames As Boolean = True, _
 Optional Delim As String = ";", Optional Quote As String = """")

der Unterstrich hier muss raus wenn du meine Version versuchen willst


p.s.

Zitat von: DF6GL am Juli 03, 2011, 12:37:43
ja, sicher... Es gibt halt immer Optimierungsmöglichkeiten, wenn man die Situation individuell nimmt.   :D

jou und das speziell an einem verregneten Sonntag ...   :-\ :D ;D
Titel: Re: Textmarken in Excel
Beitrag von: Salvation am Juli 03, 2011, 13:07:57
@ database:

Nehme ich das _ raus, dann markiert er mir den folgenden Text rot. Wenn ich dann die Prozedur anstoze, hängt er sich daran auf.
Kann es sein, dass da noch was fehlt? Weil es ist ja - so dachte ich - eine komplette Funktion, draum hab ich das _ auch stehen lassen.
Titel: Re: Textmarken in Excel
Beitrag von: DF6GL am Juli 03, 2011, 13:08:50
Hallo,


mhmm,  glaub ich nicht so ganz   ;) :D  8)

vermutlich hat er durch den Mischmasch vergessen, eine Variable zu ändern...

@Salvation:  poste mal den Mischmasch und nenne die Variable, die BLAU markiert wird, wenn die Fehlermeldung entsteht.



Titel: Re: Textmarken in Excel
Beitrag von: Salvation am Juli 03, 2011, 13:21:08
Einmal das Modul:

Option Compare Database
Option Explicit

Public Function ExportDelim(
  Optional FName As String = "C:\Temp\Temp.csv", _
  Optional HasFieldNames As Boolean = True, _
  Optional Delim As String = ";", Optional Quote As String = """")

Dim C As Long, Tmp As String
Dim RS As DAO.Recordset, Fld As DAO.Field
  Set RS = DB.OpenRecordset(SQL, dbOpenSnapshot, dbForwardOnly)
  C = FreeFile
  Open FName For Output As #C
  If Not RS.EOF And HasFieldNames Then
    Tmp = ""
    For Each Fld In RS.Fields
      Tmp = Tmp & Delim & Quote & Fld.Name & Quote
    Next Fld
    Print #C, Mid(Tmp, Len(Delim) + 1)
  End If
'  Do While Not RS.EOF
'    Tmp = ""
'    For Each Fld In RS.Fields
'      Tmp = Tmp & Delim & Quote & Fld.Value & Quote
'    Next Fld
'    Print #C, Mid(Tmp, Len(Delim) + 1)
'    RS.MoveNext
'  Loop
  Close #C
 
Set RS = Nothing

End Function



Der Aufruf:

Option Compare Database

Private Sub Befehl8_Click()

    ExportDelim "C:\Dokumente und Einstellungen\Reaver\Desktop\Testumgebung - database\Test.CSV"

End Sub



Beim Ausführen bekomme ich nun folgende Meldung - ich hab beide Beispiele mal in getrennte Testumgebungen gelegt, damit da nichts zusammen gemischt wird:

Fehler beim Kompilieren
Erwartet: Bezeichner


Rot unterlegt ist dann folgender Teil:

Public Function ExportDelim(
  Optional FName As String = "C:\Temp\Temp.csv", _
  Optional HasFieldNames As Boolean = True, _
  Optional Delim As String = ";", Optional Quote As String = """")


Wobei der Curse - falls es auch was zu bedeuten haben könnte - am Ende der Zeile steht.



@ DF6GL:
Dein Beispiel funktiniert. Nun muss ich nur noch hinbekommen, dass die neuen Datensätze, welche ebenfalls exportiert werden, angehängt werden und nicht überschrieben. Enenso schön wäre es, wenn die erste Zeile, in der Vorname, Nachname und Eintrittsdatum weg sind, also nur die Daten es Datensatzes drin stehen. Gibt es da noch eine Möglichkeit?
Titel: Re: Textmarken in Excel
Beitrag von: DF6GL am Juli 03, 2011, 13:27:33
Hallo,

bin gleich offline..  ;)



"Gibt es da noch eine Möglichkeit?"
Hab ich doch vorhin gesagt....
Titel: Re: Textmarken in Excel
Beitrag von: database am Juli 03, 2011, 13:29:29
Hallo,

nur noch ein kleiner Einwurf:

Wenn du das .....

Public Function ExportDelim(
 Optional FName As String = "C:\Temp\Temp.csv", _
 Optional HasFieldNames As Boolean = True, _
 Optional Delim As String = ";", Optional Quote As String = """")


... mit dem oben gepostetem Code der Function ExportDelim verwendest, kracht es unweigerlich
weil dieses Zeile ...

Set RS = DB.OpenRecordset(SQL, dbOpenSnapshot, dbForwardOnly)

...die Übergabe des SQL-Strings erwartet hätte - der aber im Prozedurkopf rausgenommen wurde.

Um die Verwirrung nicht weiter zu schüren .... bleib' beim Beispiel von Franz!   ;)
Titel: Re: Textmarken in Excel
Beitrag von: Salvation am Juli 03, 2011, 13:31:27
Hi,

@ DF6GL
Args, grade wohl ein wenig in den Hintergrund verdrängt. Danke, werds gleich mal ein wenig weiter versuchen.


@ database:
Okay, wieder was gelernt. Vielleicht mach ich mich da i-wann nochmal ran. Dennoch Danke für deine Hilfe :)

Salvation
Titel: Re: Textmarken in Excel
Beitrag von: database am Juli 03, 2011, 13:35:26
Hi,

aber bitte, keine Ursache - gute Idee, schau dir das mal an wenn du leicht Zeit findest ;)
Titel: Re: Textmarken in Excel
Beitrag von: Salvation am Juli 03, 2011, 13:58:37
Hi,

auf jeden Fall :) Habs ja nun schonmal auf meinem Rechner, da muss ich dann nur noch weiter machen :)

Aber erstmal mach ich das andere Beispiel weiter und da hänge ich auch gleich schon wieder.

Hab nun meinen Abruf erweitert, damit das Programm die Datensätze anhängt. Jedoch werden sie weiterhin überschrieben.

Wie folgt schaut es nun aus:

Private Sub Befehl8_Click()

Nr = FreeFile
Open "C:\Dokumente und Einstellungen\Reaver\Desktop\Testumgebung - DF6GL\Test.CSV" For Append As #1
     Print #Nr, "Hier kommt der Inhalt was geschrieben werden soll"
Close #Nr

ExportDelim "SELECT Vorname, Nachname, Einstelungsdatum FROM Daten where PersNr= '" & Me!PersNr & "'", "C:\Dokumente und Einstellungen\Reaver\Desktop\Testumgebung - DF6GL\Test.CSV"

End Sub


Salvation
Titel: Re: Textmarken in Excel
Beitrag von: DF6GL am Juli 03, 2011, 16:28:06
Hallo,

aber doch kein Open vor dem Aufruf der Funktion..


IN der FUNKTION das "For output" durch "For Append" ersetzen.
Titel: Re: Textmarken in Excel
Beitrag von: Salvation am Juli 03, 2011, 18:12:01
Hi,

args, okay, voll verpeilt. *schäm* Kappt nun aber.
Das einzige was nun noch stört, dass der Kopf mit Exportiert wird.

Vorname Nachname Einstelungsdatum
Autumn Hokee         01.07.2011
Vorname Nachname Einstelungsdatum
Embry Call         03.07.2011


Wenn dass nun noch raus ist, dann bin ich Wunschlos glücklich. Ich denke aber mal dass es was mit diesem Codeteil zu tun hat:

   For Each Fld In RS.Fields
      Tmp = Tmp & Delim & Quote & Fld.Name & Quote
    Next Fld


Bin mir da nur nicht so sicher.

Salvation


Titel: Re: Textmarken in Excel
Beitrag von: database am Juli 03, 2011, 20:10:00
Hallo,

versuch mal

Optional HasFieldNames As Boolean = False

im Prozedurkopf

und hier ...   If Not RS.EOF And HasFieldNames = False Then

bzw. überhaupt weglassen der FieldNames-Geschichte in dieser Bedingung

ungetestet!

HTH
Titel: Re: Textmarken in Excel
Beitrag von: Salvation am Juli 03, 2011, 20:32:04
Huhu,

angepasst, behält aber bei, dass die Kopfzeile mit exportiert wird.

Salvation
Titel: Re: Textmarken in Excel
Beitrag von: database am Juli 03, 2011, 21:40:01
AHA...

dann nimm hier mal statt Fld.Name  Fld.Value

Tmp = Tmp & Delim & Quote & Fld.Name & Quote

... so wie es im auskommentierten Bereich ja richtig eingetragen war.
Titel: Re: Textmarken in Excel
Beitrag von: Salvation am Juli 04, 2011, 07:17:15
Hi,

Ich habs angepasst und dabei wurde nun der Datensatz doppelt ausgegeben. Dafür hab ich dann diesen Teil:

  'Do While Not RS.EOF
  '  Tmp = ""
  '  For Each Fld In RS.Fields
  '    Tmp = Tmp & Delim & Quote & Fld.Value & Quote
  '  Next Fld
  '  Print #C, Mid(Tmp, Len(Delim) + 1)
  '  RS.MoveNext
  'Loop


auskommentiert. Das wurde ja schonmal auskommentiert, bei deinem Beispiel.

Nun funktioniert es so, wie ich es haben wollte.

Vielen lieben Dank.

Salvation
Titel: Re: Textmarken in Excel
Beitrag von: database am Juli 04, 2011, 13:23:01
Hallo,

na schön, dass es leztendlich läuft.

Bei den vielen Variationen von auskommentiert und nicht auskommentiert ....

LG
Titel: Re: Textmarken in Excel
Beitrag von: Salvation am Juli 04, 2011, 21:40:21
Hi,
irgendwann muss es ja mal funktionieren. Notfalls wäre ich nochmal alles durchgegangen und dann irgendwann sicherlich dahinter gekommen.
Vielen lieben Dank nochmal, vorallem für die Geduld.

Salvation