- 締切済み
フォーム上でVBAの編集するには?
AccessのVBA内を編集したいのですが、VBAを直接開かないで行うことはできますでしょうか? フォーム上から、置き換えのような形にしたいです。 例)フォーム上で、aaa.txt ⇒ bbb.txt と入力すると、VBA内の該当文字が置き換えできる。 そして、○文字変更されました。とメッセージを表示したい。 VBAのコードを教えていただけたらありがたいです。 よろしくお願いいたします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- 30246kiku
- ベストアンサー率73% (370/504)
興味もあったので、さわりだけやってみました(Access2007にて) 結構面倒そうです。 標準モジュール「Module1」のコードは以下で取得することは出来ました。 Dim sBuf As String With Application.VBE.ActiveVBProject.VBComponents("Module1").CodeModule sBuf = .Lines(1, .CountOfLines) Debug.Print sBuf End With VBAをいじるのは、「CodeModule」に用意されたメソッドで行うようです。 VBEの方のヘルプで「CodeModule」を検索してみてください。 文字列「aaa.txt」が何個あるか求めるには、いろいろやり方あると思いますが、 その中の1つ Dim sAry() As String sAry = Split(sBuf,"aaa.txt") でやった後、UBound(sAry) の値が、何個あるかになると思います。 ただこれにも難点があって、 「myaaa.txt」があっても配列になりカウントされるので、 sAry の前の配列の最後の文字が、文字列としての区切り文字でない場合には カウントを引いてやる処理は必要と思います。 (必要なら配列の先頭文字も) (Len(sBuf) - Len(Replace(sBuf,"aaa.txt",""))) / Len("aaa.txt") でも何個?がわかると思いますが、前後の文字は何?を確認できない分しんどそう。 「CodeModule」のメソッドに「ReplaceLine」があり、多分これを使うのかと思います。 (他のメソッドが良いのかは?) sAry = Split(sBuf,vbCrLf) とすると sAry は行毎の配列になるので、 その行に「aaa.txt」があるかないか(InStr で検索?)して(前後文字確認)、 あったら「bbb.txt」に置き換えて、それをメソッドを使って実際に置き換え・・・ 置き換えた回数を随時カウント・・・ ってなことを繰り返すのでしょうか。(未検証) やりたいことは、こんな感じで組み立てていけばできそうな気がします。 が、そもそものVBA記述を考えられたら良さそうな気もします。 "aaa.txt" を直に記述するのではなく、 引数(パラメータ)にしてみたり、 フォーム上のテキストボックスを参照させてみたり・・・ 余計なお世話・・・ということで 参考にする/しない等々、自己責任にてお願いします。