vba代码中的OLEObjects出错(Excel 2010)

时间:2014-08-11 14:10:07

标签: vba excel-vba excel

对于我正在使用多个数据库(在单独的工作表中)和多个下拉菜单(组合框)的文档,这些数据库由这些数据库填充。在更改时,它会将一些信息和图片添加到主工作表中,该工作表将从这些数据库中检索。一切正常,但是......一旦我尝试更改其中一个数据库中的单元格(无关紧要哪一个),它就会给我一个错误的下拉框:

"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作为路径和文件名,给出了相同的结果。

1 个答案:

答案 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因为您只设置了一个属性? (我也使用它来尽可能地匹配你的代码,但它没有用)