アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

A 回答 (7件)

こんばんは。

Wendy02です。

>ユーザーには「Cntl+C」と「Cntl+V」で対応させるようにします。

とても残念な対応ですが、それがベストだと思います。私が書いた方法は、Excelでは上級レベルのテクニックです。お話の様子では、たぶん、基本的なコードの貼り付け位置が違っているような気がします。

こちらは、新規ブックで試してみましたので、間違いはないはずですが、こちらは、分っている部分でも、何か指摘し忘れている部分があるのかもしれません。

一度、Class 内モジュール・ペインの横の枠をクリックして、いくつかにブレークポイントをつけて、きちんと設定しているか、様子をみていただければと、もしかしたら分るかもしれません。ひとつずつ丁寧にみれば、どこかで抜け落ちが分るはずですが、ある程度のレベルが必要になってしまいますので、私のほうも、これ以上はなんともいいようがありません。
    • good
    • 0
この回答へのお礼

色々有難うございました。
とりあえず、「Cntl+C」と「Cntl+V」でVer1.0として共用開始します。

その上で、Ver1.1なり、Ver2.0にすべく勉強します。
またその時点で分からない事が出てきたら質問させて頂きますのでその節は、何卒宜しくお願い致します。
本当に有難うございました。

お礼日時:2006/03/05 22:12

こんにちは。

Wendy02です。

すみません、貼り付けるコードがひとつ抜けていました。

#'<UserForm モジュール>
Dim myClass1() As New Class1 'モジュールの一番上に貼り付けます。

>標準モジュールシートに、そのまま記述していいのでしょうか。
>Subなどの記述はいらないのでしょうか。

Class モジュールでは、値が保存出来ないので、標準モジュールに、セットしたわけですね。

それで、様子をみてください。でも、右クリックも数がたくさんあると、ちょっとシンドイですね。
    • good
    • 0
この回答へのお礼

何度も申し訳ありません。
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」で対応させるようにします。

色々お手数をお掛けしてすいませんでした。
有難うございました。

お礼日時:2006/03/05 20:39

こんにちは。


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
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/03/05 14:35

こんばんは。



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


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
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/03/05 10:02

専門的は話になるのですが


ユーザーフォームはマクロで組むで作ります。ユーザーフォームであたの望んでいるマウスでのコピー&ペーストは、
イベントプロシージャーという物を作成しないといけないようです。

ユーザーフォームではマウスでのコピー&ペーストは基本的には無理だと思います。

やはりショートカットキーの、Ctrl+CでコピーCtrl+Vで貼り付けるのが一番簡単です。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/03/05 09:56

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

この回答への補足

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

補足日時:2006/03/04 23:51
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/03/05 09:54

Officeが解りませんが私はExcel2003です


新規ワークシートを開いて、ウインドウメニューから整列、並べて表示にしてテキストボックスをCtrl+ドラッグ&ドロップでコピーできます。
そういう事じゃなかったらごめんなさい
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/03/05 09:50

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています