こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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
・・・「ん」まで作成する。

この設定では、コマンドボタンのクリックで文字の追加はできますが、ボタンを押すと常に文字が一番後ろに追加されるため、
テキストボックスをクリックしても文章の途中に文字を挿入することが出来ません。
通常のキーボードの入力と同じようにテキストボックス内でクリックした箇所からコマンドボタンで入力を開始するような設定は可能でしょうか。
よろしくお願いします。

投稿日時 - 2007-12-16 15:49:51

QNo.3603123

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.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

前のよりは簡単かな。
がんばって解析してください。
今週は忙しいので、回答はこれきり。

投稿日時 - 2007-12-18 01:38:33

お礼

お忙しい中誠にありがとうございました。
おかげさまでかなり使えるマクロが出来ました。

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

投稿日時 - 2007-12-18 21:29:04

ANo.3

>常に文字が一番後ろに追加されるため、
普通はそれが望まれるとは思うが、
TextBox1.Value = TextBox1.Value & CommandButton1.Tag

TextBox1.Value = CommandButton1.Tag
で良いのかな。

質問文に仕組みは書いているが、したいことは、テキストボックスに1文字入力だけか、複数文字(例あんしん)列を入力したいのか書いてないのでは。

投稿日時 - 2007-12-16 20:19:10

ANo.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

投稿日時 - 2007-12-16 17:23:04

お礼

ありがとうございます!!出来ました!
非常に助かりました。

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

投稿日時 - 2007-12-16 19:38:19

ANo.1

参考になりますか?

参考URL:http://dobon.net/vb/dotnet/control/tbselectedtext.html

投稿日時 - 2007-12-16 16:13:43

お礼

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

投稿日時 - 2007-12-16 19:44:48

あなたにオススメの質問