2016-04-13 77 views
0

最後の30分でVBAで文字列をコマンドとして実行しようとしています。コマンドは、このようなもので、それは大丈夫実行します:だけでなく、「chb_g_ba2」、「chb_g_ba3」などがあるのでVBA - Excelで文字列をコマンドとして実行

activesheet.chb_g_ba1.visible = true 

私は何をしようとしていますが、変数として「chb_g_ba1」を設定することです。

私がこれまで試してみました何 - のようなもの:

dim l_counter as long: l_counter = 1 
Evaluate (CStr("me.chb_g_ba" & l_counter & ".visible = true")) 

あるいは評価

Eval (CStr("me.chb_g_ba" & l_counter & ".visible = true")) 

評価は、MS AccessのVBAでの関数であるが、明らかにそれは、Excelに存在しません。かなり私の質問は、この1つに非常に似ています:VBA how to run a string as a line of codeが、それはExcel用であり、Access用ではありません。

だから、どんなアイデアも歓迎されます! :)

+2

ことは、シート、使用上のコントロールだと仮定すると:。 'activesheet.oleobjects( "chb_g_ba1")は、実際の書き込み以外の目に見える= true'を – Rory

+1

いいえ、コードをモジュールに追加します。 – Rory

+0

よろしくお願いいたします。私はちょうどそれを確認するために私の答えを削除しました。しかし、それは本当に機能します。質問は - 「Eval()のようにすることは可能ですか」 – Vityata

答えて

1

クレジットピアソンへのソフトウェアのコンサルティング

それを行う方法があるが、我々が完成しつつ、必要なコードで動的に新しいモジュールを追加し、削除する必要があります。

参考:Microsoft Visual Basicのアプリケーション拡張のための5.3

Sub test() 
    Set VBComp = ThisWorkbook.VBProject.VBComponents.Add(vbext_ct_StdModule) 
    VBComp.Name = "NewModule" 
    Set VBCodeMod = ThisWorkbook.VBProject.VBComponents("NewModule").CodeModule 
    Dim l_counter As Long 
    l_counter = 1 
    With VBCodeMod 
     LineNum = .CountOfLines + 1 
     .InsertLines LineNum, _ 
     "Sub MyNewProcedure()" & Chr(13) & "UserForm1.chb_g_ba" & l_counter & ".Visible = True" & Chr(13) & "End Sub" 
    End With 
    'run the new module 
    Application.Run "MyNewProcedure" 
    UserForm1.Show 
    'Delete the created module 
    ThisWorkbook.VBProject.VBComponents.Remove VBComp 
End Sub 
+1

また、デフォルトでは設定されていないvbプロジェクトへの信頼できるアクセスが必要です。 – Rory

+0

ありがとう、Karthick。しかし、それは過度のように見えます。私はちょうど10行のコードを書くことを排除したかったのです。 – Vityata

+1

あなたはchr(13) –

関連する問題