Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Frage zu einem Script

Begonnen von martenk, August 27, 2021, 08:24:18

⏪ vorheriges - nächstes ⏩

martenk

Hallo Gemeinschaft,

Office 2016 hab ich

möchte mich gern mit dem Aktualisieren von Access Tabelle aus Word beschäftigen und habe folgendes Script gefunden, welches leider nicht läuft



bricht ab bei Application.cursor = xlWait

bekomme die Meldung Methode oder Datenobjekt nicht gefunden

Option Explicit
' ************************************************************************************************
' Autor/en: http://www.online-vba.de - Marc Wershoven
' Verwendung der Quelltexte auf eigene Gefahr!
' Es gelten die Nutzungsbedingungen von www.online-vba.de!
' Original-Quelltext: www.online-vba.de/vba_updatedbfield.php
' ************************************************************************************************

Sub MWDatenInAccessDBschreiben()
   Dim oADODBConnection As Object
   
   Dim oRecordSet As Object
   Dim sTableName As String
   Dim sFilterKlausel As String
   Dim sDataBaseFile, xlWait
   
     'Welcher Datensatz in welcher Tabelle?
     sTableName = "MeineTabelle"
     sFilterKlausel = "ID=1"
   
     'Datenbankdatei (hier Access DB)
     sDataBaseFile = "C:\Rechnung\Database7.accdb" 'wo liegt die Datei?
     If Trim(CStr(Dir(sDataBaseFile))) = "" Then
         MsgBox "Die Datenbank-Datei: " & sDataBaseFile & _
             " wurde nicht gefunden.", vbCritical + vbOKOnly, "FEHLER!"
         Exit Sub
     End If
   
     Application.cursor = xlWait
   
     'Verbindung zur Datenbank
     Set oADODBConnection = CreateObject("ADODB.Connection") 'LateBinding daher ohne Verweis
     With oADODBConnection
         .Provider = "Microsoft.ACE.OLEDB.12.0" 'für Access 2013
         .Properties("Persist Security Info") = "False"
         .Properties("Data Source") = sDataBaseFile
         .Open
     End With
   
     'RecordSet öffnen
     Set oRecordSet = CreateObject("ADODB.RecordSet") 'LateBinding daher ohne Verweis
     With oRecordSet
         .CursorLocation = 2 'adUseClient
         .CursorType = 2 'adOpenDynamic
         .LockType = 3 'adLockOptimistic
         .Open sTableName, oADODBConnection
         .Filter = sFilterKlausel 'Filter setzen, ID muss 1 sein!
     End With
   
     'Daten schreiben
     If Not oRecordSet.EOF Then 'Nur wenn der Datensatz gefunden wurde ID=1
         'Wertzuweisung: MeinFeld bekommt "Neuer Wert!"
         'Bei Zahlen entsprechend: oRecordSet.Fields("MeinFeld") = 12
         oRecordSet.Fields("MeinFeld") = "Neuer Wert!"
         'Speichern / Aktualisieren
         oRecordSet.Update
     End If
   
     'RecordSet schließen
     oRecordSet.Close
   
     'Datenbankverbindung schließen
     oADODBConnection.Close
       
     Application.cursor = xlDefault
   
     Set oRecordSet = Nothing
     Set oADODBConnection = Nothing
End Sub

ebs17

xlWait klingt nach Excel-Konstante. Die dürfte in Deiner Word-Konstellation unbekannt sein.
Mit freundlichem Glück Auf!

Eberhard

martenk

okay - hab ich rausgenommen - bekomme es trotzdem nicht hin werte zu ändern in der Tabelle

DF6GL

#3
Hallo,

kommt denn nach der Änderung eine Fehlermeldung?

Stimmt der Feldname  ("MeinFeld")?
Stimmt der  Datentyp (Kurzer Text) in der Tabelle , wenn ein String ("Neuer Wert!") zugewiesen wird?



Zudem sollte der Provider so heißen:

.Provider = "Microsoft.ACE.OLEDB.16.0" 'für Access 2016

was aber hier keine große Rolle spielt.
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

martenk


DF6GL

Hallo,

Zitatkommt denn nach der Änderung eine Fehlermeldung?
?? ?? ??

Zusätzlich: Heißt das Primärschlüsselfeld "ID" und ist von Datentyp Long?


Zitatja - stimmt alles

offensichtlich nicht....

Der Code läuft bei bei angepassten Namen ohne Fehler.

Poste nochmal den aktuellen Code.


Setze einen Haltepunkt an den Code-Anfang und fahre mit Einzelschritt durch.
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

martenk

#6
Weiss nicht ganz geau wasdu meinst

Sub MWDatenInAccessDBschreiben()
   Dim oADODBConnection As Object
   
   Dim oRecordSet As Object
   Dim sTableName As String
   Dim sFilterKlausel As String
   Dim sDataBaseFile, xlWait
   Dim ID As Long

in Access
ID->autofeld
MeinFeld _> kurzer Text


wenn ich mit F8 durchklicke durch den Code, dann überspringt das Script hier
     If Not oRecordSet.EOF Then 'Nur wenn der Datensatz gefunden wurde ID=1


obwohl ID=1 existiert

DF6GL

Hallo,


ZitatWeiss nicht ganz geau wasdu meinst

na, den ganzen aktuellen Code posten, nicht nur die paar Deklarationen...  ::)


Zitatdann überspringt das Script hier.   If Not oRecordSet.EOF Then ....

Dann hat er halt keinen DS gefunden....


Zeige mal den Screenshot der Tabellenansicht....

Oder lade mal die Access-Datei hier hoch, datenreduziert , komprimiert/repariert und gezippt.

Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

martenk

Option Explicit
' ************************************************************************************************
' Autor/en: http://www.online-vba.de - Marc Wershoven
' Verwendung der Quelltexte auf eigene Gefahr!
' Es gelten die Nutzungsbedingungen von www.online-vba.de!
' Original-Quelltext: www.online-vba.de/vba_updatedbfield.php
' ************************************************************************************************

Sub MWDatenInAccessDBschreiben()
   Dim oADODBConnection As Object
   
   Dim oRecordSet As Object
   Dim sTableName As String
   Dim sFilterKlausel As String
   Dim sDataBaseFile, xlWait
   Dim ID As Long
   
   
     'Welcher Datensatz in welcher Tabelle?
     sTableName = "MeineTabelle"
     sFilterKlausel = "ID=1"
   
     'Datenbankdatei (hier Access DB)
     sDataBaseFile = "C:\Rechnung\Database7.accdb" 'wo liegt die Datei?
     If Trim(CStr(Dir(sDataBaseFile))) = "" Then
         MsgBox "Die Datenbank-Datei: " & sDataBaseFile & _
             " wurde nicht gefunden.", vbCritical + vbOKOnly, "FEHLER!"
         Exit Sub
     End If
   
    ' Application.cursor = xlWait
   
     'Verbindung zur Datenbank
     Set oADODBConnection = CreateObject("ADODB.Connection") 'LateBinding daher ohne Verweis
     With oADODBConnection
         .Provider = "Microsoft.ACE.OLEDB.16.0" 'für Access 2013
         .Properties("Persist Security Info") = "False"
         .Properties("Data Source") = sDataBaseFile
         .Open
     End With
   
     'RecordSet öffnen
     Set oRecordSet = CreateObject("ADODB.RecordSet") 'LateBinding daher ohne Verweis
     With oRecordSet
         .CursorLocation = 2 'adUseClient
         .CursorType = 2 'adOpenDynamic
         .LockType = 3 'adLockOptimistic
         .Open sTableName, oADODBConnection
         .Filter = sFilterKlausel 'Filter setzen, ID muss 1 sein!
     End With
   
     'Daten schreiben
     If Not oRecordSet.EOF Then 'Nur wenn der Datensatz gefunden wurde ID=1
         'Wertzuweisung: MeinFeld bekommt "Neuer Wert!"
         'Bei Zahlen entsprechend: oRecordSet.Fields("MeinFeld") = 12
         oRecordSet.Fields("MeinFeld") = "Neuer Wert!"
         'Speichern / Aktualisieren
         oRecordSet.Update
     End If
   
     'RecordSet schließen
     oRecordSet.Close
   
     'Datenbankverbindung schließen
     oADODBConnection.Close
       
     'Application.cursor = xlDefault
   
     Set oRecordSet = Nothing
     Set oADODBConnection = Nothing
End Sub

martenk


DF6GL

Hallo,

ich sagte: "hier hochladen" und keinen Hyperlink zu einer leeren Zip-Datei
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

martenk


DF6GL

Hallo,


Zitatobwohl ID=1 existiert


stimmt wohl nicht.  Die Tabelle ist leer, ID =1 existiert nicht und somit macht der Code, war er machen muss...
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

martenk

komisch - nun geht es

nun noch eine Frage -

ich möchte nun aus dem Worddokument einen Wert in die Tabelle tragen (Rechnungswert)

da innerhalb des Worddokuments aber mehr oder weniger viel Text kommt

DF6GL

Hallo,


füge eine Textmarke ("Rechnungswert") an der Stelle ein, an der der Betrag steht.

Korrigiere den Code wie folgt:

     If Not oRecordSet.EOF Then 'Nur wenn der Datensatz gefunden wurde ID=1
         'Wertzuweisung: MeinFeld bekommt Rechnungswert
          oRecordSet.Fields("MeinFeld") = ActiveDocument.Bookmarks("Rechnungswert").Range.Text
         'Speichern / Aktualisieren
         oRecordSet.Update
     End If
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access