[[20191210000515]] 『テキストボックスへコピペしたい。』(ユーザーフォーム初心者) ページの最後に飛ぶ

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

 

『テキストボックスへコピペしたい。』(ユーザーフォーム初心者)

ユーザーフォームでTextBox1を作成しています。
TextBox1へコピペしようとしたら入力できません。
何か設定方法があるのでしょうか?
宜しくお願い致します。

< 使用 Excel:Excel2013、使用 OS:Windows8 >


現在のコードを提示していただけますか?
当該のコピーペイストする箇所ですね。
(γ) 2019/12/10(火) 00:17

 横から失礼します。

 手動でコピペしてるのでしたら、
 TextBoxのEnabledがFalseになっている可能性があります。
(OK) 2019/12/10(火) 08:29

OKさん
TextBoxのEnabledはTrueです。
宜しくお願いします。
(ユーザーフォーム初心者) 2019/12/10(火) 19:10

TextBoxのLockedがTrueになっていませんか。

(jk) 2019/12/10(火) 23:25


「Ctrl」 + 「c」キー でコピー
「Ctrl」 + 「v」 キー で貼り付けが出来るのは確認しました。
TextBox上にマウス右クリックでコピー」&「貼り付け」を出来るようにしたいです。

(ユーザーフォーム初心者) 2019/12/11(水) 00:41


 >TextBox上にマウス右クリックでコピー」&「貼り付け」を出来るようにしたいです。 

 TextBox上にマウスカーソルがある状態?
 TextBoxにフォーカスがある状態?
(OK) 2019/12/11(水) 07:23

 TextBoxにフォーカスがなくても
 右クリックでTextBoxにフォーカスが当たりますね。
 失礼しました。
(OK) 2019/12/11(水) 07:26

 参考過去ログです。

[[20110830165404]] 『テキストボックスでの右クリック』(ぺんぺん)

 古い情報ですので、2013ではもっと簡単になってるかもしれませんが、
 調べてません。
(OK) 2019/12/11(水) 07:30

 MouseUpイベントを使用したコード紹介のHPです。
http://fanblogs.jp/vbahtmlmemo/archive/2/0

 手動でCtrl+Cをやるか、SendKeysでやるか、という
 違いですが。
(OK) 2019/12/11(水) 07:43

 記事中のコードを組み込んでテスト(Windows10 Excel2007)
 しましたが、右クリックでメニューは出てきますが、メニューを選択しても
 コピーとか貼り付けができてない
ですね。
 原因が分かったらレスします。
 ※いまからレスができなくなります。しかも今日は飲み会で夜もレス
 できません・・・。
(OK) 2019/12/11(水) 07:53

 メニュー実行しても、それぞれのメニューから
 OnActionで紐づけたコードが呼び出されてないようです。
(OK) 2019/12/11(水) 07:58

 私がばかでした。

 呼び出すコード
 R_Copy
 R_Paste
 R_Cut
 R_SelAl

 を標準モジュールに記述
 したらきちんと実行してくれました。
(OK) 2019/12/11(水) 09:24

標準コントロールが右クリックによるメニュー表示対応していないのだから、諦めるのが一番なのですが…。
無理矢理APIで実現してしまう例なぞ書いてみますね。
 Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As Long) As Long
 Private Declare Function CreatePopupMenu& Lib "user32" ()
 Private Declare Function TrackPopupMenu& Lib "user32" (ByVal hMenu&, ByVal wFlags&, ByVal X&, ByVal Y&, ByVal nReserved&, ByVal hwnd&, lpReserved As Any)
 Private Declare Function DestroyMenu& Lib "user32" (ByVal hMenu&)
 Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
 Private Declare Function AppendMenu& Lib "user32" Alias "AppendMenuA" (ByVal hMenu&, ByVal wFlags&, ByVal wIDNewItem&, ByVal lpNewItem As Any)

 Private Const MF_STRING = &H0&
 Private Const TPM_LEFTALIGN = &H0&
 Private Const TPM_RETURNCMD = &H100&

 Private Type POINTAPI
   X As Long
   Y As Long
 End Type

 Private Sub TextBox1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    Dim hMenu As Long
    Dim PT As POINTAPI
    Dim ret As Long

    If Button = 2 Then
        hMenu = CreatePopupMenu()
        AppendMenu hMenu, MF_STRING, 1&, "コピー"
        AppendMenu hMenu, MF_STRING, 2&, "貼り付け"
        AppendMenu hMenu, MF_STRING, 3&, "全てを選択"
        GetCursorPos PT
        ret = TrackPopupMenu(hMenu, TPM_LEFTALIGN Or TPM_RETURNCMD, PT.X - 8, PT.Y - 8, 0, Application.hwnd, 0&)
        DestroyMenu hMenu

        Select Case ret
        Case 1
            With CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
                .SetText TextBox1.SelText
                .PutInClipboard
            End With
        Case 2
            With CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
                .GetFromClipboard
                TextBox1.SelText = Replace(.GetText, """", "")
            End With
        Case 3
            With TextBox1
                .SelStart = 0
                .SelLength = Len(.Text)
            End With
        End Select
    End If
 End Sub

サンプルなので1つのテキストボックス用に書いていますが、複数あるのであれば、関数化するとか検討してみてください。
(???) 2019/12/11(水) 10:47


OKさん、???さん
思っていた通りの事が出来ました。
ありがとうございました。
(ユーザーフォーム初心者) 2019/12/11(水) 20:39

コメント返信:

[ 一覧(最新更新順) ]


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