• 締切済み

EXCEL VBAのユーザーフォーム上のテキストボックスの入力方法について

すいません教えていただきたいことがあります。 EXCEL VBAのユーザーフォームについて、 コマンドボタンにタグを設定して、これにキーボードと同じ機能を持たせて テキストボックス内に入力することは可能でしょうか。 例えばコマンドボタンを「あ」~「ん」まで作り、それぞれのボタンに「あ」~「ん」までのタグを設定する。 Private Sub UserForm_Initialize() CommandButton1.Tag = "あ" CommandButton2.Tag = "い" ・・・・「ん」までボタンを作成する。 次に、 Private Sub CommandButton1_Click() TextBox1.Value = TextBox1.Value & CommandButton1.Tag End Sub Private Sub CommandButton2_Click() TextBox1.Value = TextBox1.Value & CommandButton3.Tag End Sub ・・・「ん」まで作成する。 この設定では、コマンドボタンのクリックで文字の追加はできますが、ボタンを押すと常に文字が一番後ろに追加されるため、 テキストボックスをクリックしても文章の途中に文字を挿入することが出来ません。 通常のキーボードの入力と同じようにテキストボックス内でクリックした箇所からコマンドボタンで入力を開始するような設定は可能でしょうか。 よろしくお願いします。

みんなの回答

  • bonaron
  • ベストアンサー率64% (482/745)
回答No.4

あは、あっさりキブアップされちゃいましたね (笑 同じ機能のボタンはないので 別関数にせず、直接、イベントプロシージャに記述しました。 'BS ボタン Private Sub CommandBS_Click()   Dim pos As Integer   With Me.TextBox1     pos = .SelStart     If pos > 0 Then       .Text = Left(.Text, pos - 1) & Mid(.Text, pos + 1)       .SelStart = pos - 1     End If   End With End Sub '←ボタン Private Sub CommandLeft_Click()   With Me.TextBox1     If .SelStart > 0 Then       .SelStart = .SelStart - 1     End If   End With End Sub '→ボタン Private Sub CommandRight_Click()   With Me.TextBox1     If .SelStart < Len(.Text) Then       .SelStart = .SelStart + 1     End If   End With End Sub 前のよりは簡単かな。 がんばって解析してください。 今週は忙しいので、回答はこれきり。

takohasisa
質問者

お礼

お忙しい中誠にありがとうございました。 おかげさまでかなり使えるマクロが出来ました。 最初に教えていただいたのと併せた4つの関数を比較してやっと構造がわかりました。 自分でも一応色々と調べたのですがまったくイメージできませんでした(笑) 技術がないとどうにも限界があります。 まだまだわからないことが沢山ありますので、よろしければまたご教示ください。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

>常に文字が一番後ろに追加されるため、 普通はそれが望まれるとは思うが、 TextBox1.Value = TextBox1.Value & CommandButton1.Tag を TextBox1.Value = CommandButton1.Tag で良いのかな。 質問文に仕組みは書いているが、したいことは、テキストボックスに1文字入力だけか、複数文字(例あんしん)列を入力したいのか書いてないのでは。

  • bonaron
  • ベストアンサー率64% (482/745)
回答No.2

こんなもんですかね? BSキーやカーソル移動キーについては別途、関数を作ってください。 Private Sub AddText()   Dim pos As Integer   With Me.TextBox1     pos = .SelStart     .Text = Left(.Text, pos) & Me.ActiveControl.Tag & Mid(.Text, pos + 1)     .SelStart = pos + 1   End With End Sub Private Sub CommandButton1_Click()   AddText End Sub Private Sub CommandButton2_Click()   AddText End Sub

takohasisa
質問者

お礼

ありがとうございます!!出来ました! 非常に助かりました。 .Text = Left(.Text, pos) & Me.ActiveControl.Tag & Mid(.Text, pos + 1) この行が自分には高度過ぎていくら調べても解読できないので、 BSキーやカーソルキーの関数が皆目検討がつきません。 お暇なときで結構ですので、教えていただくことは可能でしょうか。 よろしくお願いします。

  • pbforce
  • ベストアンサー率22% (379/1719)
回答No.1

参考になりますか?

参考URL:
http://dobon.net/vb/dotnet/control/tbselectedtext.html
takohasisa
質問者

お礼

ありがとうございます。 SelectionStartというのがまだ理解できていないのですが 移植してちょっと試してみます。