• ベストアンサー

ユーザーフォーム上に表示されているテキストブックのテキストを右クリックでコピー&ペーストする方法

エクセルに関する質問をさせて頂きます。 エクセルのユーザーフォーム上に表示されているテキストボックスのテキストを、マウスの右クリックでコピー、別のテキストボックスにペーストしたく考えています。 色々調べて見たんですが、方法が見つかりません。 どなたかご存知の方がおられましたらご教授頂きたくお願い致します。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.7

こんばんは。Wendy02です。 >ユーザーには「Cntl+C」と「Cntl+V」で対応させるようにします。 とても残念な対応ですが、それがベストだと思います。私が書いた方法は、Excelでは上級レベルのテクニックです。お話の様子では、たぶん、基本的なコードの貼り付け位置が違っているような気がします。 こちらは、新規ブックで試してみましたので、間違いはないはずですが、こちらは、分っている部分でも、何か指摘し忘れている部分があるのかもしれません。 一度、Class 内モジュール・ペインの横の枠をクリックして、いくつかにブレークポイントをつけて、きちんと設定しているか、様子をみていただければと、もしかしたら分るかもしれません。ひとつずつ丁寧にみれば、どこかで抜け落ちが分るはずですが、ある程度のレベルが必要になってしまいますので、私のほうも、これ以上はなんともいいようがありません。

shiga-hiro
質問者

お礼

色々有難うございました。 とりあえず、「Cntl+C」と「Cntl+V」でVer1.0として共用開始します。 その上で、Ver1.1なり、Ver2.0にすべく勉強します。 またその時点で分からない事が出てきたら質問させて頂きますのでその節は、何卒宜しくお願い致します。 本当に有難うございました。

その他の回答 (6)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.6

こんにちは。Wendy02です。 すみません、貼り付けるコードがひとつ抜けていました。 #'<UserForm モジュール> Dim myClass1() As New Class1 'モジュールの一番上に貼り付けます。 >標準モジュールシートに、そのまま記述していいのでしょうか。 >Subなどの記述はいらないのでしょうか。 Class モジュールでは、値が保存出来ないので、標準モジュールに、セットしたわけですね。 それで、様子をみてください。でも、右クリックも数がたくさんあると、ちょっとシンドイですね。

shiga-hiro
質問者

お礼

何度も申し訳ありません。 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)
回答No.5

こんにちは。 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

shiga-hiro
質問者

お礼

わざわざ再度の回答有難うございます。 回答頂いたモジュールを貼り付けて見ました。 結果は、、、動きませんでした。。。 回答内容の <標準モジュール> Public oldIndex As Integer Public myData As Variant についてですが、標準モジュールシートに、そのまま記述していいのでしょうか。 Subなどの記述はいらないのでしょうか。 そんなに詳しくないもので申し訳ありません。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんばんは。 ユーザーフォーム自身にクリップボードをもっていますが、クリップボードを使わずに、以下のように、右クリックして、ダイレクトに別のテキストボックスに送ってしまえば簡単ではないでしょうか? 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

shiga-hiro
質問者

お礼

回答有難うございます。 是非一度試して見たいと思います。 ただ、なんせテキストボックスは100以上もあり、 どのテキストボックスのデーターを、どこに持っていくのかはユーザー任せになってしまうのです。 まだまだ悩むことは多くありそうですが、もう一分張りしてみます。 有難うございました。

  • subaru130
  • ベストアンサー率20% (66/326)
回答No.3

専門的は話になるのですが ユーザーフォームはマクロで組むで作ります。ユーザーフォームであたの望んでいるマウスでのコピー&ペーストは、 イベントプロシージャーという物を作成しないといけないようです。 ユーザーフォームではマウスでのコピー&ペーストは基本的には無理だと思います。 やはりショートカットキーの、Ctrl+CでコピーCtrl+Vで貼り付けるのが一番簡単です。

shiga-hiro
質問者

お礼

回答有難うございます。 おっしゃる通り、かなり難しいと言うのは詳しい知人も言っていました。 もう少しじっくり検討してみます。有難うございました。

  • keirika
  • ベストアンサー率42% (279/658)
回答No.2

文字列をドラッグで選択した後、Ctrl+CでコピーCtrl+Vで貼り付けではだめでしょうか

shiga-hiro
質問者

お礼

回答有難うございました。 補足に書きました通り、マウスの右クリックで行いたいと考えています。 ショートカットキーで行う事に耐えられない使用者となる予定なもんで。。。 もう少しじっくり検討してみます。

shiga-hiro
質問者

補足

回答有難うございます。 質問内容を補足させて頂きます。 バージョンは「EXCEL2000」です。 また、質問したい内容は、ユーザーフォーム上のテキストボックスの内容を、「マウスの右クリック」でコピーし、マウスの右クリックでペーストしたいんです。 言葉足らずで大変申し訳ありません。 何卒宜しくお願いします。

  • dream19
  • ベストアンサー率15% (14/92)
回答No.1

Officeが解りませんが私はExcel2003です 新規ワークシートを開いて、ウインドウメニューから整列、並べて表示にしてテキストボックスをCtrl+ドラッグ&ドロップでコピーできます。 そういう事じゃなかったらごめんなさい

shiga-hiro
質問者

お礼

回答有難うございました。補足に書かせて頂いた内容がしたかったのです。 質問内容の記載がちょっと分かりにくくて申し訳ありませんでした。

関連するQ&A