|
pi さん、皆さん、おはようございます。
>Runメゾットも使ってみたのですが、
>Runメゾットは失敗しました'_Application'メゾット
>と出てきます。
runメソッドは、テキストファイルへのアクセスではないですよ!!
マクロコードが入ったExcelブックに対して行って下さい。
つまり、テキストファイルを媒体にするのはやめて
マクロコードを含んだExcelを媒体にしてみては? という意味です。
>使用目的は、友達に自分の作ったファイルを送った後に、
>テキストファイルを使い、マクロを拡張したいと考えているからです。
そのお友達とVBAの共同開発をしているのですか?
もしそうだとしたら、Vbprojectを使うと言うのもありかなあ・・
と思います。
今回の事例で使用するしないはもうちょっと内容を聞いてみないと
わかりませんが、
90.txtというテキストファイルがマクロを含むブックと同じフォルダにあったとして
'=============================================================
Sub main()
ret = addcode(ThisWorkbook.Path & "\90.txt", ThisWorkbook, "addmdl")
If ret = 0 Then
msgbox "挿入成功"
'Application.Run "macro1"
Else
msgbox Error(ret)
End If
End Sub
'=======================================================================
Function addcode(flnm As String, wk As Workbook, Optional mdnm As String = "", Optional prnm As String) As Long
' 機能:指定されたテキストファイルから、指定されたブックにコードを追加又は、書き換える
' input : flnm---コードが書かれたテキストファイルのパス名
' wk-----コードを書き込むブックオブジェクト
' mdnm---書き換える、又は、追加するモジュール名(追加の場合は、標準モジュール)
' 指定されたモジュール名があれば、書き換え、なければ追加
' prnm---書き換えるプロシジャー名
On Error Resume Next
Dim vbcp As Object
With wk.VBProject
Set vbcp = .VBComponents(mdnm)
If Err.Number <> 0 Then
Set vbcp = .VBComponents.Add(1)
If mdnm <> "" Then vbcp.Name = mdnm
Else
If prnm <> "" Then
Err.Clear
stln = vbcp.CodeModule.ProcStartLine(prnm, 0)
edln = vbcp.CodeModule.ProcCountLines(prnm, 0)
vbcp.CodeModule.DeleteLines stln, edln - stln + 1
End If
End If
Err.Clear
vbcp.CodeModule.AddFromFile flnm
End With
addcode = Err.Number
On Error GoTo 0
End Function
上記コードでテキストファイル中のコードを標準モジュールに
読み込みます。
この方法を使用するか否かは十分検討の上で行って下さい。
結果的にpi さんの今回の事例に使用しない場合でも近い将来、
piさんが開発者にとって便利なツールの作成する場合、何らかのきっかけになれば
投稿した意味はあります!!
|
|