对于我正在使用多个数据库(在单独的工作表中)和多个下拉菜单(组合框)的文档,这些数据库由这些数据库填充。在更改时,它会将一些信息和图片添加到主工作表中,该工作表将从这些数据库中检索。一切正常,但是......一旦我尝试更改其中一个数据库中的单元格(无关紧要哪一个),它就会给我一个错误的下拉框:
"Run-time error '1004': Method 'OLEObjects' of object '_worksheet' failed"
(调试突出显示在 .OLEObjects
)
我在这里监督什么?非常感谢任何帮助!
Private Sub CDL1_change()
Dim c As Range, MyPath, MyFile As String, WS As Worksheet
MyPath = Sheets("TeamChart").Range("C95").Value
Set WS = ActiveSheet
With Worksheets("CDL").Range("rngCDL")
Set c = .Find(CDL1.Value, LookIn:=xlValues, lookat:=xlWhole)
If Not c Is Nothing Then
Sheets("TeamChart").Range("L5") = c.Offset(0, 0).Value
Sheets("TeamChart").Range("M6") = c.Offset(0, 1).Value
Sheets("TeamChart").Range("M7") = c.Offset(0, 2).Value
MyFile = c.Offset(0, 3).Value
With WS
.OLEObjects("picCDL").Object.Picture = LoadPicture(MyPath & MyFile)
End With
Else
Sheets("TeamChart").Range("L5") = "Not Found"
Sheets("TeamChart").Range("M6") = "Not Found"
Sheets("TeamChart").Range("M7") = "Not Found"
End If
End With
End Sub
这是单元格 C95 的值:G:\xxx\Fotos\
。我已经尝试使用MyFile
作为路径和文件名,给出了相同的结果。
答案 0 :(得分:2)
我终于设法得到了同样的错误(以及其他许多方式^^)并解决它(以及所有其他错误)
为了帮助您解决问题,我将使用示例:
所以此代码完美无缺:
Private Sub testOleobj()
Dim MyPath, MyFile As String, WS As Worksheet
MyPath = Sheets("testSh1").Range("C95").Value ' A path equivalent to G:\xxx\Fotos\ for me
Set WS = Sheets("testSh1") ' Here is the change
MyFile = "test.jpg"
With WS
.OLEObjects("picCDL").Object.Picture = LoadPicture(MyPath & MyFile)
End With
End Sub
但是这段代码 无法正常工作:
注意:我执行此代码,让我们说一张名为" sheet1"
的表格Private Sub testOleobj()
Dim MyPath, MyFile As String, WS As Worksheet
MyPath = Sheets("testSh1").Range("C95").Value ' A path equivalent to G:\xxx\Fotos\ for me
Set WS = ActiveSheet
MyFile = "test.jpg"
With WS
.OLEObjects("picCDL").Object.Picture = LoadPicture(MyPath & MyFile)
End With
End Sub
我确信路径和图片都有效,因为我不是,我会收到其他错误(Error 481
- &gt;此处图片无效)但< /强>
我得到"Run-time error '1004': Method 'OLEObjects' of object '_worksheet' failed"
而 .OLEObjects("picCDL").Object.Picture = LoadPicture(MyPath & MyFile)
是导致错误的行... 为什么?
因为图片将加载到picCDL
中,这对我来说是表&#34; testSh1&#34; ,但我尝试在 ActiveSheet中找到它对应于... &#34; sheet1&#34;
总结:
我认为这对你来说是一样的(但我确实需要你更多的workboot信息):你使用Set WS = ActiveSheet
但我的理论是{{ 1}}实际上并不存在于此工作表上(实际上是活动工作表,这就是它失败的原因)但是在另一个工作表上,所以你不应该使用.OLEObjects("picCDL").Object.Picture
但是直接引用就像在我的第二个例子中一样
我希望这可以解决您的问题,如果不是,请添加有关您的工作簿,您使用的工作表等的更多信息......
最后注意:为什么使用ActiveSheet
因为您只设置了一个属性? (我也使用它来尽可能地匹配你的代码,但它没有用)