0

開いたときにすべてのシートにボタンがあることを確認するワークシートがあります。そのため、ボタンのない新しいシートが存在する場合は、それを追加するように設定されています。数か月前はこれでうまくいったと確信していましたが、現在 (このシートを数か月使用していなかった後)、「OLEObjects クラスの Add プロパティを取得できません」というエラー '1004' が表示されます。エラーは「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は既に typeLongであるため、直接渡す必要があります。したがって、次のような文字列を渡す代わりに:

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

次のように long パラメータで直接呼び出す必要があります。

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

これで問題は解決するはずです。

于 2014-08-13T17:55:22.290 に答える