[[20180518200259]] 『数字以外の文字列をペースト不可とする』(エクセル勉強中) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『数字以外の文字列をペースト不可とする』(エクセル勉強中)

(1)と(2)で行っている事
易しく説明して頂けませんか

実行時エラーが出るので間違っている可能性です

Private Sub TextBox3_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)

 Dim Stri As String '変数の型を設定 
 With TextBox3
 Stri = .Text '?入力値を変数Striに設定
 If KeyCode = vbKeyV And Shift = 2 Then '?ctrl+Vの値をKeyCodeに設定
 .Paste'?
 KeyCode = 0'?…(1)
 If IsNumeric(.Text) = False Then'入力値が数字でない ならば
 .Text = Stri'?…(2)
 MsgBox "数字以外のデータの貼り付けを禁じる"
 Else
 .Text = StrConv(.Text, vbNarrow)'全角数字を半角に変換
 End If
 End With
End Sub

< 使用 Excel:Excel2007、使用 OS:Windows7 >


見づらいので、インデントを付けました。
コメントで解説をつけました。

Private Sub TextBox3_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)

    Dim Stri As String  'String型の変数を宣言
    With TextBox3
        Stri = .Text    'テキストボックスの入力値を変数Striに格納
        If KeyCode = vbKeyV And Shift = 2 Then 'ctrl+V キーが押されていたら
            .Paste    'クリップボードから貼り付け
            KeyCode = 0    'V キーが押されなかったことに(貼り付けを無効に)
            If IsNumeric(.Text) = False Then    '入力値が数字でない ならば
                .Text = Stri    'Striに格納していた値(貼り付け前の値)に戻す
                MsgBox "数字以外のデータの貼り付けを禁じる"
            Else
                .Text = StrConv(.Text, vbNarrow)    '全角数字を半角に変換
            End If
        End If
    End With
End Sub

(hatena) 2018/05/18(金) 21:30


 KeyCode = 0
 に関しては、hatenaさんのご回答の通り
 .Pasteによる貼り付けと[Ctrl+V]による貼り付けの重複を回避する為
 あるいは貼り付け後に「v」と入力されてしまうのを回避する為の対策
 ではなかろうかと思います。

 >実行時エラーが出る
  ↑こっちもちょっと気になりますね。
   当方では「コンパイルエラー」と出ました。End Ifが1つ足りないから。

(白茶) 2018/05/18(金) 21:49


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.