У меня есть этот код VBA, который проверяет все файлы в папке. Если файл не является pdf, он открывает его. Затем он создает петли для каждого абзаца в тексте, и если параграф содержит некоторые фиксированные символы, он экспортирует текст абзаца и значения в БД доступа.Объектная переменная или с переменной блока не установлена
код работает 80% времени, но в другое время, я получаю сообщение об ошибке сказав:.
переменная объекта или переменная блока не установлена»ошибка
Это мой код :
Sub retrieve()
Dim wfile, strinsert, fileorigine, parastringa, parastring, myOutput, price, quantity, filename As String
Dim Myrange As Range
Dim objPara
Dim accessdb As Access.Application
Dim para As Paragraph
Dim date_created, date_last_modified As Date
Dim currfile As Document
Application.DisplayAlerts = False
Set accessdb = CreateObject("Access.Application")
With accessdb
.OpenCurrentDatabase ("C:\Users\myuser\Desktop\macro\DataBaseFr.accdb")
.Visible = True
.DoCmd.SetWarnings False
For i = 0 To 100 'This will have to be updated with a counter
If i = 0 Then ' For the first call to dir
wfile = Dir("C:\Users\myuser\Desktop\macro\doc\")
Else
wfile = Dir 'all calls to Dir after the first
End If
'if .pdf then skip
If Right(wfile, Len(wfile) - InStrRev(wfile, ".")) = "pdf" Then
Else
Set currfile = Documents.Open("C:\Users\myuser\Desktop\macro\doc\" & wfile)
'for each paragraph
fileorigine = Replace(Left(currfile.Name, (InStrRev(currfile.Name, ".", -1, vbTextCompare) - 1)), "'", "")
date_last_modified = Format(FileDateTime(currfile.FullName), "d/m/yy h:n ampm")
date_created = currfile.BuiltInDocumentProperties("Creation Date")
For Each para In currfile.Paragraphs
Set objPara = para.Range
objPara.Find.Text = "€"
objPara.Find.Execute
'if the line contains €
If objPara.Find.Found Then
If Left(para.Range.Text, 7) = "Sum" Then
'if the line contains € AND Sum
parastringa = para.Previous.Range.Text
parastring = parastringa
quantity = Trim(Left(para.Range.Text, (InStrRev(para.Range.Text, "€") - 1)))
price = Trim(Right(para.Range.Text, ((Len(para.Range.Text) - InStrRev(para.Range.Text, "€")))))
Else 'if it is not a sum line
parastringa = para.Range.Text
parastring = Trim(Left(parastringa, (InStrRev(parastringa, "€") - 1)))
price = Trim(Right(parastringa, ((Len(parastringa) - InStrRev(parastringa, "€")))))
quantity = ""
End If
strinsert = " INSERT INTO Base " & "([origin], [Description],[date_created],[Datelast],[quantity], [price]) VALUES ('" & fileorigine & "', '" & parastring & "', '" & date_created & "' , '" & date_last_modified & "', '" & quantity & "' , '" & price & "');"
CurrentDb.Execute strinsert, dbFailOnError
Else
End If
Next para
currfile.Close SaveChanges:=False
End If
i = i + 1
Next
CurrentDb.Close
End With
Application.DisplayAlerts = True
End Sub`
Что могло случиться и как это исправить
Начните с правильного измерения ваших переменных - как показано на даты. – Gustav
Вы имеете в виду, что размещение всех Dims в одной строке может вызвать проблемы? – Jack
Где ошибка? на какой строке происходит сбой кода? – Gene