ExcelスプレッドシートのVBAモジュール(現在はExcel 2003 SP3を使用しています)をソースコードで管理したいので、さまざまなスプレッドシートで使用されているコードを共有して管理できます。したがって、私はスプレッドシートが開かれたときにファイルからそれらを再ロードしたいと思います。Excel VBAコードモジュールのソース管理
私はロバの仕事の大部分を行うために使用するLoader.basというモジュールを持っています(必要な他のモジュールのロードとアンロード) - それをロードすることができますスプレッドシートを開くとすぐにファイルを開きます。
次のコードを(ThisWorkbookクラスの)Workbook_Openイベントに添付しました。
Private Sub Workbook_Open()
Call RemoveLoader
Call LoadLoader
End Sub
(またはThisWorkbookクラス内)RemoveLoaderは、次のコードが含まれ
:
Private Sub RemoveLoader()
Dim y As Integer
Dim OldModules, NumModules As Integer
Dim CompName As String
With ThisWorkbook.VBProject
NumModules = ThisWorkbook.VBProject.VBComponents.Count
y = 1
While y <= NumModules
If .VBComponents.Item(y).Type = 1 Then
CompName = .VBComponents.Item(y).Name
If VBA.Strings.InStr(CompName, "Loader") > 0 Then
OldModules = ThisWorkbook.VBProject.VBComponents.Count
.VBComponents.Remove .VBComponents(CompName)
NumModules = ThisWorkbook.VBProject.VBComponents.Count
If OldModules - NumModules = 1 Then
y = 1
Else
MsgBox ("Failed to remove " & CompName & " module from VBA project")
End If
End If
End If
y = y + 1
Wend
End With
End Sub
おそらく少しovercomplicatedと多少の粗である - しかし、私はすべてをしようとしている私はそれを得るために見つけることができます外部モジュールをロードする!
多くの場合、スプレッドシートを開くと、RemoveLoader関数はVBAプロジェクトに既に含まれている「Loader1」モジュールが削除されていることを検出し、ファイルから新しいLoaderモジュールを読み込むこともできません。
私がしようとしていることがあれば、どんなアイデアも可能ですか? Excelはロードや削除のいずれかのときに、これらのモジュール名に1を追加するのが非常に好きです(どちらがわかりませんか)。
私はいくつか考えて、これを思いついたことを追加するのを忘れてしまった:http://grumpyop.wordpress.com/2009/04/20/version-control-for-excel-workbooks-part-2/ 注コメントに挙げられているVBAMavenというものもあります。このコメントは、役に立つ外部サービスのように見えます。 –