EXCELで、USB-RS232C変換アダプタをPCに繋げたとき、使用しているCOMポート番号を取得するマクロを作ろうとしています。
下記のコードのGetUseComNameプロシージャを実行してポート番号を取得できるようになりました。
わざわざGetUseComNameプロシージャを実行しなくても、USB-RS232C変換アダプタをPCに接続されたのをプラグアンドプレイで検知して、
COMポート番号を取得する仕様に改良したいのですが、どうすれば良いでしょうか。
私のパソコンの環境は(windows XP 2002 SP3 office excel2003 sp3)です。
'--------------------
Option Explicit
'--------------------
Sub GetUseComName()
Dim a, b, port_no As String
Range("a1").Select
Selection.Clear
'通信ポート名を取得
a = GetUseComNo()
'通信ポート名の文字列からCOMポート番号(書式「1,2,・・・」の形で)を取り出す。
Do While InStr(a, "(COM") <> 0
a = Mid(a, InStr(a, "(COM") + 4)
port_no = port_no + Left(a, 1)
If InStr(a, "(COM") <> 0 Then
port_no = port_no & ","
End If
Loop
'USB-232C変換アダプタが接続されていれば、セルa1に通信ポート番号を表示する。
If port_no = "" Then
MsgBox ("使用できるCOM Portがありません。")
Exit Sub
ElseIf InStr(port_no, ",") <> 0 Then
Selection = port_no
End If
End Sub
'---------------------
Function GetUseComNo() As String
Dim Serial As Object
Dim SerialSet As Object
Dim objWMIService As Object
Dim strComputer As String
Dim intCnt As Integer '要素数
Dim strComName As String '取得したデバイス名
strComputer = "."
'WMIを呼び出す
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
'PnPで登録されているもの(デバイスマネージャで見えるもの)から
'シリアルポートのクラスでかつ名前に「(COMxx)」と付いているものを抽出
Set SerialSet = objWMIService.ExecQuery("Select * from Win32_PNPEntity Where " & _
"(ClassGuid = '{4D36E978-E325-11CE-BFC1-08002BE10318}') and " & _
"(Name like '%(COM%)')")
'全ポートの数(取得できた項目数)
intCnt = SerialSet.Count
'情報の取得
strComName = ""
For Each Serial In SerialSet
'デバイス名を取得 「"通信ポート (COM1)"」
If strComName <> "" Then
strComName = strComName & vbCrLf
End If
strComName = strComName & Serial.Name
Next
'戻り値セット
GetUseComNo = strComName
End Function
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
使用出来るCOMポートが発生するまで、GetUseComNoをグルグル回すしか無いと思いますが・・。
それか、COMポートを監視するWindowsの常駐アプリを作って、それをトリガーにそのVBAを起動させるとかですかね・・。
どちらも似たようなものですが。
※ちなみに「プラグアンドプレイ」って、デバイスが接続されたらそれ用のデバイスを自動で組み込んで使えるようにしますよ。って意味なのはご存知でしょうか。(アプリケーションをキックする為の仕組みではない)
参考URL:http://ja.wikipedia.org/wiki/%E3%83%97%E3%83%A9% …
ありがとうございます。
「デバイスが接続されたらアプリケーションをキックする」という仕組みはないということなのでしょうか。。。
まだ諦めがつかないので、もう少し調べてみます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
あるあるbotに投稿したけど採用されなかったあるある募集
あるあるbotに投稿したけど採用されなかったあるあるをこちらに投稿してください
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
エクセル VBA でのCOMポート認識
その他(プログラミング・Web制作)
-
COM接続デバイスのポート番号特定方法について
Visual Basic(VBA)
-
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
-
4
VBAを使用して、USBでつないだ機器の制御が出来るでしょうか?
Access(アクセス)
-
5
シリアル通信時のデータ受信方法
Visual Basic(VBA)
-
6
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
7
エクセルVBAでのネットワークプリンタのポー名の取得方法は?
Visual Basic(VBA)
-
8
エクセルVBAでRS232Cへ
Visual Basic(VBA)
-
9
エクセルVBAでRS232通信は可能ですか?
PowerPoint(パワーポイント)
-
10
【VB6】デバイスマネージャを表示させたい
Visual Basic(VBA)
-
11
デバイスマネージャーの一覧取得
Visual Basic(VBA)
-
12
RS232Cを経由してEXCELにデータを取込みたい
Visual Basic(VBA)
-
13
EXCEL マクロに於ける プリンタ番号検索方法
その他(Microsoft Office)
-
14
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
15
エクセルVBAで Do While (1)って?
Excel(エクセル)
-
16
COMポートの同時オープン同時読み込み
C言語・C++・C#
-
17
EXCELネットワークプリンタでのポート名について
Excel(エクセル)
-
18
VBA2005 16進を2桁で表示したい。
Visual Basic(VBA)
-
19
[ExcelVBA] コマンドボタンを押しっぱなしにしている間、マクロを繰り返す方法
Excel(エクセル)
-
20
VBAのコマンドボタンの文字列の改行方法は?
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
8000番や8080番のポー...
-
ポートの80と443
-
スイッチのポート番号について
-
コマンドプロンプトで、ポート...
-
ワイヤレスマウスUSBレシーバー...
-
プリンタのUSB接続について(LP...
-
8080ってなんですか?
-
ポート80を閉じたいのですが
-
ポートって穴?
-
サーバーにLANポートが多いとど...
-
DELL INSPIRON1300のUSBがささ...
-
Windows2000 Serverでポートを...
-
EXCEL VBAで、PnPでCOMポート番...
-
ポートイン?チャーンイン?
-
Catlystのポート番号名について
-
シリアルポートをCOM5から...
-
apacheのポートを80番以外に...
-
割り当てられたCOMポートの内容...
-
マザーボードにSATAのHDDを接続...
-
マルチポートのNICの有用性と使...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
8000番や8080番のポー...
-
スイッチのポート番号について
-
コマンドプロンプトで、ポート...
-
ポートの80と443
-
Windows10におけるUSB-RS232C機...
-
Dell Inspiron 14 5415 をコン...
-
ワイヤレスマウスUSBレシーバー...
-
バンジージャンプのデータを貰...
-
ポート80、443を開けろと言われ...
-
EXCEL VBAで、PnPでCOMポート番...
-
Supermodelのエミュレーターに...
-
サーバーにLANポートが多いとど...
-
マザーボードにSATAのHDDを接続...
-
このエラーはどういうことですか?
-
プリンタのUSB接続について(LP...
-
8080ってなんですか?
-
マザーボードのSATAポートの故障
-
microsoft-ds(445)とnetbios(13...
-
$_SERVER["HTTP_HOST"]と$_SERV...
-
無線LANルータのアクセスログの...
おすすめ情報