Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: Aloster am Februar 24, 2011, 17:11:35

Titel: Adress-Daten aus Zwischenablage in eine Accesstabelle einfügen
Beitrag von: Aloster am Februar 24, 2011, 17:11:35
Access 2007.
Automatisierung Adressübernahme aus Zwischenablage.

Ich habe folgenden Textblock aus einer Bestell-Email (Mozilla Thunderbird) in die Zwischenablage kopiert:

Fima: Musterfirma
Vorname: Heinrich
Nachname: Mustermann
Strasse:  Musterstr. 1
PLZ:  22222
Wohnort:  Musterstadt
Telefon:  000 00000
Email:  muster@musterdomain.de

Nun möchte ich diesen Textblock aus der Zwischenablage automatisch in einer Access-Tabelle "Adressen" (mit den Spalten "Unternehmen", "Vorname", "Nachname", "Straße", "Postleitzahl", "Ort", "Tel. privat" und "E-Mail") per Knopfdruck zuordnen.
Wie geht das? Vielen Dank im Voraus!
Titel: Re: Adress-Daten aus Zwischenablage in eine Accesstabelle einfügen
Beitrag von: DF6GL am Februar 24, 2011, 22:51:57
Hallo,

kopiere (per VBA) den Text in ein Textfeld und splitte erst in die "Zeilen" und dann in die Bezeichnung und den Wert auf.  Das Resultat schreibst Du in die Tabelle..

z. B.:

Private Sub btnTakeover_Click()

On Error GoTo Err_btnTakeover
Dim a1, a2, i As Long, rs As DAO.Recordset

Set rs = CurrentDb.OpenRecordset("Tabelle12", dbOpenDynaset)

Me!txtText.SetFocus
DoCmd.RunCommand acCmdPaste
a1 = Split(Me!txtText, vbCrLf)
rs.AddNew
For i = LBound(a1) To UBound(a1)
a2 = Split(a1(i), ":")
rs(a2(0)) = Trim(a2(1))
Next
rs.Update
rs.Close
Set rs = Nothing

Exit_btnTakeover:
    Exit Sub

Err_btnTakeover:
    MsgBox Err.Description
    Resume Exit_btnTakeover



End Sub
Titel: Re: Adress-Daten aus Zwischenablage in eine Accesstabelle einfügen
Beitrag von: Aloster am März 04, 2011, 15:46:53
Danke für den Tip!

Manchmal funktioniert es, manchmal kommt der Laufzeitfehler 94 "unzulässige Verwendung von Null"

in Zeile:
a1 = Split(Me!Text620, vbCrLf)

Woran liegt das?

Titel: Re: Adress-Daten aus Zwischenablage in eine Accesstabelle einfügen
Beitrag von: database am März 04, 2011, 19:25:39
Hallo,

ZitatLaufzeitfehler 94 "unzulässige Verwendung von Null

in Zeile:
a1 = Split(Me!Text620, vbCrLf)

Na ja, ich würde das halt so interpretieren, dass in dem Datensatz im Formularfeld Text620 eben NULL enthalten ist statt einem Text, heißt schlicht und ergreifend - das Textfeld ist (leer) Null.
Wenn dem so ist und diese Konstellation des Öfteren vorkommen kann, dann solltest du das abfangen um nicht bei jedem Vorkommen die Fehlermeldung zu sehen.

z.B so in Etwa

If Not IsNull(Me!Text620) Then
    a1 = Split(Me!Text620, vbCrLf)
Else
    'Mach was anderes --- z.B. Exit Sub
End If



HTH
Titel: Re: Adress-Daten aus Zwischenablage in eine Accesstabelle einfügen
Beitrag von: Aloster am März 08, 2011, 16:15:14
das klappt,

aber jetzt kommt die Laufzeitfehlermeldung 13 (Typen unverträglich) in Zeile:

For i = LBound(a1) To UBound(a1)

Woran liegt das? Wenn ich z.B. schon vor dem Doppelklick/Codeausführung die Zeilen aus der Zwischenablage in das Textfeld (Me!Text620) manuell einfüge und dann den Doppelclick/bzw. den Code ausführe (wodurch das die Zeilen aus der Zwischenablage nochmal eingefügt werden), dann klappt alles wunderbar.
Hier nochmal der ganze Code zum Verständnis:
Private Sub Befehl622_Click()
On Error GoTo Err_Befehl622
Dim a1, a2, i As Long, rs As DAO.Recordset
Set rs = CurrentDb.OpenRecordset("Adressen", dbOpenDynaset)
Me!Text620.SetFocus
DoCmd.RunCommand acCmdPaste
If Not IsNull(Me!Text620) Then
    a1 = Split(Me!Text620, vbCrLf)
Else
End If
rs.AddNew
For i = LBound(a1) To UBound(a1)
a2 = Split(a1(i), ":")
rs(a2(0)) = Trim(a2(1))
Next
rs.Update
rs.Close
Set rs = Nothing
Exit_Befehl622:
    Exit Sub
Err_Befehl622:
    MsgBox Err.Description
    Resume Exit_Befehl622
End Sub
Titel: Re: Adress-Daten aus Zwischenablage in eine Accesstabelle einfügen
Beitrag von: lumbumba am März 08, 2011, 17:40:07
Das Problem ist, das DoCmd.RunCommand acCmdPaste nicht sofort den Text in das Textfeld überführt. Daher kommt die Fehlermeldung, weil du zwar prüfst ob das Textfeld den Text beinhaltet, du aber trotzdem, auch wenn darin nix steht, das Array in seiner Dimension abfragst.

der Code müsste eher lauten:
   ....
   if len(nz(Me!Text620,""))>0 then
       a1 = Split(Me!Text620, vbCrLf)
       rs.AddNew
       For i = LBound(a1) To UBound(a1)
       .....

   end if
   ....



Aber statt den Text in ein Textfeld zu überführen solltest du den Text direkt aus der Zwischenablage holen.
Ist ein kleinwenig aufwendiger, zudem benötigst du ein Paar Api-funktionen
Beispiel (http://www.office-loesung.de/ftopic431684_0_0_asc.php)


Oder etwas einfacher:
Bsp.von steffen0815 (http://www.office-loesung.de/ftopic205878_0_0_asc.php)
Titel: Re: Adress-Daten aus Zwischenablage in eine Accesstabelle einfügen
Beitrag von: DF6GL am März 08, 2011, 21:49:32
Hallo,

.
.
.
DoCmd.RunCommand acCmdPaste

If IsNull(Me!Text620) Then Exit Sub

rs.AddNew
.
.