- ベストアンサー
ユーザーフォーム上に表示されているテキストブックのテキストを右クリックでコピー&ペーストする方法
エクセルに関する質問をさせて頂きます。 エクセルのユーザーフォーム上に表示されているテキストボックスのテキストを、マウスの右クリックでコピー、別のテキストボックスにペーストしたく考えています。 色々調べて見たんですが、方法が見つかりません。 どなたかご存知の方がおられましたらご教授頂きたくお願い致します。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。Wendy02です。 >ユーザーには「Cntl+C」と「Cntl+V」で対応させるようにします。 とても残念な対応ですが、それがベストだと思います。私が書いた方法は、Excelでは上級レベルのテクニックです。お話の様子では、たぶん、基本的なコードの貼り付け位置が違っているような気がします。 こちらは、新規ブックで試してみましたので、間違いはないはずですが、こちらは、分っている部分でも、何か指摘し忘れている部分があるのかもしれません。 一度、Class 内モジュール・ペインの横の枠をクリックして、いくつかにブレークポイントをつけて、きちんと設定しているか、様子をみていただければと、もしかしたら分るかもしれません。ひとつずつ丁寧にみれば、どこかで抜け落ちが分るはずですが、ある程度のレベルが必要になってしまいますので、私のほうも、これ以上はなんともいいようがありません。
その他の回答 (6)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。Wendy02です。 すみません、貼り付けるコードがひとつ抜けていました。 #'<UserForm モジュール> Dim myClass1() As New Class1 'モジュールの一番上に貼り付けます。 >標準モジュールシートに、そのまま記述していいのでしょうか。 >Subなどの記述はいらないのでしょうか。 Class モジュールでは、値が保存出来ないので、標準モジュールに、セットしたわけですね。 それで、様子をみてください。でも、右クリックも数がたくさんあると、ちょっとシンドイですね。
お礼
何度も申し訳ありません。 UserForm モジュールの先頭行に Dim myClass1() As New Class1 を貼り付けてみましたが、うまく動きません。 テキストボックスに入力したテキストを選択して、右クリックしても何の変化もありません。 さらに別のテキストボックスにカーソルを移動して、右クリックしても変化がありません。 ちなみに「Ctrl+V」で貼り付けてみたら Dim myClass1() As New Class1 と貼り付きます。 テキストボックスはユーザーフォーム上に設置したマルチページに配置しているので、Private Sub MultiPage1_Initialize()でも試してみましたがダメでした。 (もちろん、Private Sub UserForm_Initialize()に貼り付けてもみました。) 完成までにあまり時間がありませんのでユーザーには「Cntl+C」と「Cntl+V」で対応させるようにします。 色々お手数をお掛けしてすいませんでした。 有難うございました。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 Wendy02です。 >ただ、なんせテキストボックスは100以上もあり、どのテキストボックスのデーターを、 最初に、それを言っていただいたほうが良かったですね。私の読みが足らなかったせいなのですが、2つあるのと100あるのではコードは変ります。 基本的には、同じなのですが、以下のようなコードになります。ひじょうに、ややこしいです。たぶん、良いとは思っていますが、ちょっと自信がありません。このコードで全てのテキストボックスに設定できるはずです。 ただし、自分のテキストボックスに貼り付けることは出来ませんし、一度貼り付けると、そのデータは失われます。 '<UserForm モジュール> Private Sub UserForm_Initialize() Dim myTxtBoxes As New Collection Dim ctrl As Variant Dim i As Integer ReDim myClass1(1 To 1) With myTxtBoxes For Each ctrl In Me.Controls If TypeOf ctrl Is MSForms.TextBox Then .Add ctrl End If Next ctrl End With ReDim Preserve myClass1(1 To myTxtBoxes.Count) For i = 1 To myTxtBoxes.Count Set myClass1(i) = New Class1 With myClass1(i) .Box = myTxtBoxes(i) .Index = i End With Next End Sub '<標準モジュール> Public oldIndex As Integer Public myData As Variant '<Class モジュール- Class1> Private WithEvents myTxtBox As MSForms.TextBox Private myIndex As Integer Public Property Get TxtBox() As MSForms.TextBox Set TxtBox = myTxtBox End Property Public Property Let Box(ByVal BoxNewValue As MSForms.TextBox) Set myTxtBox = BoxNewValue End Property Public Property Get Index() As Integer Index = myIndex End Property Public Property Let Index(ByVal intNewValue As Integer) myIndex = intNewValue End Property Private Sub myTxtBox_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) If Button <> 2 Then Exit Sub If oldIndex = 0 Then If myTxtBox = "" Then Exit Sub myData = Empty Set myData = New DataObject myData.SetText myTxtBox.Text myData.PutInClipboard oldIndex = myIndex ElseIf oldIndex <> myIndex Then myTxtBox.Paste oldIndex = 0 End If End Sub
お礼
わざわざ再度の回答有難うございます。 回答頂いたモジュールを貼り付けて見ました。 結果は、、、動きませんでした。。。 回答内容の <標準モジュール> Public oldIndex As Integer Public myData As Variant についてですが、標準モジュールシートに、そのまま記述していいのでしょうか。 Subなどの記述はいらないのでしょうか。 そんなに詳しくないもので申し訳ありません。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 ユーザーフォーム自身にクリップボードをもっていますが、クリップボードを使わずに、以下のように、右クリックして、ダイレクトに別のテキストボックスに送ってしまえば簡単ではないでしょうか? Private Sub TextBox1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) If TextBox1.Text <> "" Then If Button = 2 Then TextBox2.Text = TextBox1.Text End If End If End Sub >「マウスの右クリック」でコピーし、マウスの右クリックでペーストしたいんです。 もし、これをするなら、以下のように、一旦、クリップボードに確保しなければなりませんね。お好きなほうをお使いください。 '-------------------------------------------- Private Sub TextBox1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) Set MyData = New DataObject If TextBox1.Text <> "" Then If Button = 2 Then MyData.SetText TextBox1.Text MyData.PutInClipboard End If End If End Sub Private Sub TextBox2_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) If Button = 2 Then TextBox2.Paste End If End Sub
お礼
回答有難うございます。 是非一度試して見たいと思います。 ただ、なんせテキストボックスは100以上もあり、 どのテキストボックスのデーターを、どこに持っていくのかはユーザー任せになってしまうのです。 まだまだ悩むことは多くありそうですが、もう一分張りしてみます。 有難うございました。
- subaru130
- ベストアンサー率20% (66/326)
専門的は話になるのですが ユーザーフォームはマクロで組むで作ります。ユーザーフォームであたの望んでいるマウスでのコピー&ペーストは、 イベントプロシージャーという物を作成しないといけないようです。 ユーザーフォームではマウスでのコピー&ペーストは基本的には無理だと思います。 やはりショートカットキーの、Ctrl+CでコピーCtrl+Vで貼り付けるのが一番簡単です。
お礼
回答有難うございます。 おっしゃる通り、かなり難しいと言うのは詳しい知人も言っていました。 もう少しじっくり検討してみます。有難うございました。
- keirika
- ベストアンサー率42% (279/658)
文字列をドラッグで選択した後、Ctrl+CでコピーCtrl+Vで貼り付けではだめでしょうか
お礼
回答有難うございました。 補足に書きました通り、マウスの右クリックで行いたいと考えています。 ショートカットキーで行う事に耐えられない使用者となる予定なもんで。。。 もう少しじっくり検討してみます。
補足
回答有難うございます。 質問内容を補足させて頂きます。 バージョンは「EXCEL2000」です。 また、質問したい内容は、ユーザーフォーム上のテキストボックスの内容を、「マウスの右クリック」でコピーし、マウスの右クリックでペーストしたいんです。 言葉足らずで大変申し訳ありません。 何卒宜しくお願いします。
- dream19
- ベストアンサー率15% (14/92)
Officeが解りませんが私はExcel2003です 新規ワークシートを開いて、ウインドウメニューから整列、並べて表示にしてテキストボックスをCtrl+ドラッグ&ドロップでコピーできます。 そういう事じゃなかったらごめんなさい
お礼
回答有難うございました。補足に書かせて頂いた内容がしたかったのです。 質問内容の記載がちょっと分かりにくくて申し訳ありませんでした。
お礼
色々有難うございました。 とりあえず、「Cntl+C」と「Cntl+V」でVer1.0として共用開始します。 その上で、Ver1.1なり、Ver2.0にすべく勉強します。 またその時点で分からない事が出てきたら質問させて頂きますのでその節は、何卒宜しくお願い致します。 本当に有難うございました。