@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

VB.NET Excelへのキーコードの送り方?

投稿者投稿内容
mjmj
会議室デビュー日: 2005/06/09
投稿数: 9
お住まい・勤務地: 東京
投稿日時: 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

以上========
_________________
とっと
大ベテラン
会議室デビュー日: 2004/03/25
投稿数: 197
投稿日時: 2005-07-15 08:01
おはようございます。

目的はなんでしょう?

Excel側の操作(オートメーション)で出来ないんですか?
mjmj
会議室デビュー日: 2005/06/09
投稿数: 9
お住まい・勤務地: 東京
投稿日時: 2005-07-15 09:50
引用:

とっとさんの書き込み (2005-07-15 08:01) より:
おはようございます。

目的はなんでしょう?

Excel側の操作(オートメーション)で出来ないんですか?




とっと様  おはようございます。
Excelのセル中にカレットが入った状態に対して
ペーストしてクリップボード内の文字を貼り付けるのが目的です。
セル編集中になると、Excelのオートメーションが
反応しなくなるようでしたので。

Orion
常連さん
会議室デビュー日: 2005/07/11
投稿数: 27
お住まい・勤務地: 京都府・京都市
投稿日時: 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

引用:

mjmjさんの書き込み (2005-07-15 09:50) より:
引用:

とっとさんの書き込み (2005-07-15 08:01) より:
おはようございます。

目的はなんでしょう?

Excel側の操作(オートメーション)で出来ないんですか?




とっと様  おはようございます。
Excelのセル中にカレットが入った状態に対して
ペーストしてクリップボード内の文字を貼り付けるのが目的です。
セル編集中になると、Excelのオートメーションが
反応しなくなるようでしたので。



mjmj
会議室デビュー日: 2005/06/09
投稿数: 9
お住まい・勤務地: 東京
投稿日時: 2005-07-26 19:43
Orionさん  はじめまして。
遅くなりましたが、ご教示ありがとうございます。

引用:

Orionさんの書き込み (2005-07-22 02:20) より:
はじめまして。

VB6で試してみました。
アプリケーションオブジェクトのメソッド"SendKeys"で制御できるようです。

参考までに、Excel本体にこのウインドウメッセージを送ってもダメだと思います。
送るのであれば、"Workbook"に送らないと行けないと思います。



Workbookに送るのは気づきませんでした。
変更してみます。

ところで、"%EP"というキー値についてはどこに情報があるのでしょうか?
探してみましたが、わかりませんでした。(聞いてばかりですみません。)
mjmj
会議室デビュー日: 2005/06/09
投稿数: 9
お住まい・勤務地: 東京
投稿日時: 2005-07-27 09:57
引用:

Workbookに送るのは気づきませんでした。
変更してみます。


変更しましたが、メソッドが無いようです。
ソース:「Microsoft.VisualBasic」
メッセージ:「型'Worksheet'でパブリックメンバ'SendKeys'が見つかりません。」
(セルを編集状態にしていてもいなくても同じでした。)

バージョン依存しなよう、ExcelアプリケーションをObject型で定義しており、
したがって、WorkSheetもObject型です。もちろん参照設定していません。
理屈では参照設定しなくてもいいはず、と思っているのですが、しないとダメでしょうか?
SendKeysがPublicクラスでないとして、参照設定如何で使えなくなったりはしないという認識です。

引用:

ところで、"%EP"というキー値についてはどこに情報があるのでしょうか?
探してみましたが、わかりませんでした。(聞いてばかりですみません。)


すみません、早とちりでした。
失礼しました。
mjmj
会議室デビュー日: 2005/06/09
投稿数: 9
お住まい・勤務地: 東京
投稿日時: 2005-07-27 10:02
ちなみに、
引用:

引用:

ところで、"%EP"というキー値についてはどこに情報があるのでしょうか?
探してみましたが、わかりませんでした。(聞いてばかりですみません。)


すみません、早とちりでした。
失礼しました。


Alt+E と、P にわけて考えるということを理解しました、ということです。
Orion
常連さん
会議室デビュー日: 2005/07/11
投稿数: 27
お住まい・勤務地: 京都府・京都市
投稿日時: 2005-07-27 11:08
引用:

mjmjさんの書き込み (2005-07-27 09:57) より:
引用:

Workbookに送るのは気づきませんでした。
変更してみます。


変更しましたが、メソッドが無いようです。
ソース:「Microsoft.VisualBasic」
メッセージ:「型'Worksheet'でパブリックメンバ'SendKeys'が見つかりません。」
(セルを編集状態にしていてもいなくても同じでした。)

バージョン依存しなよう、ExcelアプリケーションをObject型で定義しており、
したがって、WorkSheetもObject型です。もちろん参照設定していません。
理屈では参照設定しなくてもいいはず、と思っているのですが、しないとダメでしょうか?
SendKeysがPublicクラスでないとして、参照設定如何で使えなくなったりはしないという認識です。



SendKeysメソッドは、WorkSheetオブジェクトではなくApplicationオブジェクトのメソッドですよ。
サンプルのコードはこのようにしてあります。

メッセージを送るならWorkbookと書いただけで、SendKeysメソッドがWorkSheetのものではないのです。

以下にExcelVBAのヘルプを貼っておきます。

SendKeys メソッドの使用例
次の使用例は、SendKeys メソッドを使って Excel を終了します。
Application.SendKeys("%fx")

スキルアップ/キャリアアップ(JOB@IT)