Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Adress-Daten aus Zwischenablage in eine Accesstabelle einfügen

Begonnen von Aloster, Februar 24, 2011, 17:11:35

⏪ vorheriges - nächstes ⏩

Aloster

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!

DF6GL

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

Aloster

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?


database

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

Aloster

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

lumbumba

#5
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


Oder etwas einfacher:
Bsp.von steffen0815
---