VBの機能ではなく、APIを使用したバージョン。エクセルのマクロあたりで使えるかな?
クリップボードに文字列を格納するだけでたくさんのAPIが必要となる。これを見ると、VB の Clipboard メソッドのありがたみが分かる。
'グローバルメモリのロックを解除する
'グローバルメモリをロックする
'グローバルメモリを確保する
'グローバルメモリを開放する
'文字列をコピー
Private Const GHND = &H42
'クリップボードを開く
'クリップボードを空にする
'クリップボードにデータをセットする
'クリップボードを閉じる '---------------------------------------------------------------------- ' 関数名 :CopyText ' 機能 :クリップボードに文字列を格納する ' 引数 :(i)hWnd … 呼び出したウインドウのハンドル ' (i)SrcText … クリップボードに格納する文字列 ' 返り値 :正常終了:True 異常終了:False '---------------------------------------------------------------------- Public Function CopyText(ByVal hWnd As Long, ByVal SrcText As String) As Boolean Dim FuncRet As Long Dim hGlobal As Long Dim hLockStrPrt As Long 'グローバルメモリ領域を確保 hGlobal = GlobalAlloc(GHND, LenB(StrConv(SrcText, vbFromUnicode)) + Len(Chr$(0))) If hGlobal = 0 Then GoTo ErrHandler 'グローバルメモリ領域をロックし、そのポインタを取得する hLockStrPrt = GlobalLock(hGlobal) If hLockStrPrt = 0 Then GoTo ErrHandler '文字列をグローバルメモリ領域にコピー Call lstrcpy(hLockStrPrt, SrcText) 'グローバルメモリ領域を解除する Call GlobalUnlock(hGlobal) 'クリップボードオープン FuncRet = OpenClipboard(hWnd) If FuncRet = 0 Then GoTo ErrHandler 'クリップボードを空にする Call EmptyClipboard 'クリップボードにコピーする 'SetClipboardData() を実行したら、hGlobal は Windows 側が管理してくれる '従って GlobalFree をしなくてよい、というかしてはいけない Call SetClipboardData(CF_TEXT, hGlobal) 'クリップボードを閉じる Call CloseClipboard CopyText = True Exit Function ErrHandler: If hGlobal Then Call GlobalFree(hGlobal) End Function |