我从@Ryan Wildry的上一个问题得到了一个精彩的答案,但我想我会就同一个代码问一个不同的问题:这里有。
我有一个共享(网络/服务器)Excel模板文件,它既是输入文件又是数据源(尽管在不同的工作表上)。我们称之为Input.xltm
。
代码基本上选取Input Sheet
范围内的输入,取前两个字母并从Code Sheet
中找到最接近的代码,然后使用前五个结果填充UserForm ListBox。
问题出现在用户启动UserForm并且错误通常返回时:
Run-time error '-2147467259'
The Microsoft Access database engine could not find the object 'C:\Users\user.name\Documents\Input1'. Make sure the object exists and that you spell its name and the path name correctly.......etc
我认为可能与Excel在文件名后面放一个数字有关,因为它是一个模板文件虽然我不知道!实际上知道了!
以下是代码:
Public MyConnection As New ADODB.Connection
Public MyRecordset As New ADODB.Recordset
Private Sub UserForm_Initialize()
Dim ColumnName As String: ColumnName = "[Variant code]"
Dim SearchStr As String: SearchStr = Left(Sheets("Input Sheet").Range("B4").Value2, 2)
Dim dbstring As String
dbstring = ThisWorkbook.FullName
Application.ScreenUpdating = False
If MyConnection.State <> adStateOpen Then
With MyConnection
.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & dbstring & _
";Extended Properties='Excel 12.0 Xml;HDR=YES;IMEX=1';"
.Open
End With
End If
If MyRecordset.State = adStateOpen Then MyRecordset.Close
MyRecordset.Open "Select top 5 " & ColumnName & " from [Code Sheet$] where " & ColumnName & _
" like '%" & SearchStr & "%'", MyConnection, adOpenForwardOnly, adLockReadOnly
Me.ListBox1.Clear
If Not MyRecordset.EOF Then MyRecordset.MoveFirst
Application.ScreenUpdating = True
Do Until MyRecordset.EOF
Me.ListBox1.AddItem MyRecordset.Fields(0).Value
MyRecordset.MoveNext
Loop
End Sub
我只需要通过服务器访问文件的每个人都能够获取正确的数据源(仅在下一页中)并填充ListBox。
我要感谢任何建议!感谢
我已经检查过,现在如果你打开(然后保存)实际的模板文件,那么就没有&#39; 1&#39;在文件名之后,代码按预期工作。仅当模板正常打开并且数字自动附加后才停止工作。
答案 0 :(得分:1)
您似乎不首先对MyConnection
和MyRecordset
进行早期绑定。
您可以通过
进行后期绑定更改
Public MyConnection As New ADODB.Connection
Public MyRecordset As New ADODB.Recordset
到
Public MyConnection As object
Public MyRecordset As object
添加
Set MyConnection = createobject("adodb.connection")
Set MyRecordset = createobject("adodb.recordset")
之前If MyConnection.State <> adStateOpen Then