プロが教えるわが家の防犯対策術!

すいません、EXCEL VBAで教えていただきたいことがあります。
EXCEL VBAでユーザーフォームを作る。
フォーム内にはTextBox1とCommandButton1を設置。
TextBox1に書き込んだ文字をドラッグ
→CommandButton1を押す
→ドラッグした文字を消去
という機能をコマンドボタンに持たせたいのですが
可能でしょうか。

下記のコードを作ってみたのですが、やはりこれだと一文字づつしか消せません。
よろしくお願いします。

Private Sub CommandButton1_Click()
Dim i As Integer
With Me.TextBox1
i = .SelStart
If i > 0 Then
.Text = Left(.Text, i - 1) & Mid(.Text, i + 1)
.SelStart = i - 1
End If
End With
TextBox1.SetFocus
End Sub

A 回答 (4件)

こんばんは。



> BSキーと同様の役割を持たせる方法

そのままんま、SendKeys でキー送信してみては? キー送信時の
フォーカスは事前に設定しておきます。

Private Sub CommandButton1_Click()
  TextBox1.SetFocus
  SendKeys "{BS}"
End Sub
    • good
    • 0
この回答へのお礼

こんな簡単な方法があったとは!
恥ずかしながらこのやり方は知りませんでした。
やりたかったことが全部解決です!
どうもありがとうございました。

お礼日時:2008/08/03 08:06

追記の追記。



SelStartプロパティやSelLengthプロパティを操作して、テキストボックス内の文字を操作する場合は、Textプロパティを操作せず、SelTextプロパティを使います。

何故なら、Textプロパティを操作すると、カーソル位置(SelStartプロパティやSelLengthプロパティ)の値が初期化されてしまう(カーソルが有無を言わさず先頭に飛んでしまう)からです。

Textプロパティを操作せず、SelTextプロパティを操作すれば、カーソル位置は変化しません。

なお、SelTextプロパティに空じゃない文字列(""じゃない文字列)を与えれば、範囲選択した部分を置換したり、カーソル位置に文字列を挿入出来ます。
    • good
    • 0
この回答へのお礼

できました!ありがとうございます。
SelTextを使うというやり方を知らなかったので、
非常に勉強になりました。
またよろしくお願いいたします。

お礼日時:2008/08/03 08:10

追記。


  If .SelStart = 0 Then 'カーソルが先頭にあるなら
    Exit Sub '何もしない
この2行の間に、1行追加して、以下のように修正して下さい。
  If .SelStart = 0 Then 'カーソルが先頭にあるなら
    .SetFocus 'フォーカスだけ戻して  ←この1行を追加
    Exit Sub '何もしない

カーソルが先頭に居て範囲指定が無かった場合、フォーカスが戻ってませんでした。
    • good
    • 0

BSキーの動作は、以下のようになります。


・範囲指定が行われていない場合、カーソルが先頭にある場合は何もしない。
・範囲指定が行われていない場合、カーソルが先頭にない場合は、カーソルの1文字手前が消える。
・範囲指定が行われている場合、範囲指定部分が消える。

これをVBで書くと以下のようになります。

Private Sub CommandButton1_Click()
With Me.TextBox1
If .SelLength = 0 Then '範囲指定がされてない場合
  If .SelStart = 0 Then 'カーソルが先頭にあるなら
    Exit Sub '何もしない
  End If
  .SelStart = .SelStart - 1 'カーソルを1文字分、左へ動かし
  .SelLength = 1 '1文字分、範囲指定する
End If
.SelText = "" '範囲指定されている部分を消去する
.SetFocus 'フォーカスを戻す
End With
End Sub
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!