- ベストアンサー
QRコードの処理
2000桁の情報からなるバーコードをMSCommで読み込みたいのですが、すべてのデータを読めません。 対応策はございますか? Dim Record As String MSComm1.InBufferCount = 0 Do DoEvents Loop Until MSComm1.InBufferCount >= 2000 Record = MSComm1.Input '←ここで、Record変数にすべてのデータを読めません
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (1)
- TooManyBugs
- ベストアンサー率27% (1472/5321)
関連するQ&A
- MSCommについて
↓例の桁数、データブロックが不定で連続して受信されます。 最後の1桁は(ETX)です。 (STX)XXXXXX...(ETX)(STX)XXXXX...(FS)XXXXX...(ETX)(STX)XXXXX.......(FS)XXXX...............(ETX) すべての桁数、データブロックが対象なので一度に受信します。 1. 質問はInputプロパティで1桁ずつデータをREC変数に読み込んで、ある条件で、Loop分を抜けたいのですが、 VB6の定義方法がわかりません。 1-1.最後の(ETX)の読み込み 1-2.先頭30桁 MSComm1.InBufferCount = 0 MSComm1.InputLen = 1 Dim REC As String Do DoEvents If MSComm1.InBufferCount Then REC = REC & MSComm1.Input If ..... '最後の(ETX)の読み込み '先頭30桁 Exit Do End If End If Loop 2. スピート重視で処理するために、InBufferCountに値があったら、すべての受信データをRECにいれたいのですが 取得できていません。 アドバイスはございますか? MSComm1.InBufferSize = 2048 MSComm1.InBufferCount = 0 MSComm1.InputLen = 0 Dim REC As String Do DoEvents If MSComm1.InBufferCount >= 1 Then Exit Do End If Loop REC = MSComm1.Input
- 締切済み
- Visual Basic
- 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
- ベストアンサー
- Visual Basic
- Do - Loop文
VB6の質問です。 受取データが、桁数は不定で、たて続けにきます。 そして、毎回ごとのデータを記録します。 記録用の変数は回数分、作成する必要があると思いますが、対処方法がわかりません。 宜しくお願い致します。 Dim Record As String '記録 Dim Data As String Do ・ ・ Data = (受取りデータ1)、(受取りデータ2)..... Recoed = Data Loop until Data = ""
- ベストアンサー
- Visual Basic
- MSComm; 必要なファイル、設定
VB6で、ActiveXファイルを作成しています。 デバッカーでは、問題なく動作します。 CABファイルを作成して、ファイルをダウンロードさせて動作させると データ送信は、できるのですが受信データが取得できません。 Do - Loop処理を繰り返しているようです。 必要なファイル、プロパティ設定などございますか? ご意見をお願いします。 CABの中身; TEST.OCX ASYCFILT.DLL COMCAT.DLL MSMASK32.OCX MSMSKjp.DLL MSPRPJP.DLL msstdfmt.dll MSSTKPRP.DLL MSVBVM60.DLL OLEAUT32.DLL OLEPRO32.DLL VB6JP.DLL MSComm1.CommPort = 1 MSComm1.Settings = "9600,N,8,1" MSComm1.PortOpen = True MSComm1.InBufferCount = 0 MSComm1.InputLen = 1 '-----Outputプロパティによるデータ受信 MSComm1.Output = (STX) & "CMD" & (CR) '-----Inputプロパティによるデータ受信 Dim Buffer$ Do DoEvents If MSComm1.InBufferCount Then Buffer$ = Buffer$ & MSComm1.Input Select Case Buffer$ Case Chr(13) Exit Do Case Else End Select End If Loop
- ベストアンサー
- Visual Basic
- シリアル通信:オフライン時にうまく終了してくれません
シリアルプリンタの制御を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 ... .. 宜しくお願いします。
- ベストアンサー
- Visual Basic
- 半角スペースを有効にしたい
Dim aa As String InpF1 = "c:\bb.csv" Open InpF1 For Input As #1 Do Until EOF(1) Input #1, aa Loop close #1 上記の構文で入力データの値が "XYZ " ・・・後ろが半角スペース の時、読み込みされたデータが "XYZ"だけになります。 これを"XYZ "の形でaaに取り込みすることは 可能でしょうか? よろしくお願いします。
- ベストアンサー
- Visual Basic
- エクセルVBAで配列ができなかった時の処理
エクセルでコマンドラインでデータを配列に 落としていますがデータがなかった時 配列もできていないようなのですがその時の書式がわかりません。 Dim cmd As String Dim filedata() As String Dim i As Integer cmd = dosのコマンド Set Result = WSH.exec("%ComSpec% /c " & cmd) Do While Result.Status = 0 DoEvents Loop filedata = Split(Result.StdOut.ReadAll, vbLf) '配列データができなかった時の処理 例えば IF filedata(0)="" IF filedata="" IF filedate IS Nothing など いづれもエラーになります。 なにか書式ありますでしょうか
- ベストアンサー
- Visual Basic
- 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
- 締切済み
- Visual Basic
- Excel 2010 VBA:ファイル名を読み込む
下は複数のcsvファイルを一つに合体するVBAです。これにシートの右端に読み取ったファイル名を追加するにはどうしたらよいでしょうか。 よろしくお願いします。 Sub macro1() Dim myPath As String Dim myFile As String Dim s As String myPath = ThisWorkbook.Path & "\" On Error Resume Next Kill myPath & "合体版.csv" On Error GoTo 0 myFile = Dir(myPath & "*.csv") If myFile = "" Then Exit Sub Open myPath & "合体版.csv" For Output As #1 Do Until myFile = "" Open myPath & myFile For Input As #2 Do Until EOF(2) Line Input #2, s Print #1, s Loop Close #2 myFile = Dir() Loop Close #1 End Sub
- ベストアンサー
- Excel(エクセル)
- VBA IEを操作。ファイルダウンロード
IEを操作して、ファイルをダウンロードしようと思います。 色んなサイトからとってきて、使わせてもらっています。 '---------------------------------IEを開くときに使う Sub IE_OPEN(webUrl As String) Dim objShell Dim writesheet As Worksheet Dim n As Long Dim ID As String, Password As String Set objShell = CreateObject("Shell.Application") Set ie = CreateObject("InternetExplorer.Application") ie.Visible = True ie.Navigate2 webUrl Do While ie.Busy Or ie.readyState <> 4 DoEvents Loop Dim objINPUT Set objINPUT = ie.document.getElementsByTagName("INPUT") 'ループで頭からテキストが 次へ を探す For n = 0 To objINPUT.Length - 1 '※ type="submitボタンなので、.InnerTextじゃなくて、.Valueです ※※注意 If InStr(objINPUT(n).Value, "ログイン") > 0 Then '文字列の中から見つけたら Worksheets("Sheet1").Activate Do While ie.Busy Loop objINPUT(n).Click '見つけたINPUTタグのオブジェクトをクリック Do While ie.Busy Loop Exit For End If Next Set objINPUT = Nothing 'オブジェクト変数解放 End Sub '------------------------------IEを開く(この段階では既に開いてあります。) Private Sub CommandButton1_Click() Do While ie.Busy Or ie.readyState <> 4 DoEvents Loop ie.document.all.ah_ehName.Value = Me.ComboBox1.List(Me.ComboBox1.ListIndex) 'ID Do While ie.Busy Loop Dim objINPUT Dim n As Long Set objINPUT = ie.document.getElementsByTagName("INPUT") For n = 0 To objINPUT.Length - 1 If InStr(objINPUT(n).Value, "ダウンロード") > 0 Then objINPUT(n).Click Do While ie.Busy Loop Exit For End If Next Do While ie.Busy = True DoEvents Loop SendKeys "%S", True'保存 Do While ie.Busy = True DoEvents '何もしないループ(笑) Loop SendKeys "%O",True'ファイルを開く? Do While ie.Busy = True DoEvents Loop 'ie.Quit End Sub ’==================- 面倒なので、IEはPublic変数として モジュールに書いています。 (色んなモジュールを経由する必要があるため、このような手段を取りました) SendKeysをIEに送るというのが出来ずに困っています。 ダウンロードというボタンを押してのダウンロードなので、 ダウンロード用のURL等は分かりません。 Excel2003を使っています。 どうにかSendkeysで出来ないでしょうか? もしくは、もう少し分かりやすい方法は無いでしょうか。 (ファイルを保存しますか?のダイアログの「保存」をクリックして 所定の場所におき、開きたい。 そのまま開くのでもいいけれど、動作が不安定になるのは困る) 以上、よろしくお願い致します。
- 締切済み
- Visual Basic
補足
ありがとうございました。 .InBufferCount = 2048としても、取得できたのは先頭の数桁でした。NGでした。 必要なデータは、先頭100桁です。 他の1Dコードではデータの桁数が違うのですが、.InBufferCount = 100でデータの取得ができました。OKでした。 QRコードでは、VB6やハードウェアに仕様があるのでしょか?