运行时错误' 1004':无法获取OLEObjects类的Add属性

时间:2014-08-13 16:35:36

标签: excel-vba activexobject createoleobject vba excel

我有一张工作表,打开后确保每张工作表都有一个按钮。因此,当存在没有按钮的新工作表时,会设置为添加它。几个月前,我很确定这有效,但是现在(几个月后没有使用这张表)我得到错误' 1004':"无法得到添加OLEObjects类的属性。"错误发生在" set btn"线。造成这种情况的原因是什么?如何解决?

    Private btn As OLEObject

Public Const sButtonName1 As String = "btnTorqueCurveFit" 
Public Const sBtnMessage1 As String = "Calculate Constant Torque Constants" 
Public Const sButtonName2 As String = "btnESPCurveFit" 
Public Const sBtnMessage2 As String = "Calculate Constant ESP Constants" 
Public Const sButtonLeft1 As Long = 302.25 
Public Const sButtonLeft2 As Long = 364.25


Private Sub AddTorqueButton(n As Worksheet)
    'Add a Button to the Sheet
    Set btn = n.OLEObjects.Add(ClassType:="Forms.CommandButton.1", Link:=False, DisplayAsIcon:=False, Left:=" & sButtonLeft1 &", Top:=3.75, Width:=60, Height:=57.75)
    btn.Name = sButtonName1
    btn.Object.Caption = sBtnMessage1
    btn.Object.Font.Bold = True
    btn.Object.WordWrap = True

    'Modify the sheet's code to have newly added button call the general code in the module
    Dim codeblock As CodeModule
    Dim vbComp As VBComponent
    Dim lineC As Integer
    Dim Ap As String, _
        Lf As String, _
        Tabs As String, _
        inputStr As String

    Set vbComp = ActiveWorkbook.VBProject.VBComponents(n.CodeName)
    Set codeblock = vbComp.CodeModule

    Tabs = Chr(9)
    Lf = Chr(10)
    Ap = Chr(34)

    inputStr = "Private Sub " & sButtonName1 & "_Click()" & Lf & Tabs & _
                    "ConstTorqueButtonAction ActiveSheet" & Lf & _
                "End Sub"

    With codeblock
        lineC = .CountOfLines + 1
        .InsertLines lineC, inputStr
    End With
End Sub

微距设置='全部启用,'有效X设置='全部启用,'文档已联网,但网络文档设置为可信。这个工作簿似乎是一个问题,因为我有另一个使用相同的工作簿" set btn"代码样式,它在这台机器上工作,但上面显示的代码会产生错误。任何帮助或见解表示赞赏。

1 个答案:

答案 0 :(得分:2)

错误的原因是调用Left时指定OLEObjects.Add参数的方式。不需要将其作为字符串传递,并且周围的&字符是不必要的。事实上,整件事都会导致错误。

由于常量sButtonLeft1已经是Long类型,因此您应该直接传递它。因此,而不是传递这样的字符串:

... , Left:=" & sButtonLeft1 &", ...

您应该使用long参数直接调用它:

... , Left:=sButtonLeft1, ...

这应解决问题。