- ベストアンサー
VBA
いつもお世話になります。 VBAを走らせると、違うVBAの中味を(プログラムを)変更させる事は可能でしょうか? 可能であればやり方を教えてください。宜しくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
#4に関連して Sub test01() Dim s() ReDim s(4) For i = 0 To UBound(s) s(i) = Chr(65 + i) MsgBox s(i) Next i ReDim s(6) For i = 0 To UBound(s) + 1 s(i) = Chr(97 + i) MsgBox s(i) Next i End Sub は参考になりませんか。 ただし、後半はs(7)でエラーになりますが、s(6)までしか設定できてないことを確認するため、わざと UBound(s) + 1にしています。Dim s(a)の定義は出来ないようです。
その他の回答 (4)
- imogasi
- ベストアンサー率27% (4737/17069)
技術的興味は湧いてくるでしょうが、そこへ行く前に、 引数を渡して、通るモジュールを制御するとか、今来て 走っているルーチン(プログラムステップ)で何かをみて 処理を変える、(場合によってはアッセンブラなどなら自分自身(自分の領分内)を変えるとかする)ことかと思います。関数のオーバーライドなんてのも、言語によっては考えにあるようですが、処理系の仕組みが整ってないと、危険ではないでしょうか。 基本的に他のプログラムを変える方法は可能としても 可読性などがなくなり、禁じ手かとおもいますが。
お礼
お礼が遅くなりすいません。 imogasiさんいつも有難うございます。 やりたかったことは Dim n(10)の10を変数にしたかったのですが、そのまま Dim n(a)としてもできませんでしたので・・・ プログラムを書き換える事ができればと思いました。 宜しくお願いします。
- FlossenEngel
- ベストアンサー率77% (132/170)
具体的にどういうケースを想定しているのか全く不明なので「一応」可能です。 例えばExcelで参照設定にて「Microsoft Visual Basic for Applications Extensibility」にチェックを入れ、次のようなコードを作成します。 Sub test() Dim NewModule As VBComponent Dim NewProc As String Set NewModule = ThisWorkbook.VBProject.VBComponents.Add(vbext_ct_StdModule) NewProc = "sub newTest()" & vbCrLf _ & "MsgBox ""New""" & vbCrLf _ & "end sub" NewModule.CodeModule.AddFromString NewProc End Sub これを実行すると新しい標準モジュールが追加されてnewTestというSubが追加され、その場で実行もできます。 他にどういうことができるかはオブジェクトブラウザでVBIDEを眺めてヘルプを参照して下さい。
お礼
お礼が遅くなりすいません。 回答有難うございます。 >具体的にどういうケースを想定しているのか全く不明なので やりたかったことは Dim n(10)の10を変数にしたかったのですが、そのまま Dim n(a)としてもできませんでしたので・・・ プログラムを書き換える事ができればと思いました。 せっかく回答して頂いきましたコードは、何を如何すればいいか、さっぱりです。 宜しくお願いします。
- TTak
- ベストアンサー率52% (206/389)
VBAマクロを走らせてVBAを書き換えることはできます。例えばEXCELのVBAを使って、次の操作ができます。 新規ファイルを作り、そのファイルにコーディングすることなどです。 ただ、このコーディングはマクロウイルスを作る技術と同じなので、いくつかのキーワード、メソッド類はヘルプを引いても出てこないようです。VBAについてもう少し専門的なことを扱うサイトで質問してみることをおすすめします。
補足
回答有難うございます。 エクセルのVBAです。 >VBAについてもう少し専門的なことを扱うサイトで質問してみることをおすすめします。 ってどこですか?
- PAPA0427
- ベストアンサー率22% (559/2488)
できません。 一旦コンパイルしてから動作してますので、ソースのみを変更したとしても実行中は反映されません。 また変更する方法も提供されていません。
お礼
早速の回答有難うございます。 できないんですか。残念です。
お礼
お礼、遅くなりました。 いつも有難うございます。 大変参考になりました。 Dim s() ReDim s(i) にすると変数の個数を変数で決める事ができました。(^^) 有難うございました。 また宜しくお願いします。