求助:VBA导入Word ActiveX控件文本框数据至Access表失败
Access VBA读取Word ActiveX控件报错排查
我在MS Access的「Osoba」表单中编写VBA代码,用于将Word文档(A00.docm)中名为Ime_W的ActiveX文本框数据导入Access数据库「Proba db」的「Osoba」表「Ime」字段。
现有两种实现方案:
方案1(使用Bookmark):可正常执行,数据成功导入
代码如下:
Private Sub Command10_Click() Dim wordApp As Object Dim wordDoc As Object Dim textBoxValue As String Dim db As Database Dim rs As Recordset ' Otvara Word aplikaciju On Error Resume Next Set wordApp = GetObject(, "Word.Application") On Error GoTo 0 If wordApp Is Nothing Then Set wordApp = CreateObject("Word.Application") End If wordApp.Visible = True ' Prikazuje Word aplikaciju ' Dohvati putanju do Word dokumenta Dim filePath As String filePath = "C:\Users\10466237\Desktop\Automatsko prebacivanje iz worda u access\A00.docm" ' Zamijenite ovu putanju sa stvarnom putanjom do vašeg dokumenta ' Provjera da li je datoteka dostupna If Dir(filePath) = "" Then MsgBox "Nije pronaden Word dokument na zadatoj putanji.", vbExclamation Exit Sub End If ' Otvara postojeci Word dokument Set wordDoc = wordApp.Documents.Open(filePath) ' Dohvati vrijednost iz TextBoxa u Word dokumentu putem Bookmarka Dim bookmarkName As String ' Postavljamo ime bookmarka koje smo dodijelili TextBoxu bookmarkName = "Ime_W_Bookmark" ' Provjeravamo da li bookmark postoji u Word dokumentu If wordDoc.Bookmarks.Exists(bookmarkName) Then ' Ako postoji, dohvatimo tekst iz bookmarka textBoxValue = wordDoc.Bookmarks(bookmarkName).Range.Text Else ' Ako ne postoji, prikažemo poruku o grešci MsgBox "Bookmark 'Ime_W_Bookmark' nije pronaden u Word dokumentu.", vbExclamation wordDoc.Close Set wordDoc = Nothing Set wordApp = Nothing Exit Sub End If ' Zatvara Word dokument wordDoc.Close ' Cisti memoriju Set wordDoc = Nothing Set wordApp = Nothing ' Otvara Access bazu podataka Set db = CurrentDb ' Dodaj podatak u tabelu u Access bazi podataka Set rs = db.OpenRecordset("Osoba") rs.AddNew rs!Ime = textBoxValue rs.Update rs.Close ' Cisti memoriju Set rs = Nothing Set db = Nothing MsgBox "Podatak uspješno prebacen u tabelu.", vbInformation End Sub
方案2(直接调用ActiveX Control):执行时出现错误
代码如下:
Private Sub Command11_Click() Dim wordApp As Object Dim wordDoc As Object Dim textBoxValue As String Dim db As Database Dim rs As Recordset ' Otvara Word aplikaciju On Error Resume Next Set wordApp = GetObject(, "Word.Application") On Error GoTo 0 If wordApp Is Nothing Then Set wordApp = CreateObject("Word.Application") End If wordApp.Visible = True ' Prikazuje Word aplikaciju ' Dohvati putanju do Word dokumenta Dim filePath As String filePath = "C:\Users\10466237\Desktop\Automatsko prebacivanje iz worda u access\A00.docm" ' Zamijenite ovu putanju sa stvarnom putanjom do vašeg dokumenta ' Provjera da li je datoteka dostupna If Dir(filePath) = "" Then MsgBox "Nije pronaden Word dokument na zadatoj putanji.", vbExclamation Exit Sub End If ' Otvara postojeci Word dokument Set wordDoc = wordApp.Documents.Open(filePath) ' Dohvati vrijednost iz ActiveX kontrole u Word dokumentu Dim controlName As String controlName = "Ime_W" ' Zamijenite ovu vrijednost sa imenom vaše ActiveX kontrole ' Provjerava da li kontrola postoji u Word dokumentu If wordDoc.Shapes(controlName) Is Nothing Then MsgBox "ActiveX kontrola '" & controlName & "' nije pronadena u Word dokumentu.", vbExclamation wordDoc.Close Set wordDoc = Nothing Set wordApp = Nothing Exit Sub End If ' Dohvati vrijednost iz ActiveX kontrole textBoxValue = wordDoc.Shapes(controlName).OLEFormat.Object.Text ' Zatvara Word dokument 'wordDoc.Close ' Cisti memoriju Set wordDoc = Nothing Set wordApp = Nothing ' Otvara Access bazu podataka Set db = CurrentDb ' Dodaj podatak u tabelu u Access bazi podataka Set rs = db.OpenRecordset("Osoba") rs.AddNew rs!Ime = textBoxValue rs.Update rs.Close ' Cisti memoriju Set rs = Nothing Set db = Nothing MsgBox "Podatak uspješno prebacen u tabelu.", vbInformation End Sub
恳请帮忙排查方案2的报错问题,谢谢!
内容的提问来源于stack exchange,提问作者RSing
相关产品推荐
相关产品推荐

