[解決済み] MS Excelでバージョン管理をする最適な方法【非公開
質問
MS Excel (2003/2007)で使用したことのあるバージョン管理システムは何ですか?また、その理由は何ですか?また、その理由も教えてください。
これを踏まえて、いくつかのユースケースを紹介します。
- VBAモジュールのバージョン管理
- 複数の人が1つのExcelスプレッドシートで作業しており、同じワークシートに変更を加え、それをマージして統合したい場合があります。このワークシートには、計算式、データ、チャートなどが含まれている可能性があります。
- ユーザーはあまり専門的ではなく、使用するバージョン管理システムは少ない方が良い。
- スペースの制約を考慮する。Excelのスプレッドシート全体ではなく、増分的な変更のみが保存されるのが理想的です。
解決方法は?
Bazaarを使用し、TortiseBZRを使用して手動でチェックイン/アウトするスプレッドシートをセットアップしたところです。保存の部分でこのトピックに助けられたので、私の解決策をここに投稿したいと思います。
私の解決策は、保存時にすべてのモジュールをエクスポートし、開くときにモジュールを削除して再インポートするスプレッドシートを作成することでした。はい、これは既存のスプレッドシートを変換する際に潜在的に危険である可能性があります。
これによって、モジュール内のマクロの編集を Emacs (そう、emacs)またはExcelネイティブで、大きな変更の後に私のBZRリポジトリをコミットします。すべてのモジュールはテキストファイルなので、BZR の標準的な diff スタイルのコマンドは、Excel ファイルそのものを除いて、私のソースに対して機能します。
BZRのリポジトリにX: \DataMySheetというディレクトリを設定しました。このリポジトリにはMySheet.xlsと、モジュールごとに1つの.vbaファイル(例: Module1Macros)が入っています。私のスプレッドシートには、エクスポート/インポート サイクルから除外されるモジュールとして "VersionControl" が追加されています。エクスポートと再インポートされる各モジュールは、"Macros" で終わらなければなりません。
VersionControl"モジュールの内容です。
Sub SaveCodeModules()
'This code Exports all VBA modules
Dim i%, sName$
With ThisWorkbook.VBProject
For i% = 1 To .VBComponents.Count
If .VBComponents(i%).CodeModule.CountOfLines > 0 Then
sName$ = .VBComponents(i%).CodeModule.Name
.VBComponents(i%).Export "X:\Tools\MyExcelMacros\" & sName$ & ".vba"
End If
Next i
End With
End Sub
Sub ImportCodeModules()
With ThisWorkbook.VBProject
For i% = 1 To .VBComponents.Count
ModuleName = .VBComponents(i%).CodeModule.Name
If ModuleName <> "VersionControl" Then
If Right(ModuleName, 6) = "Macros" Then
.VBComponents.Remove .VBComponents(ModuleName)
.VBComponents.Import "X:\Data\MySheet\" & ModuleName & ".vba"
End If
End If
Next i
End With
End Sub
次に、これらのマクロを実行するために、開く/保存のイベントフックを設定する必要があります。コードビューアで、"ThisWorkbook"を右クリックし、"View Code"を選択します。コードウィンドウの上部にあるセレクトボックスをプルダウンして、quot;(一般)ビューからquot;Workbook"ビューに変更する必要がある場合があります。
Workbook"ビューの内容です。
Private Sub Workbook_Open()
ImportCodeModules
End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
SaveCodeModules
End Sub
これから数週間かけてこのワークフローに慣れるつもりですが、何か問題があれば投稿します。
VBComponentのコードを共有していただきありがとうございます
関連
-
[解決済み] Excelの問題 "excel 4.0の関数が定義された名前に格納されている".
-
[解決済み] セルが文字列で始まる場合... 計算式
-
[解決済み] どのようにvbaコードで "名前を付けて保存 "を行うには、datestampと私の現在のExcelワークブックを保存するには?
-
[解決済み] VLOOKUP 最初の結果の下の行に値があるにもかかわらず、0を返す
-
[解決済み] Excelのセルで変数を宣言する
-
[解決済み] "数式で隣接するセルが省略される "問題の回避策
-
[解決済み] Microsoft Officeをインストールせずに、C#でExcel(.XLSおよび.XLSX)ファイルを作成するにはどうすればよいですか?
-
[解決済み] Visual Studio の .suo と .user ファイルをソースコントロールに追加する必要がありますか?
-
[解決済み] composer.lockはバージョンコントロールにコミットすべきですか?
-
[解決済み] UTF-8のCSVファイルをExcelに強制的に自動認識させることは可能ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] SSISのエラーコードです。0x80040E37
-
[解決済み] 配列に対してfor eachループを使用するにはどうしたらよいですか?
-
[解決済み] Excel - 複数列の SUMIFS
-
[解決済み] モジュール内でUserForm_Initialize()を呼び出す
-
[解決済み] EXCELの複数範囲-範囲ごとに異なる回答が必要
-
[解決済み] Excelの数式 LIKE、AND、IF、WILDCARDS
-
[解決済み】VBAの関数から結果を返す方法
-
[解決済み】セルに部分文字列が含まれているかどうかを確認する
-
[解決済み] Microsoft Excelは.csvファイルのダイアクリティクスを混乱させますか?
-
[解決済み] ExcelからVBAを使用してサーバーにHTTP POSTリクエストを送信するにはどうすればよいですか?