Windows 10 (関連する場合はビルド 1903?) と 64 ビット Office 365 (おそらく関連する?) を使用して、Excel VBA コードのバージョン管理を可能にするシステムを実装しました。
メソッドを使用してWorkbook_BeforeSave
、現在のファイルが保存されているかどうか、保存されている場合はどこに保存されているかを確認しています。
これは正常に機能し、含まれているコードを更新するかどうかをユーザーに尋ねます。次に、ユーザーにプロンプトを表示する前に、コードを更新する必要があるかどうかを実際に確認する必要があるのではないかと考えました。
最初に、次の質問/解決策を見つけました: VBA を使用して、SharePoint ドキュメント ライブラリ内のファイルのメタデータまたはファイル プロパティを読み取る
ここからインストールできた DSOFile.dll なしでは使用できませんでした。
https://www.microsoft.com/en-us/download/details.aspx?id=8422
ここに私が持っているコードが続きますが、動作しません:
Private Function CheckTemplateIsNewerThanCurrentFile(ByVal templatePath As String) As Boolean
Dim templateName As String
Dim fso As New FileSystemObject
templateName = ActiveWorkbook.CustomDocumentProperties("TemplateName").Value
If fso.FileExists(templatePath & "\" & LocalTemplateName) Then
Dim objDSO As New DSOFile.OleDocumentProperties
objDSO.Open templatePath & "\" & LocalTemplateName, True, dsoOptionDefault
If Not objDSO.CustomProperties("LastCommitDate") = ActiveDocument.CustomDocumentProperties("LastCommitDate").Value Then
CheckTemplateIsNewerThanCurrentFile = False
Else
CheckTemplateIsNewerThanCurrentFile = True
TemplateLastCommitDate = objDSO.CustomProperties.Item("LastCommitDate")
End If
End If
End Function
そして、ここ (強調表示) は、上記のメソッドを .xlsb ファイルで実行しようとして受け取ったエラーです。
(FWIW: .xlsb 形式を使用する理由は、実行中のプロセスで 50 万行以上のデータを扱っているためです。はい、Excel がこのためのツールではないことはわかっていますが、私たちは苦労していますそれは今)
ファイル形式を .xlsm に変更することもできたはずですが、このファイルはバージョン管理されているため、この方法でも失敗する可能性がある場合は面倒です。
前もって感謝します、
アレックス。