0

我有一个工作表,在打开它时确保每张工作表都有一个按钮。因此,当存在没有按钮的新工作表时,它被设置为添加它。几个月前,我很确定这有效,但现在(几个月未使用此工作表后)我收到错误“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

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

4

1 回答 1

1

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

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

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

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

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

这应该可以解决问题。

于 2014-08-13T17:55:22.290 回答