MSCommを使ってCOM1を開こうとした時に、他のプログラムによって開かれていた場合に、どの
ように対処すればいいのでしょうか?
MSComm1.PortOpen = Not MSComm1.PortOpen
とすればできるみたいな記事があったのですが、これだとプロパティでtrueかfalseかを判定し
ているだけなので、エラーになってしまいます。
エラーハンドラをかけばいいのです。
>MSComm1.PortOpen = Not MSComm1.PortOpen
>とすればできるみたいな記事があったのですが、これだとプロパティでtrueか
>falseかを判定しているだけなので、エラーになってしまいます。
当然です。これは自分のプログラム内のみで有効な判定法で他のプログラムで
通信ポートを開いている場合は使えません。
「使用上の注意」はお読みになられましたか。
ここで発言する方のルールですので、ご理解願います。
べーちゃん、お返事ありがとうございます。
返事を急ぐあまり
マルチポストしてしまったことをお許しください。
Sub OpenTest()
Dim Res As Integer
On Error GoTo AlreadyOpen
MSComm1.PortOpen = True
Exit Sub
AlreadyOpen:
Res = MsgBox(既に開いてるぞ,vbOkOnly,エラー)
End Sub
これだと、他のエラー(ポート番号が違っているとか)も
すべて同じ処理をしてしまいますが、とりあえず解決しました。
> 当然です。
既に解決なさっているようなのですが、ひとつだけ。
>AlreadyOpen:
> Res = MsgBox(既に開いてるぞ,vbOkOnly,エラー)
>End Sub
>
>これだと、他のエラー(ポート番号が違っているとか)も
>すべて同じ処理をしてしまいますが、とりあえず解決しました。
以下のようにコードを変更するとちゃんといくのでは
AlreadyOpen:
Select Case Err.Number
Case comPortOpen - だったと思う
Res = MsgBox(既に開いてるぞ,vbOkOnly,エラー)
Case comPortInvalid - だったと思う2
Res = MsgBox(ぽーとがちゃうで,vbOkOnly,エラー)
End Select
End Sub
コードは一応VB6用です