2016-03-15 9 views
5

私はExcelでいくつかのVBAを継承し、gitに入れたいと思っています。それが現れて、gitはそれをバイナリとして認識し、ファイル変更デルタを望んでいませんが、ファイル全体を複製します。Excel VBAをgitに入れる方法

個別のマクロをファイルに分割してgitに入れたいと思っています。これを行う標準的な方法はありますか?

+0

VBAマクロを後で元に戻すことなく別のファイルに分割できるかどうかはわかりません。これを調べることができます:http://stackoverflow.com/questions/540535/managing-large-binary-files-with-git –

+1

https://stackoverflow.com/questions/805032/vba-multiple-developers-in-a -project-concurrent-development、https://christopherjmcclellan.wordpress.com/2014/10/10/vba-and-git/(そこにリンクしています)、https://github.com/hilkoc/vbaDeveloper – max630

+0

解決策はRUBBERDUCKソースコントロールです。http://rubberduckvba.com/SourceControl –

答えて

1

モジュールをテキストとしてgitフォルダにエクスポートし、次にコミットする必要があります。

In VBAエディタ各マクロのモジュールを追加(Menu Insert/Module)すると、各マクロコードがモジュールにコピーされ、control + Eでテキストファイルとして保存されます。gitフォルダに保存し、変更。

vbaコードを変更すると、モジュールを保存して(control + E)、gitを正常に更新します。

+0

VBEコードを書き出す可能性もありますが、プロジェクトのコードへのアクセスを信頼する –

0

あなたは自動的にあなたのVBAコードを抽出し(https://www.xltrail.com/blog/auto-export-vba-commit-hookを参照してください)コミットに追加するには、次のPythonスクリプトを実行しますgitのプリコミットフックを作成することができます見て、詳細については

import os 
import shutil 
from oletools.olevba3 import VBA_Parser 


EXCEL_FILE_EXTENSIONS = ('xlsb', 'xls', 'xlsm', 'xla', 'xlt', 'xlam',) 


def parse(workbook_path): 
    vba_path = workbook_path + '.vba' 
    vba_parser = VBA_Parser(workbook_path) 
    vba_modules = vba_parser.extract_all_macros() if vba_parser.detect_vba_macros() else [] 

    for _, _, _, content in vba_modules: 
     decoded_content = content.decode('latin-1') 
     lines = [] 
     if '\r\n' in decoded_content: 
      lines = decoded_content.split('\r\n') 
     else: 
      lines = decoded_content.split('\n') 
     if lines: 
      name = lines[0].replace('Attribute VB_Name = ', '').strip('"') 
      content = [line for line in lines[1:] if not (
       line.startswith('Attribute') and 'VB_' in line)] 
      if content and content[-1] == '': 
       content.pop(len(content)-1) 
       lines_of_code = len(content) 
       non_empty_lines_of_code = len([c for c in content if c]) 
       if non_empty_lines_of_code > 0: 
        if not os.path.exists(os.path.join(vba_path)): 
         os.makedirs(vba_path) 
        with open(os.path.join(vba_path, name + '.bas'), 'w') as f: 
         f.write('\n'.join(content)) 


if __name__ == '__main__': 
    for root, dirs, files in os.walk('.'): 
     for f in dirs: 
      if f.endswith('.vba'): 
       shutil.rmtree(os.path.join(root, f)) 

     for f in files: 
      if f.endswith(EXCEL_FILE_EXTENSIONS): 
       parse(os.path.join(root, f)) 

https://www.xltrail.com/blog/auto-export-vba-commit-hook

関連する問題