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

解決済みの質問

EXCEL VBAのユーザーフォームのコマンドボタンでBSキーと同様の役割を持たせる方法について

すいません、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

投稿日時 - 2008-08-02 14:15:51

QNo.4222401

困ってます

質問者が選んだベストアンサー

こんばんは。

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

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

Private Sub CommandButton1_Click()
  TextBox1.SetFocus
  SendKeys "{BS}"
End Sub

投稿日時 - 2008-08-02 23:59:28

お礼

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

投稿日時 - 2008-08-03 08:06:46

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

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

回答(4)

ANo.3

追記の追記。

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

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

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

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

投稿日時 - 2008-08-02 15:17:20

お礼

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

投稿日時 - 2008-08-03 08:10:23

ANo.2

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

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

投稿日時 - 2008-08-02 15:07:31

ANo.1

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

投稿日時 - 2008-08-02 15:03:16

あなたにオススメの質問