- - PR -
VB.NET Excelへのキーコードの送り方?
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-07-14 14:47
いつも勉強させていただいております。
VB.NETでExcelの共有アドインを作成しております。 Excelへ「Ctrl+V」を送りたいのですが、うまくいっていません。 自分なりに調べてやったのですが、 API(SendMessage)の使い方とキーコードの指定に不安があります。 アドバイス、また、参考になるサイト等ご教示いただければ幸いです。 以下コードの抜粋===== Declare Function SendMessage Lib "user32" Alias _ "SendMessageW" (ByVal hWnd As Long, ByVal wMsg As Long, _ ByVal wParam As Long, ByVal lParam As Long) As Long Public Const WM_KEYDOWN As Long = &H100 Public Const WM_KEYUP As Long = &H101 Public Const WM_CHAR As Long = &H102 Public Sub Test() Dim HWnd as Long = Obj.Hwnd ' Excelアプリケーションのハンドル Dim Enbl as Long Enbl = SendMessage(HWnd, WM_KEYDOWN, &H1D, CLng(0)) Enbl = SendMessage(HWnd, WM_KEYDOWN, &H49, CLng(0)) Enbl = SendMessage(HWnd, WM_CHAR, &H49, CLng(0)) Enbl = SendMessage(HWnd, WM_KEYUP, &H49, CLng(0)) Enbl = SendMessage(HWnd, WM_KEYUP, &H1D, CLng(0)) End Sub 以上======== _________________ | ||||||||
|
投稿日時: 2005-07-15 08:01
おはようございます。
目的はなんでしょう? Excel側の操作(オートメーション)で出来ないんですか? | ||||||||
|
投稿日時: 2005-07-15 09:50
とっと様 おはようございます。 Excelのセル中にカレットが入った状態に対して ペーストしてクリップボード内の文字を貼り付けるのが目的です。 セル編集中になると、Excelのオートメーションが 反応しなくなるようでしたので。 | ||||||||
|
投稿日時: 2005-07-22 02:20
はじめまして。
VB6で試してみました。 アプリケーションオブジェクトのメソッド"SendKeys"で制御できるようです。 参考までに、Excel本体にこのウインドウメッセージを送ってもダメだと思います。 送るのであれば、"Workbook"に送らないと行けないと思います。 Private Sub Command1_Click() Dim obj As New Excel.Application Dim ws As Excel.Worksheet Dim j As Long Set obj = New Excel.Application With obj .Visible = True .Workbooks.Add Set ws = .ActiveSheet With ws .Cells(1, 1) = "AAA" .Cells(1, 2).Activate End With .SendKeys ("%EP") '編集(E)メニューの貼り付け(P)の意味のようです Set ws = Nothing End With Set obj = Nothing End Sub
| ||||||||
|
投稿日時: 2005-07-26 19:43
Orionさん はじめまして。
遅くなりましたが、ご教示ありがとうございます。
Workbookに送るのは気づきませんでした。 変更してみます。 ところで、"%EP"というキー値についてはどこに情報があるのでしょうか? 探してみましたが、わかりませんでした。(聞いてばかりですみません。) | ||||||||
|
投稿日時: 2005-07-27 09:57
変更しましたが、メソッドが無いようです。 ソース:「Microsoft.VisualBasic」 メッセージ:「型'Worksheet'でパブリックメンバ'SendKeys'が見つかりません。」 (セルを編集状態にしていてもいなくても同じでした。) バージョン依存しなよう、ExcelアプリケーションをObject型で定義しており、 したがって、WorkSheetもObject型です。もちろん参照設定していません。 理屈では参照設定しなくてもいいはず、と思っているのですが、しないとダメでしょうか? SendKeysがPublicクラスでないとして、参照設定如何で使えなくなったりはしないという認識です。
すみません、早とちりでした。 失礼しました。 | ||||||||
|
投稿日時: 2005-07-27 10:02
ちなみに、
Alt+E と、P にわけて考えるということを理解しました、ということです。 | ||||||||
|
投稿日時: 2005-07-27 11:08
SendKeysメソッドは、WorkSheetオブジェクトではなくApplicationオブジェクトのメソッドですよ。 サンプルのコードはこのようにしてあります。 メッセージを送るならWorkbookと書いただけで、SendKeysメソッドがWorkSheetのものではないのです。 以下にExcelVBAのヘルプを貼っておきます。 SendKeys メソッドの使用例 次の使用例は、SendKeys メソッドを使って Excel を終了します。 Application.SendKeys("%fx") |