クリップボードのデータを取り出す方法
  Accessにはクリップボードのデータを取得する方法が用意されていません。
  
  ここでは、VBAを使用してクリップボードからデータを取り出す方法を説明し
  ます。

● 準備 ●

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


● サンプル ●

    'Win32API宣言部
    Declare Function OpenClipboard Lib "User32" (ByVal hwnd As Long _
                                                ) As Long
    Declare Function CloseClipboard Lib "User32" () As Long
    Declare Function GetClipBoardData Lib "User32" _
                                          Alias "GetClipboardData" _
                                          (ByVal wFormat As Long _
                                         ) As Long
    Declare Function GlobalAlloc Lib "kernel32" (ByVal wFlags&, _
                                                 ByVal dwBytes As Long _
                                               ) As Long
    Declare Function GlobalLock Lib "kernel32" (ByVal hMem As Long _
                                              ) As Long
    
    Declare Function GlobalUnlock Lib "kernel32" (ByVal hMem As Long _
                                                ) As Long
    
    Declare Function GlobalSize Lib "kernel32" (ByVal hMem As Long _
                                              ) As Long
    
    Declare Function lstrcpy Lib "kernel32" (ByVal lpString1 As Any, _
                                             ByVal lpString2 As Any _
                                            ) As Long
    'パブリック定数
    Public Const GHND = &H42
    Public Const CF_TEXT = 1
    Public Const MAXSIZE = 4096

Function GetClipBoard()
    Dim hClipMemory  As Long
    Dim lpClipMemory As Long
    Dim MyString     As String
    Dim RetVal       As Long

    'クリップボードの状態チェック
    If OpenClipboard(0&) = 0 Then
        MsgBox "クリップボードを開けませんでした"
        Exit Function
    End If

    ' テキストを参照しているハンドルをグローバルメモリに取得
    hClipMemory = GetClipboardData(CF_TEXT)
    If IsNull(hClipMemory) Then
        MsgBox "メモリが割り当てられません"
        GoTo OutOfHere
    End If

    ' メモリをロックして、実際のデータ文字列を参照できるようにする
    lpClipMemory = GlobalLock(hClipMemory)

    If Not IsNull(lpClipMemory) Then
        MyString = Space$(MAXSIZE)
        RetVal = lstrcpy(MyString, lpClipMemory)
        RetVal = GlobalUnlock(hClipMemory)

        '終端Null文字を取り除く
        MyString = Mid(MyString, 1, InStr(1, MyString, Chr$(0), 0) - 1)
    Else
        MsgBox "メモリの確保に失敗しました"
    End If

OutOfHere:
    RetVal = CloseClipboard()
    GetClipBoard = MyString
End Function


● 動作確認 ●

  あらかじめ、Ctrl+C等で文字列をコピーしてから、イミディエイトウィンド
ウに以下のように入力して、Enter キーを押します。
    ----------------------------------------
    ? GetClipBoard()
    ----------------------------------------
    ※「?」=Debug.Print

すると、イミディエイトウィンドウにコピーしていたデータが表示され、ク
リップボードからデータを取り出せていることを確認できます。

Access97/2000



戻る


Excel Word Access VBA! モーグ