• ベストアンサー

ご質問

VBの質問です。 1. ↓のようなサンプルがございます。:(コロン)の意味がわかりません。 Public Const A As Byte = 0 Public Const B As Byte = 1 Select Case xxxxxxxxxx Case A: xxxxxxxx Case B: xxxxxxxx End Select 2. MSCOMMコントロールを使用しています。 問題で、 Dim A AにMSCOMMコントロールをセットするとあります。 Dim A As MSCOMM これで正しいのでしょうか?

noname#187796
noname#187796

質問者が選んだベストアンサー

  • ベストアンサー
  • todo36
  • ベストアンサー率58% (728/1234)
回答No.2

1> C系言語では、case の後にコロンが必要ですが、VB のCase には必要ありません。 C系言語の癖が抜けないおバカさんが書いたコードです。 2> これも質問の意図が分からんな。 一応答えると、コントロールを変数に代入するときは、LetではなくSetを使います。 Dim A A = MsComm1 '× Letの省略形 Let A = MsComm1 '× Set A = MsComm1 '○

その他の回答 (2)

  • MARU4812
  • ベストアンサー率43% (196/452)
回答No.3

1. VB のコード上でコロンを使うと、複数のステートメントを 複数行ではなく単一行に書けます。 …まぁ、見辛いし、バグの元になるので、普通の人は使いませんけど。 ↓もはやVB.NETの資料しかないけど、 http://msdn.microsoft.com/ja-jp/library/xxda45fy(v=vs.80).aspx 2. すでに付いている回答で十分だとは思うけど、 >Dim A As MSCOMM これでは変数を用意しただけでインスタンス(実体)を格納していません。 >AにMSCOMMコントロールをセットする という場合は画面上のコントロールなり、コードでメモリ上に作成した インスタンスを変数に格納する事を差します。 つまりは todo36 さんご回答の Set を使った画面上のコントロールを セットする構文で良いと思います。 このあたり、VB.NET では Set を省略するのが正しいルールになりました。 VB という括りでの質問では正しい回答が得られなくなっていますので 注意して下さい。

  • osietete4
  • ベストアンサー率21% (81/369)
回答No.1

>:(コロン)の意味がわかりません そういう文法なんです。ちょっと難しい話をすると、コンパイラは「:」を見つけると「ここでおしまいなんだな」って理解できます。←これわかんなかったら、わかんないままでいいです。 MSCOMMコントロールについては使ったことないので知りません。ぐぐったら下記のサイトがヒットしました。 http://homepage2.nifty.com/kasayan/vb/vbj1.htm 質問者さんの知識ではMSCOMMコントロールは難しすぎるのでは? あきらめたほうがいいのでは?

関連するQ&A

  • VB2005でバイト配列をコピーするには

    どなたかご教授下さい。 VB6で作成したプログラムをVB2005にコンバートしました。構造体からなる配列変数を一つの配列変数にコピー したいのですが、構造体の最初のメンバーだけ値が同じで以降の値は正しくセットされていませんでした。 どのように記述したらよいのでしょうか。またCopymMemory以外で良い方法があればご教授下さい。 よろしくお願い致します。 ===概略=== Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByRef Destination As Byte, ByRef Source As Byte, ByVal Length As Short) 構造体定義 (コピー元) <StructLayout(LayoutKind.Sequential)>Structure ST_MOTO <MarshalAs(UnmanagedType.ByValArray, SizeConst:=4)> Dim byte_strTranCd() As Byte <MarshalAs(UnmanagedType.ByValArray, SizeConst:=5)> Dim byte_strTanSeq() As Byte <MarshalAs(UnmanagedType.ByValArray, SizeConst:=2)> Dim byte_strTxtNo() As Byte <MarshalAs(UnmanagedType.ByValArray, SizeConst:=3)> Dim byte_strTxtSeq() As Byte End Structure Dim A As ST_MOTO (コピー先) <StructLayout(LayoutKind.Sequential)> Structure ST_SAKI Dim lngrecLen As Integer 'データのLength <MarshalAs(UnmanagedType.ByValArray, SizeConst:=100)> Dim bytrecData() As Byte 'データ End Structure Dim B As ST_SAKI Call CopyMemory(B.bytrecData(0), A.byte_strTranCd(0), 14) 出力結果 '最初の構造体のメンバーの値は正しく設定されている B.bytrecData(0) =80    A.byte_strTranCd(0) =80 B.bytrecData(1) =50    A.byte_strTranCd(1) =50 B.bytrecData(2) =57    A.byte_strTranCd(2) =57 B.bytrecData(3) =50    A.byte_strTranCd(3) =50 'これ以降は正しくない。(VB6だと正しく設定されている) B.bytrecData(4) =0     A.byte_strTanSeq(0) =80 B.bytrecData(5) =0     A.byte_strTanSeq(1) =87 B.bytrecData(6) =0     A.byte_strTanSeq(2) =48 B.bytrecData(7) =0     A.byte_strTanSeq(3) =48 B.bytrecData(8) =6     A.byte_strTanSeq(4) =55     ・              ・     ・              ・

  • 16進数の変換

    visualbasic6.0で加速度センサーから傾きを検出するプログラムを作りたいのですが、初心者のため手探りでやっている状態です。 センサーからの信号は16進数で4バイトずつ送られてきます。 これを10進数に直して、前の2バイトと後ろの2バイトを分けて表示したいのですが解かりません。以下が現段階のコードの1部です。 Private Sub MSComm1_OnComm() Dim bytBuf() As Byte Dim strDisp As String Dim lngCount As Long Select Case MSComm1.CommEvent Case comEvReceive If List1.ListCount = 0 Then MSComm1.InBufferCount = 0 End If Do bytBuf = MSComm1.Input strDisp = "" For lngCount = LBound(bytBuf) To UBound(bytBuf) strDisp = strDisp & Right("00" & Hex(bytBuf(lngCount)), 2) & " " Next List1.List(0) = List1.List(0) & strDisp Loop While MSComm1.InBufferCount <> 0 End Select End Sub

  • VB.NETでのシリアル通信

    .NET初心者です。 VB.NETでシリアル通信をしようとしています。 参照設定のところに Microsoft MSCOMM CONTROLというのがあったので 選択しました。 すると、MSLib.MSCommというのがでてきたので Vb6の Dim test As mscomm のように宣言して使えるかと思い Dim test As MSLib.MSComm test.PortOpen と書いてみたところ、 オブジェクト参照・・・インスタンス化されていません。と、エラーがでました。 ブレイクしてみたところ、test = Nothingでした。 testが無いのでインスタンス化されていないという エラーがでるのだなということは分かったのですが なぜこのエラーがでるのか、 どうしたらこのエラーを回避し、 .NETでシリアル通信ができるのか教えてください。 よろしくお願いします。

  • VBAでのORの使い方

    以下のようなVBAがあります。指定したフォルダーに保存されているエクセルのファイル名を取得するものです。 ここでやりたいのは、AとJPから始まるファイルを取得したいのですがうまくいきません。これですのコンパイルエラーが出ます。 どう変更すべきかご教示願います。 Sub ファイル名取得() Const SEARCH_DIR As String = "\\SOGKF01.JP.TakataCorp.com\XXXXXXXX\YYYYY" Const SEARCH_FILE As String = "AS*.xlsm" Or Const SEARCH_FILE As String = "JP*.xlsm" Dim tmpFile As String Dim strCmd As String Dim buf() As Byte Dim FileList() As String Dim myArray() As String Dim cnt As Long, pt As Long, i As Long 続く

  • 構造体のコピー

    VB6ですが、構造体のコピーは正しくできるのでしょうか type a test1(0 to 5) as byte test2 as integer test3 as string end type dim b1 as a dim c1 as a b1.test = 2 c1 = b1 私はここで、c1.test2が0だった

  • VB.Netでのシリアル通信についての質問

    VB6.0でバイト型変換を行ってからバッファに送信する プログラムを使用しているのですが、これを.Netにて 同様に行う記述方法が分りません。お分かりになる方 よろしくお願い致します。抜粋しておりますのでヘンテコ なソースかとは思いますがよろしくお願い致します。主にChrBが使用出来なくなった事が困っております。 (VB6.0と同様にAxMSCommを使用しております。) Private Sub Rs232c_Com() Dim bytOutByte() As Byte Dim strCmdData as String   strCmdData="83" 'コマンド送信 bytOutByte() = ChrB(Val("&h" & strCmdData)) MSComm1.Output = bytOutByte() End Sub

  • VBからEXCELへ

    変数を使って範囲指定をしたいのですが・・・ VBからEXCELに出力する時なんですけど、 例えばコンボボックス1、コンボボックス2に デフォルトとして、数字が1,2,3・・・10と入っています。 コンボ1、2 数字が1だったら、EXCELのA1 数字が2だったら、EXCELのB1 数字が3っだたら、EXCELのC1 コンボ1が1、コンボ2が3の場合A1~C1までを線で囲みたいのです。 DIM AKEY AS STRING DIM BKEY AS STRING SELECT CASE COMB1 CASE 1 AKEY = "A1" CASE 2 AKEY = "B1" CASE 3 AKEY = "C1" END SELECT SELECT CASE COMB2 CASE 1 BKEY = "A1" CASE 2 BKEY = "B1" CASE 3 BKEY = "C1" END SELECT CELL("AKEY:BKEY").Box lsNormal, btBox と書いたら、座標エラーとでます。 どうかお願いします。

  • MSCommのCommEventプロパティ

    質問させてください。 ↓コードで、通信エラーのイベントを取得したいのですが、COMポートは正常に機能しているのですが、comEvReceiveに正しい値(0)が 入らずにデータ受信ができません。 対策を教えていただけませんか? Dim Buffer As String Do '5桁受信するまで待機 DoEvents Loop Until MSComm1.InBufferCount >= 5 MSComm1.RThreshold = 1 Select Case MSComm1.CommEvent '通信ポートのチェック Case comEvReceive 'OK Buffer$ = MSComm1.Input Case Else 'NG ・ ・ End Select

  • シリアル通信:オフライン時にうまく終了してくれません

    シリアルプリンタの制御をVB6で行っております。 以下のようなコードですが、うまく終了してくれません。 'グローバル 'プリンタの状態 Dim BUF as String '起動時 Private Sub Form_Load() MSComm1.PortOpen = True Text1.Text = "" Timer1.Enabled = True End Sub '終了 Private Sub Form_Unload(Cancel As Integer) Timer1.Enabled = False MSComm1.PortOpen = False End Sub 'タイマー Private Sub Timer1_Timer() Timer1.Enabled = False Call CheckPrint Timer1.Enabled = True End Sub Private Sub MSComm1_OnComm() Dim TimeOut As Long Dim sTime As Long Dim eTime As Long Select Case MSComm1.CommEvent '受信 Case comEvReceive TimeOut = 100 sTime = timeGetTime Do If (TimeOut - eTime) < 0 Then Exit Do End If eTime = (timeGetTime - sTime) Loop Until MSComm1.InBufferCount >= 82 BUF = MSComm1.Input End Select End Sub プリンタの状態チェック Private Sub CheckPrint() Dim sTime As Long Dim eTime As Long Dim TimeOut As Long Dim i As Integer Dim n As Integer BUF = "" 'プリンタの情報取得コマンド MSComm1.Output = "~HS" 'タイマ開始 TimeOut = 400 sTime = timeGetTime eTime = 0 Do DoEvents If BUF <> "" Then Exit Do End If eTime = (timeGetTime - sTime) Loop Until TimeOut - eTime < 0 If BUF <> "" Then ... .. 宜しくお願いします。

  • rs232cでの受信データ(mscomm)の受信方法VB6

    VB6で、シリアル通信プログラムを作っています。 機器からレスポンスが、02 00 44 03 61 62 63 03 72 0Dと9バイトくるのですが、 8バイト受信した後に、また、最後の0Dを1バイト目として受信しているので困っています。 on commイベントで以下のようにして受信データをテキストボックスに表示しているのですが、 Select Case MSComm1.CommEvent   Case comEvReceive       Dim Buffer() As Byte       Buffer() = MSComm1.Input       For t = 0 To 6 + Buffer(3)  ,BUffer(3)はデータ長です。       Text1.Text = Text1.Text & Hex$(Buffer(t)) & Chr(&H3A)       Next t 8バイト表示した後、1バイト受信が起こるので、Buffer(3)が範囲外となりエラーが起こります。 inputLenは0にしています。 この問題は解決するにはどうしたらよいでしょうか? 0Dは終了コードです。0Dを受信するまで、きちんと1バイトづづ格納していくなどというようにできたらよいのですが、、、 他にも簡単な方法があったらよいのですが、、、 よろしくお願いいたします。

専門家に質問してみよう