4

Excel で VBA プロジェクトを作成しましたが、そのプロジェクト内には、別のモジュールにコードを書き込むモジュールがあります。私は最終的にプロジェクトをパスワードで保護して、コードを隠したままにしました (これがかなり明白な問題を引き起こすことにすぐには気づきませんでした)。

ユーザーがファイルを操作すると、モジュールはコードを実行しようとしますが、エラーが発生します (パスワードで保護されたプロジェクトはそれ自体を変更できません! 当たり前のことですが :p)。

それで、これを回避する方法として、ファイルの残りの部分をロックしたまま、「編集された部分を保護しないでください」と考えました。そこで、保護されていない .xlam アドインを作成し、そのコードをこの部分に書き込むことにしました。ただし、これを行う方法を理解するのに苦労しています。以下は、別のモジュールにコードを書き込む、私が書いたコードです。

Public Sub errorWrite()

Dim VBComp As VBIDE.VBComponent
Dim CodeMod As VBIDE.CodeModule
Dim s As String
Dim d As String
Dim lineNumb As Long

With ThisWorkbook.VBProject.VBComponents.item("NewModule")
.CodeModule.InsertLines j, "Public sub newModule()"

j = j + 1

With ThisWorkbook.VBProject.VBComponents.item("NewModule")
.CodeModule.InsertLines j, "(my code etc..)"

j = j + 1

   With ThisWorkbook.VBProject.VBComponents.item("NewModule")
.CodeModule.InsertLines j, "end sub"


end sub

たとえば、.xlam アドイン ( VBA を使用して xlam アドインを更新する) に関する Stack などの情報をいくつか見つけましたが、できるだけシンプルに保ちたいと思います。提案やヒントは大歓迎です。ありがとう!

4

2 に答える 2

1

保護されていないアドインを使用することは、合理的なアプローチのようです。ただし、投稿したコードは、保護されたアドイン内の別のモジュールに書き込みます。他のアドインを参照する必要がありますVBProject

保護されていないアドインの名前を一意の名前に変更します (既定値であり、一意VBAProjectである必要はありません)。

次に、このように参照を作成します

Dim VBP As VBProject
Set VBP = ThisWorkbook.VBProject.VBE.VBProjects("NameOfYourUnprotectedAddin")

次に、すべてのコードが代わりにこの参照を使用しますThisWorkbook.VBProject

例えば

With VBP.VBComponents.item("NewModule")
    .CodeModule.InsertLines j, "Public sub newModule()"
' etc

End With
于 2016-03-28T02:49:40.703 に答える