[[20120630080747]] 『エクセルマクロでWindowsのクリップボードを判定ax(まいっか) ページの最後に飛ぶ

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

 

『エクセルマクロでWindowsのクリップボードを判定したい』(まいっか)

★やりたい事★
セルA1に判定文字列、ここでは仮に『すたーと』とします。
セルB1に判定文字列、ここでは仮に『すとっぷ』とします。

Windowsクリップボードの文字列が『すたーと』になった場合にtestというマクロを実行します。
Windowsクリップボードの文字列が『すとっぷ』になった場合判定のループを終了し、セルC1に『判定終了!』と表示する。
判定は1秒おきにループしています。(試行錯誤した中で1秒ループにしてますが。1秒でなくてもいいです。とにかく判定のループが1秒未満で発生して欲しい)

下記のマクロだと、Windowsクリップボードの中身が変更される数十回に1回とかの頻度で
.GetFromClipboardの行でエラーが出ます。

解決策もしくは、これ以外の方法でWindowsクリップボードのループ判定が出来るマクロがあれが、ご教授下さい!

↓↓↓↓ここからマクロです↓↓↓↓


Sub hantei()

    Dim buf As String, buf2 As String, CB As New DataObject
    buf = "るーぷ"

    With CB
        .GetFromClipboard
        buf2 = .GetText
    End With

    If buf2 = Range("A1") Then

        With CB
            .SetText buf
            .PutInClipboard
    End With
    
        Call test

        Application.OnTime Now + TimeValue("00:00:01"), "hantei"

    ElseIf buf2 <> Range("B1") Then

        Application.OnTime Now + TimeValue("00:00:01"), "hantei"

    Else

        Range("C1").Value = "判定終了!"

    End If

End Sub


[エクセルのバージョンの例]
Excel2010

[OSのバージョンの例]
WindowsXP


 エラーメッセージは何だった?
 あと、だめもとで、With CB の下に

 DoEvents
 DoEvents

 といれてみるとどうなるかな?

 (ぶらっと)


まいっかです。

実行時のエラーで、
DataObjectGetFromClipboard OpenClipboardに失敗しました。

とでます。よろしくお願いします


 で、DoEvents 挿入は試してみた? 試した結果も同じエラーだったということ?

 (ぶらっと)

DoEvents挿入しても変わらないみたいです><

 なるほど・・・

 気になるのは、.GetFromClipboard ここからコード実行がスタートしているよね。
 もし、クリップボードになにも入っていなければ、エラーになるような気がする。
 いわゆるOfficeのクリップボードと、Windowsのクリップボードの違いについては、はなはだ浅い知識しか無く
 はずしているかもしれないんだけど、Application.ClipboardFormats(1) が True なら空っぽなので
 .GetFromClipboard でエラーになるかもしれないね。
 (と、田中さんのサイトに書いてあったような気が・・・? アップしたコードも、田中さんのサイトあたりを参考にしたのかな?) 

 (ぶらっと)

コメント返すのが遅くなり申し訳ありませんでした><
そうです!田中さんのサイトを参考にしました!
いろいろと試行錯誤をした結果、なんとかエラーが出にくくなりました!
いろいろとご指導ありがとうございました!

まいっか


コメント返信:

[ 一覧(最新更新順) ]


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