- ベストアンサー
アクセスのボックスの名前の取得方法
- マイクロソフトアクセスのフォームに複数のボックスを設置し、ボックスをクリックするとマクロが走る仕組みです。ボックスの名前を取得する方法が分からず、他の良い方法があれば教えてほしいとのことです。
- ボックスの名前をA1、A2などとして、VBA上で取得して値によって分岐させる方法も考えられますが、ボックスの名前の取得方法がわかりません。
- マイクロソフトアクセスのボックスの名前を取得する方法について教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
コードをコピペするときにイベントごとに一部(Aや1など)書き替えなくていいようにしたいという事ですね。 ActiveControl.Nameでクリックされたコントロール名が取得できます。 ただ、実行したいプロシージャが変わった場合、コントロール名やプロシージャ名を変更しなければいけないので後が面倒な気もします。 あと、蛇足ではありますがアクセスの場合、マクロというとVBAと別のものの事なのかなと考えてしまいます。 Private Sub A1_Click() Dim CtrName As String CtrName = ActiveControl.Name Call myCode(CtrName) End Sub Private Sub B2_Click() Dim CtrName As String CtrName = ActiveControl.Name Call myCode(CtrName) End Sub Function myCode(ByVal CtrName As String) Dim str As String, n As Long str = Left(CtrName, 1) n = CLng(Right(CtrName, 1)) Select Case str Case "A" Call マクロA Case "B" Call マクロB Case Else Call マクロC End Select Select Case n Case 1 Call マクロ1 Case 2 Call マクロ2 Case Else Call マクロ3 End Select End Function
その他の回答 (1)
- kkkkkm
- ベストアンサー率66% (1719/2589)
ボックスとボタンとがあってどちらもクリックしたらマクロなのですか? > マス(ボタン)がものすごくあり、一つ一つにマクロを入れるだけでも、複数行になってしまいます。 ボタンをクリックしたら何かをするのでしたら、全てのボタンのクリックイベントは作成しなければいけません。 (クラスを使って動的にイベントプロシージャを作成という手もありますが、現状では無理だと思います) ボタンごとに動作が同じなら(ほぼ同じなどでも場合によっては可能)イベントプロシージャ(VBA)にして Private Sub ボタン1_Click() Call myCode("ボタン1") End Sub Private Sub ボタン2_Click() Call myCode("ボタン2") End Sub Function myCode(ByVal myName As String) MsgBox myName 'クリックしたボタンの名前がメッセージボックスででる 'など共通でやりたいことのコード End Function とでもしておけば、やりたいことのコードは一か所に記載するだけですみます。 > 単にボックの名前をA1,A2等にして、VBA上で取得してその値によって分岐させるだけでも良いのですが どのタイミングで取得するのでしょう?VBAは何から起動するのでしょう?やりたいことがいまいち想像できません。 ボックス1のクリックイベントのプロシージャでしたら Private Sub ボックス1_Click() End Sub になりますから名前はこの時点でわかります。
補足
困っていたので、回答が来て本当に感謝します。 すみません、私の書き方が分かりにくかったです。 >どのタイミングで取得するのでしょう?VBAは何から起動するのでしょう?やりたいことがいまいち想像できません。 A1 B1 C1… A2 B2 C2… A3 B3 C3… … 上記の様に(上記は9個のボックス)があり、各ボックスをクリックすると、マクロが走る様にします。もちろん全てにクリックイベントのプロシージャは書くつもりです。 イメージとしては、 Private Sub A1_Click() Dim str As String Dim n As Long (自分のボックス名を取得) str=(自分のボックス名の右から1文字取得) n=(自分のボックス名の左から1文字取得) If str = "A" Then call マクロA ElseIf str = "B" Then call マクロB Else call マクロC End If If n = 1 Then call マクロ1 ElseIf n = 2 Then call マクロ2 Else call マクロ3 End If End Sub Sub マクロA() ………… End Sub ……… という風にしたいと思っております。 同様にB2をクリックした場合も Private Sub B2_Click() (上記コードをコピペ) End Sub で書いていきます。 どうぞよろしくお願いいたします。