EXCELファイル保存時にサイズ肥大を回避するには?


VBAで開発中  2004-08-16 20:12:49  No: 85132

EXCELファイルにVBAを組み込んだ簡単な業務アプリを開発しています。
EXCELになんらかの修正を加えると、都度サイズが肥大化していきます。
この肥大化を回避する方法としては、
「新規ブックに全て貼り付けなおす」
という手動の方法がありますが、これをVBAで自動化したいと思います。
フリーソフトはいくつか発見しましたが、
フリーソフトを都度起動するのではなく、
業務アプリ内で自律的に自ファイルを最適化する仕組みにしたいと
考えています。
EXCEL VBAのソースコードなど、何か紹介していただける方、
よろしくお願いします。


oku  URL  2004-08-17 07:43:10  No: 85133

VBAのソースを埋め込む方法ならわかりますので
載せときます。
まず参照設定で[Microsoft Visual Basic for Application Extensiblity **]

    Dim xlsApp   As Excel.Application
    Dim xlsVBE  As VBIDE.VBE
    Dim xlsMod  As VBIDE.VBComponent
    Dim xlsCode As VBIDE.CodeModule

    Set xlsApp = CreateObject("Excel.Application")
    xlsApp.Workbooks.Add
    xlsApp.Visible = True

    Set xlsVBE = xlsApp.VBE
    Set xlsMod = xlsVBE.VBProjects(1).VBComponents.Add(vbext_ct_StdModule)
    Set xlsCode = xlsMod.CodeModule
'    xlsCode.InsertLines 1, "Option Explicit"
    xlsCode.InsertLines 2, "Public Sub Test()" & vbCrLf _
                       & "   MsgBox ThisWorkbook.Name" & vbCrLf _
                       & "End Sub"
    Set xlsCode = Nothing
    Set xlsMod = Nothing
    Set xlsVBE = Nothing
    Set xlsApp = Nothing

とりあえず簡単にMsgBoxを!
エクセルの設定で変数の宣言強制してる場合、上記のように
Option Explicitの所をコメントしてください。

で次はVBAソースをテキストファイルに用意しておき、
そのソースを埋め込む!(こっちの方が実用的!?)

    Dim objFileSystem As Object
    Dim objFile       As Object
    Dim strFileName   As String
    Dim strRecBuff    As String
    
    Dim xlsApp   As Excel.Application
    Dim xlsVBE  As VBIDE.VBE
    Dim xlsMod  As VBIDE.VBComponent
    Dim xlsCode As VBIDE.CodeModule
    
    ' 読み込むファイル名
    strFileName = "C:\VBA.txt"
    ' ファイルシステムオブジェクトへの参照
    Set objFileSystem = CreateObject("Scripting.FileSystemObject")
    ' ファイルを開く
    Set objFile = objFileSystem.OpenTextFile(strFileName)
    ' ファイルの最後に達するまでループ
    ' 読み込んだデータを変数に保存
    strRecBuff = objFile.ReadAll
    ' ファイルを閉じる
    objFile.Close
    ' オブジェクトを解放
    Set objFileSystem = Nothing
    Set objFile = Nothing

    Set xlsApp = CreateObject("Excel.Application")
    xlsApp.Workbooks.Add
    xlsApp.Visible = True

    Set xlsVBE = xlsApp.VBE
    Set xlsMod = xlsVBE.VBProjects(1).VBComponents.Add(vbext_ct_StdModule)
    Set xlsCode = xlsMod.CodeModule
    xlsCode.InsertLines 2, strRecBuff
    Set xlsCode = Nothing
    Set xlsMod = Nothing
    Set xlsVBE = Nothing
    Set xlsApp = Nothing

本来はVBから実行するソースそのまま書いてるので
CreateObject("Excel.Application")の代わりになる物が
あるかと思うのですが、とりあえず!


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加