[[20121124162818]] 『「あああ」という文字をコピーモードにするには』(初心者) ページの最後に飛ぶ

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

 

『「あああ」という文字をコピーモードにするには』(初心者)

 決まった文字(あああ)を右クリックで貼り付けをしたいのですが
 その前に「あああ」と文字をコピーモードというか、貼り付ける用意をするには
 どういうマクロをかけばいいでしょうか
 C1セルに「あああ」と書いてマクロの自動記録でコピー、C2に貼り付けをすると  
 下記にな ります

 Sub Macro3()
    Range("C1").Select
    Selection.Copy
    Range("C2").Select
    ActiveSheet.Paste
 End Sub
 マクロで「あああ」をコピーモードの場所へ書き込みして、貼り付けを
 手操作でしたいと思っています。


 > C1セルに「あああ」と書いてマクロの自動記録でコピー、C2に貼り付けをすると  
 > 下記にな ります

 コードの上では、「あああ」と書いていないですよ?

 こんなので試してみてください。

  Sub Macro3()
     Range("C1").Value = "あああ"
     Range("C1").Copy
     Range("C2").PasteSpecial xlPasteValues
  End Sub

 (半平太) 2012/11/24 18:33


 半平太さん
 ありがとうございました。
 C1セルに「あああ」と書いたあとの動作を自動記録しておりました。
 マクロのなかで「あああ」と書くこともできることわかりました。

 マクロを実行するとC1セルが点滅します。ESCキーをおすと
 消えます。

 今、勝手にに思ってイメージしているのは 「あああ」という
 文字はセルのどこかに書いてそれをコピー→貼り付けするのでは
 なく、C1に「あああ」と書いてコピーしたときにに格納される
 場所に直接設定することは出来ないかということでした。
 こんなことは出来ないのでしょうか?
 やはり一旦どこかのセルのコピー元の文字列を書き、それをコピー
 →貼り付けするしかないのでしょうか
 変な質問ですみません。
 わかれば教えてください。


 ここを参照して、一汗かいてみてください。
  ↓
 クリップボードを操作する(1)
http://officetanaka.net/excel/vba/tips/tips20.htm
 そこの「ダイレクトに格納/取得する」の項が参考になります。

 (半平太) 2012/11/24 19:14

 もう少し思考を柔軟にして、こんなことではダメなのでしょうか。
 Sub Sample()
     For Each r In Selection
         r.Value = Range("C1").Value
     Next
 End Sub
 (Mook)


 半平太さん、Mookさん。お二方ありがとうございます。
 むつかしそうですけどやってみます。
 結果をあとでお知らせします。
 ありがとうございました。(初心者)


 (初心者)です。
 報告です。
 Mookさんのマクロ C1セルに(あああ)を書いておき
 貼り付けたいセルを選択しておき、マクロを起動すると(あああ)が 
 貼り付きました。複数のセルを選択しておき、マクロを起動すると
 すべてのセルに「あああ」が貼り付きました。
 結果からですけど、マクロのやっていることイメージできました。
 ありがとうございました。

 半平太さんに紹介して頂いたWEB上のページをやってみました。

 Sub Sample2()
    Dim buf As String, buf2 As String, CB As New DataObject
    buf = "tanaka"
    With CB
        .SetText buf        ''変数のデータをDataObjectに格納する
        .PutInClipboard     ''DataObjectのデータをクリップボードに格納する
        .GetFromClipboard   ''クリップボードからDataObjectにデータを取得する
        buf2 = .GetText     ''DataObjectのデータを変数に取得する
    End With
    MsgBox buf2
 End Sub

 イメージですが
 tanaka という文字がbufというところに格納され
 メッセージボックスとして表示される
 ということでしょうか
 これでこのあと、貼り付けを実施するとtanakaという文字が
 貼り付くのでしょうか

 が、このマクロを起動するとエラーとなります。
  コンパイルエラー
 ユーザー定義型は定義されていません
 いうエラーがでます。
 , CB As New DataObjectのところがダメといっているように見えます。
 EXCELのバージョンとかが関係するのでしょうか。
 Excel2003  WindowsXPです。
 何かまったく勘違いをしているのでしょうか?
 (唯一無二)


こんばんは

Microsoft Forms 2.0 Object Library の参照設定が必要です。

一旦ユーザーフォームを作って解放するだけでもいいです。

(ウッシ)


 ウッシさん。ありがとうございます。
 半平太さんに教えて頂いたページのマクロだけを実行しました。
 マクロの上に下記のことが書いてありました。 
 CopyメソッドやPasteメソッドはセルが対象です。セルを使わずに、変数のデータをクリップボードに格納したり、クリップボードに格納されているデータを直接変数に入れるときにはDataObjectオブジェクトを使います。

 DataObjectオブジェクトはMSFormsのメンバです。使用するには、Microsoft Forms 2.0 Object Libraryを参照設定します。または、ブックにUserFormを挿入すると自動的に参照設定されます。

 次のサンプルは、変数bufの文字列「tanaka」をクリップボードに格納します。続いて、クリップボードのデータを変数buf2に取得します。

 使用するには、Microsoft Forms 2.0 Object Libraryを参照設定します
 または、ブックにUserFormを挿入すると自動的に参照設定されます。
 とあります。
 ウッシさんの
 Microsoft Forms 2.0 Object Library の参照設定が必要です。
 一旦ユーザーフォームを作って解放するだけでもいいです。
 の意味がまったくわかりません。
 よろしければ、具体的に何をどうすればヒントでも頂けないでしょうか
 よろしくお願いします 


 わたしは(唯一無二)さんではありません。どなたか書き込みをされていますか
 (初心者)


 ウッシさんのおしゃるとうり
 一旦ユーザーフォームを作って解放するだけでもいいです。 
 UserForm1.show でユーザーホームを一旦表示させ、Xで消してから
 Sub Sample2()
    Dim buf As String, buf2 As String, CB As New DataObject
    buf = "tanaka"
    With CB
        .SetText buf        ''変数のデータをDataObjectに格納する
        .PutInClipboard     ''DataObjectのデータをクリップボードに格納する
        .GetFromClipboard   ''クリップボードからDataObjectにデータを取得する
        buf2 = .GetText     ''DataObjectのデータを変数に取得する
    End With
    MsgBox buf2
 End Sub
 を実行しました
 メッセージボックスに tanaka と表示しました。 
 なぜだか全然わかりませんが、マクロは動きました
 その後、セルを選択して貼り付けをしたらそのセルに tanakaと
 入りました。
 内容の理解は難しくてあまりわかりませんが
 最初の希望「格納される 場所に直接設定」ができました。

 みなさん、ありがとうございました。
 (初心者)

 > わたしは(唯一無二)さんではありません。どなたか書き込みをされていますか
 > (初心者)

 唯一無二さんへ
  何の断りもなく、他人のトピックを横取りしないでください。マナー違反ですよ。

 (半平太) 2012/11/24 22:52

 半平太さん。再度の登場ありがとうございました。
 こういうWEB上のやりとりむつかしいですね。

 sub Sample21()

   UserForm1.show vbModeless
   Unload UserForm1

    Dim buf As String, buf2 As String, CB As New DataObject

    buf = "あああ"
    With CB
        .SetText buf        ''変数のデータをDataObjectに格納する
        .PutInClipboard     ''DataObjectのデータをクリップボードに格納する
        .GetFromClipboard   ''クリップボードからDataObjectにデータを取得する
        buf2 = .GetText     ''DataObjectのデータを変数に取得する
    End With
   ' MsgBox buf2
 End Sub
 これで最初の希望の格納される 場所に直接設定したい ができました。 
 できたような気がします。が
 必要なのですが、ユーザーホームを一旦、表示して消す作業がなんか変な感じです。
 ウッシさんに質問したほうがいいのかもわかりませんが「私の一汗」ではまったく
 わかりません。ユーザーホームを一旦表示して消す以外に何か方法があるでしょうか
 理由はユーザーホームの表示/非表示で画面がチカチカするからですが
 メカニズムがわからないで質問ばかりでもうしわけないのですが
 (初心者)


こんばんは

誰に回答しているのか気にしてなかったです。

ユーザーフォームは「解放」しちゃっていいのです。
プロジェクトエクスプローラーに表示されているUserForm1というのを右クリックして
「UserForm1の解放」をクリックして下さい。

ユーザーフォームを一旦作っただけで、Microsoft Forms 2.0 Object Library の参照設定が
設定されるので、その後はユーザーフォームは不要なんです。

()


 初心者さんは、今後の為に、純粋に「参照設定」とはどうする事なのか、
 覚える必要があります。

 参考サイト
  ↓
 VBEの使い方(参照設定)
http://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub04_040_04.html

 (半平太) 2012/11/24 23:38


 ウッシさん、ありがとうございます。
 半平太さんの紹介のWEBのページを見て、少しわかりました。
 Microsoft Forms 2.0 Object Library にレがユーザーホームをVBE画面で
 作成(実際のマクロを起動させてユーザーホームをシート上で表示させる
 必要はない)すればMicrosoft Forms 2.0 Object Library にレが入ってました。

 半平太さん。WEB上のページの場所の紹介ありがとうございました。
 どうするのかはわかりました。なぜそうなるのかはわかりません。
 今後わかるように勉強して行きます。
 ありがとうございました。(初心者)


 > .SetText buf        ''変数のデータをDataObjectに格納する
 > .PutInClipboard     ''DataObjectのデータをクリップボードに格納する
 > .GetFromClipboard   ''クリップボードからDataObjectにデータを取得する
 > buf2 = .GetText     ''DataObjectのデータを変数に取得する

 今回の目的は「クリップボードに直接書き込むこと」なので上2行で充分です。
 下2行は,「既にクリップボードにあるものを取り出す」処理なので、今回は必要ありません。

 (半平太) 2012/11/25 09:05

 半平太さん。確認が遅くなり申し訳けありませんでした。
 詳細な説明ありがとうございました。
 まだ使いこなすなんて出来ませんが、イメージはわかったような
 気がします。(初心者) 2012/11/26 20:00


コメント返信:

[ 一覧(最新更新順) ]


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