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
xlWait klingt nach Excel-Konstante. Die dürfte in Deiner Word-Konstellation unbekannt sein.
okay - hab ich rausgenommen - bekomme es trotzdem nicht hin werte zu ändern in der Tabelle
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.
ja - stimmt alles
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.
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
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.
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
Datei (http://siren-supsurfing.com/Database7.zip)
Hallo,
ich sagte: "hier hochladen" und keinen Hyperlink zu einer leeren Zip-Datei
sorry - nun aber
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...
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
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
Hallo Franz,
lieben Dank klappt gut - eine andere Frage - ich wollte es eigentlich dafür haben um aus Access Rechnungsdaten an Word zu geben - dort die Rechnung schreiben zu lassen und dann den Rechnungswert wieder zurück schreiben zu lassen - oder lieber doch alles in access lassen - brauche nur in manchen Rechnung grössere Bereiche für Fliesstexte
Hallo,
versteh ich nicht..
wo werden denn die Rechnungsdaten insgesamt generiert?
Wenn das in Access stattfindet, brauchst Du doch kein Word für einen Rechnungsausdruck und das Hin- und Herkopieren der Daten...
Zitatbrauche nur in manchen Rechnung grössere Bereiche für Fliesstexte
Das geht doch auch gut mit Access-Berichten und ohne Word-Geschichten.