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