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

Excel 运行时错误';1004';:无法获取OLEObjects类的Add属性,excel,activexobject,createoleobject,vba,Excel,Activexobject,Createoleobject,Vba,我有一个工作表,打开时确保每张工作表都有一个按钮。因此,当出现一张没有按钮的新工作表时,它被设置为添加它。几个月前,我很确定这是有效的,但现在(在几个月没有使用此工作表之后)我收到错误“1004”:“无法获取OLEObjects类的Add属性。”错误发生在“set btn”行。这是什么原因造成的?我如何修复它 Private btn As OLEObject Public Const sButtonName1 As String = "btnTorqueCurveFit" Publi

我有一个工作表,打开时确保每张工作表都有一个按钮。因此,当出现一张没有按钮的新工作表时,它被设置为添加它。几个月前,我很确定这是有效的,但现在(在几个月没有使用此工作表之后)我收到错误“1004”:“无法获取OLEObjects类的Add属性。”错误发生在“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

宏设置='Enable All',Active X设置='Enable All',文档已联网,但网络文档已设置为受信任。这似乎是本工作簿的一个问题,特别是因为我有另一个工作簿使用相同的“set btn”代码样式,并且它在这台机器上工作,但上面显示的代码会产生错误。任何帮助或见解都将不胜感激

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

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

... , Left:=" & sButtonLeft1 &", ...
... , Left:=sButtonLeft1, ...
您应该使用long参数直接调用它,如下所示:

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

这应该可以解决问题。

这意味着什么<代码>左:=“&sButtonLeft1&”。如果你使用一个数字(只是作为一个测试),它可以正常工作。在任何情况下,这都是你的错误。为了进一步提供帮助,我们需要查看您的代码。这听起来像是一个访问问题。例如,定义按钮的模块顶部是否有
选项Private module
?如果它在外接程序中,您的代码是否将其作为引用?很难说确切的问题是什么。刚刚看了你的最新编辑。明显的问题:为什么
左:=“&sButtonLeft1&”
sButtonLeft1
是一个
长的
?只需执行:
Left:=sButtonLeft1
?我已经在这里进行了测试,我完全可以按原样使用
sButtonLeft1
。不需要
&
s,无论如何都不应该传递字符串。根据请求添加了答案。祝你好运!