クリップボードへデータを送信する方法
  VBAを使用して、クリップボードへデータをコピーする方法を説明します。


● 準備 ●

(1) 新規標準モジュールを用意し、以下のプロシージャを記述します。
(2) VBEのメニューから、[表示]−[イミディエイトウィンドウ](Ctrl+G)を選
    択し、イミディエイトウィンドウを表示させておきます。
    ※ Access97の場合はデバッグウィンドウになりますので、以後読み替えて
       下さい。


● サンプル ●

    'Win32API宣言部
    Declare Function GlobalUnlock Lib "kernel32" (ByVal hMem As Long _
                                                ) As Long
    Declare Function GlobalLock Lib "kernel32" (ByVal hMem As Long _
                                              ) As Long
    Declare Function GlobalAlloc Lib "kernel32" (ByVal wFlags As Long, _
                                                 ByVal dwBytes As Long _
                                               ) As Long
    Declare Function CloseClipboard Lib "User32" () As Long
    Declare Function OpenClipboard Lib "User32" (ByVal hwnd As Long _
                                                ) As Long
    Declare Function EmptyClipboard Lib "User32" () As Long
    Declare Function lstrcpy Lib "kernel32" (ByVal lpString1 As Any, _
                                             ByVal lpString2 As Any _
                                            ) As Long
    Declare Function SetClipboardData Lib "User32" (ByVal wFormat As Long, _
                                                    ByVal hMem As Long _
                                                   ) As Long

    'パブリック定数宣言
    Public Const GHND = &H42
    Public Const CF_TEXT = 1
    Public Const MAXSIZE = 4096

Public Function SetClipBoard(MyString As String)
    Dim hGlobalMemory  As Long
    Dim lpGlobalMemory As Long
    Dim hClipMemory    As Long
    Dim X              As Long

    '移動可能なグローバルメモリを割り当て
    hGlobalMemory = GlobalAlloc(GHND, LenB(MyString) + 1)

    'ブロックをロックして、メモリへのfarポインタを取得
    lpGlobalMemory = GlobalLock(hGlobalMemory)

    '文字列をグローバルメモリへコピー
    lpGlobalMemory = lstrcpy(lpGlobalMemory, MyString)

    'メモリのロックを解除します。
    If GlobalUnlock(hGlobalMemory) <> 0 Then
        MsgBox "メモリのロックを解除できません" & vbCrLf & _
               "処理が失敗しました"
        GoTo OutOfHere2
    End If

    'データをコピーするクリップボードを開く
    If OpenClipboard(0&) = 0 Then
        MsgBox "クリップボードを開くことができません" & vbCrLf & _
               "処理が失敗しました"
        Exit Function
    End If

    ' クリップボードの内容を消去
    X = EmptyClipboard()

    ' データをクリップボードへコピー
    hClipMemory = SetClipboardData(CF_TEXT, hGlobalMemory)

OutOfHere2:
    クリップボードの状態チェック
    If CloseClipboard() = 0 Then
        MsgBox "クリップボードを閉じることができません"
    End If
End Function



● 動作確認 ●

  イミディエイトウィンドウに以下のように入力して、Enter キーを押します。
    -------------------------------------------
    ? SetClipBoard("データコピーできた?")
    -------------------------------------------
    ※「?」=Debug.Print

イミディエイトウィンドウや、テキストエディタなどのテキストエリアで貼り
付け(Ctrl+V)を行うと、上記SSetClipBoard引数の文字列が貼り付けられ、ク
リップボードにデータが送信できていることを確認できます。

Access97/2000



戻る


Excel Word Access VBA! モーグ