[[20121222111741]] 『コピー選択の解除方法について』(You∞uoY) ページの最後に飛ぶ

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

 

『コピー選択の解除方法について』(You∞uoY)

はじめまして。
いつもこちらのサイトを参考にさせていただいています。

今回、OSを変えたところ、
今まで使えていたマクロが使えなくなり困っています。

<以前の環境>
WindowsXP
Excel2007

<現在の環境>
Windows7
Excel2007

《質問内容》
<以前の環境>で以下のマクロを利用していました。

' テキストCopy_登録用 Macro
'

    Dim taskID As Double
    Dim copyRange As Range

    taskID = Shell("Notepad.exe", vbNormalFocus)
    Range("M8:M15").Copy

    AppActivate taskID
    SendKeys "^v", True

    Application.CutCopyMode = False
    Range("M7").Select

End Sub

上記マクロを<現在の環境>で実行すると、
まっさらなNotepadが起動するだけになりました。
(テキストが貼りついていない状態?)

いろいろ試した結果、『Application.CutCopyMode = False』を削除することで
テキスト出力できるようになりましたが、
コピーした範囲を解除することができません。

ちなみに、まだ試行錯誤している状況で
現在は以下のマクロに変更して悩んでいます。

' テキストCopy_登録用 Macro
'

   Dim rc As Long
   Dim copyRange As Range

   Range("M8:M15").Copy
   rc = Shell("notepad.exe", vbNormalFocus)

 If rc <> 0 Then
    Application.SendKeys "%EP", True
 Else
    MsgBox "起動に失敗しました"
 End If

End Sub

しかし、上記のマクロにも
『Application.CutCopyMode = False』を入れると同じ現象が起きます。

ちなみに、別のマクロでは『Application.CutCopyMode = False』は
普通に利用できています。

[参考]※利用可能なマクロ
Sub 開始値特定()

    ActiveSheet.Next.Activate
    Range("H9:I9").Select
    Selection.Copy
    ActiveSheet.Previous.Activate
    Range("B10").PasteSpecial Paste:=xlPasteAll
    Application.CutCopyMode = False

End Sub

別のアプリケーションへの貼り付けが問題なのかと思っていますが、
どこをどうすればよいのかさっぱりわからないため、
『テキストCopy_登録用 Macro』でコピー選択を解除する方法について
ご教示いただけると幸いです。


コピーモードを解除する前に間をとってみてはどうでしょうか(マナ)

 DoEvents
 とか
 Application.Wait (Now + TimeValue("00:00:01"))

 横から失礼します。

 API関数を使っても出来ます。
 VB用コードですが、VBAにも転用できます。

 VBパーツ
 他アプリへの文字入力1

http://mt-soft.sakura.ne.jp/web_dl/vb-parts/key_sendmessage/

 ↑は指定の文字列をメモ帳へ書き出してますが、特定のセル範囲を吐き出してやる場合は
 メモ帳へ吐き出すデータはクリップボードを経由させると簡単です。

 クリップボードへの格納は↓が参考になると思います。

[[20121124162818]] 『「あああ」という文字をコピーモードにするには』

 (カリーニン)

 >クリップボードへの格納は↓が参考になると思います。

 クリップボードの取得は、の間違いでした。失礼しました。

 (カリーニン)

マナさん、カリーニンさん

ご返信ありがとうございます。
これから試してみたいと思います!

結果は後程ご報告しますね!

(You∞uoY)


マナさん、カリーニンさん

ご回答いただいた内容を確認し先ほど試してみました。

結果・・・
『DoEvents』では改善しませんでしたが、
『Application.Wait (Now + TimeValue("00:00:01"))』で改善しました。

> カリーニンさん
教えていただいた『API関数』を使う方法ですが、
私のスキル不足で、今の状態にどのように組み込んだらよいのか・・・
せっかく教えていただいたのに、すみません。

もう少し、レベルを上げてから試してみたいと思います。

お二人とも本当にありがとうございました!!

(You∞uoY)


カリーニンさん紹介先の方法だとこんな感じかな(マナ)

 必要と思われる部分のみ、ただ切り貼りしただけです。

 Option Explicit

 ' 指定時間Wait(ミリ秒)
 Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

 'クラス名、キャプションから子ウィンドウのハンドルを取得
 Declare Function FindWindowEx Lib "user32.dll" Alias "FindWindowExA" _
    (ByVal hwndParent As Long, ByVal hwndChildAfter As Long, _
     ByVal lpClassName As String, ByVal lpWindowName As String) As Long

 ' ウィンドウにメッセージを送る関数の宣言
 Public Declare Function SendMessageAny Lib "user32.dll" _
    Alias "SendMessageA" _
   (ByVal hWnd As Long, _
    ByVal Msg As Long, _
    ByVal wParam As Long, _
    ByVal lParam As Any) As Long

 Public Const WM_SETTEXT = &HC       '文字列送信

 Sub test()
    Dim lnghWnd As Long       'トップレベル(親)のウィンドウハンドル
    Dim lnghWndTarget As Long 'ターゲット(子)のウィンドウハンドル
    Dim lngRc As Long         'APIの返却値

    '-------------------------------------
    ' メモ帳を起動
    '-------------------------------------
    lngRc = Shell(Environ("WINDIR") & "\NOTEPAD.EXE", vbNormalFocus) '起動
    Sleep 100               '0.1秒待つ(起動完了)

    '-------------------------------------
    ' ターゲットウィンドウのハンドルを取得
    '-------------------------------------
    lnghWnd = FindWindowEx(0, 0, "Notepad", "無題 - メモ帳") '「メモ帳」のウィンドウハンドル
    lnghWndTarget = FindWindowEx(lnghWnd, 0, "Edit", "") '子ウィンドウのEdit

    '-------------------------------------
    ' クリップボード経由で文字列を取得
    '-------------------------------------
    Dim myStr As String

    Range("M8:M15").Copy
    With New DataObject
        .GetFromClipboard
        myStr = .GetText
    End With
    Application.CutCopyMode = False

    '-------------------------------------
    ' 送信
    '-------------------------------------
    Dim strDtSrc As String

    strDtSrc = myStr
    lngRc = SendMessageAny(lnghWndTarget, WM_SETTEXT, 0, ByVal strDtSrc)

 End Sub


マナさん

お返事遅くなって済みません。。。
マクロも記載していただき大変感謝です!

自分の勉強も兼ねて試してみたいと思います!

本当にありがとうございました。

(You∞uoY)


コメント返信:

[ 一覧(最新更新順) ]


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