最終編集:
Sub CreationMacroAuto()
Dim Modulos As String
Modulos = "C:/users/Sun/Desktop/StackOverflow/assign_value.bas" 'change filepath to yours
ThisWorkbook.VBProject.VBComponents.Import Modulos
Application.OnTime Now + TimeValue("0:00:01"), "callingNewSub"
End Sub
Sub callingNewSub()
Call Module1.assign_value
End Sub
一つのモジュールにコードの上に置きます。このコードは私のために働いた。エラーの可能性を減らすために、Module1の名前を別の名前、たとえば "assign_value_mod"に変更することもできます。
オリジナル回答と編集:あなたのコードにこの参照を追加する必要があり
:
On Error Resume Next 'in case reference already exists
ThisWorkbook.VBProject.References.AddFromGuid _
GUID:="{0002E157-0000-0000-C000-000000000046}", _
Major:=5, Minor:=3
On Error GoTo 0
EDIT:実際には、誤差がかなりWorkbooks("try.xlsm")
ある可能性がありここでファイルパス全体を記述する必要があります...またはコードを呼び出しているブックの場合は、を使用してください
EDIT2:これを試してみてください。マクロを呼び出すためとして
Sub CreationMacroAuto()
Dim Modulos As String
Modulos = "C:\My_macro\macro.bas"
On Error Resume Next 'in case reference already exists
ThisWorkbook.VBProject.References.AddFromGuid _
GUID:="{0002E157-0000-0000-C000-000000000046}", _
Major:=5, Minor:=3
On Error GoTo 0
With ThisWorkbook.VBProject
.VBComponents.Import Modulos
End With
Call Module1.assign_value()
End Sub
:Call macro.bas
を書きますが、その中にあるサブを呼び出すことはありません。たとえば、上記のサブはCreationMacroAuto()
と呼ばれているので、Call CreationMacroAuto()
と呼びます。
出典
2016-05-31 08:34:44
Sun
ああ、それが今働いているなら、それは良いです – Sun
私はその理由を発見したと思う、それはセキュリティのためです。言い換えれば、モジュールを使用するためにdevelopperのオプションを有効にするためにexcelを手動で許可する必要があります。どうすればこの部分を自動化できますか?もう1つの質問は、モジュールをインポートするときに、モジュールを呼び出すコードを書きました。 'Call macro.bas'ですが、VBAはこのモジュールを認識しませんでした。私はそれが正常だと思うので、私はそれをインポートするまで、モジュールは存在しません。どうすればこの問題を解決できますか? – maximus
私があなたに示した参考文献はちょうどそれを行うべきです。コードの先頭に挿入します。後でマクロを呼び出すときは、.basファイルではなくその中のサブファイルを呼び出す必要があります。自動的に呼び出されないようにするには、イベントを無効にする必要があります: 'application.enableevents = false' – Sun