• 締切済み

空白の認識

VB6.0で開発しています。 EXCELのD2のセルが空白の時の処理をしたいのですがうまくいきません。 If exl.Cells(2, 4).Value = "" Then Ret = MsgBox("棚卸数が入力されていません", vbInformation + vbOKOnly, Me.Caption) End If 上記のように書くと空白時も空白では無いときもメッセージが出てしまいます。 何故でしょうか?教えてください。

みんなの回答

  • dsuekichi
  • ベストアンサー率64% (171/265)
回答No.5

なんというか・・・動きが無茶苦茶変ですね・・・ > On Error Resume Nextを止めて確認をしました。 > すると > exl.Application.Workbooks.Open FileName:=fnmの部分で 「On Error Resume Next」って、提示されたコードには1箇所しかなく、 しかも > exl.Application.Workbooks.Open FileName:=fnmの部分で より後ろですよね・・・ なのに、何故ココでエラー・・・?? また、 > True.xlsが見つかりませんでした。とエラーが出ました。 「True.xls」って??? こういう設定(fnmにTrue.xlsを設定)してるところが、提示されたコード以外にどこかにありますか? > プログラムを閉じずに2回目をすると何も表示されません。 > []も表示されません。 「On Error Resume Next」を外したら、ココでエラーが出るかと期待してたんですが・・・ その前でエラーですか・・・ うーん・・・ とりあえず > Set exl = CreateObject("Excel.Sheet") は不要ですね。 #Excelが2つ立ち上がる原因は、CreateObjectを2回やっている所為ですね。 タダコレだけが原因とは・・・ PCを再起動しても同じですか? 後は、1行づつデバッグ(ブレイクポイントやウォッチ式)で おかしな動き・おかしな値になるところを地道に探していくしかなさそうですけど・・・

  • dsuekichi
  • ベストアンサー率64% (171/265)
回答No.4

とりあえず、 > On Error Resume Next は止めて、どこかでエラーが発生していないか、確認して見てください。 後、 > MsgBox "[" & exl.Cells(2, 4).Value & "]" > > とすると、どうなります? > ちゃんと、セルD2に設定した値が表示されますか? の確認結果はどうでした?

kinoko731
質問者

補足

MsgBox "[" & exl.Cells(2, 4).Value & "]" とすると 1回目はダイアログから設定した値が表示されるのですが 例えば4ならば[4]と空白なら[]と表示されます。 プログラムを閉じずに2回目をすると何も表示されません。 []も表示されません。 On Error Resume Nextを止めて確認をしました。 すると exl.Application.Workbooks.Open FileName:=fnmの部分で True.xlsが見つかりませんでした。とエラーが出ました。

回答No.3

以下でも判定できませんでしょうか? If exl.Cells(2, 4).Value = "" or exl.Cells(2, 4).Value = vbEmpty Then

  • dsuekichi
  • ベストアンサー率64% (171/265)
回答No.2

そうですか・・・シートは間違ってませんか・・・ では、 > If exl.Cells(2, 4).Value = "" Then の直後に、 MsgBox "[" & exl.Cells(2, 4).Value & "]" とすると、どうなります? ちゃんと、セルD2に設定した値が表示されますか? あ、もう一つ確認です。 Excelが2つ立ち上がっている、なんて事は無いですよね? VB6で起動したExcelとは別に、画面からExcelを起動しているなんて事は・・・ #例えば、タスクマネージャのプロセスタブを見たらExcel.exeが2つあるとか・・・

kinoko731
質問者

補足

ご指摘の通りタスクマネージャのプロセスタブを見たらExcel.exeが2つありました。 以下の通りなのですが何処が悪いのかわかりません。 Dim strSQL As String Dim adoRsWork As ADODB.RecordSet Dim exl As Object Dim i As Integer Dim k As Long Dim mds As Boolean Dim rs As Variant Dim j As Integer Dim s As String Dim ct As Long Dim fno As Integer Dim fnm As String strSel1 = "SELECT" strSel1 = strSel1 & " A.品番" strSel1 = strSel1 & ",A.品名" strSel1 = strSel1 & ",A.倉番" strSel1 = strSel1 & ",A.数量" strFro1 = " FROM " strFro1 = strFro1 & " A_zaiko AS A" strSQL = strSel1 & " " & strFro1 Debug.Print (strSQL) Set adoRsWork = pbAdo.OpenRecordset(strSQL) Set exl = CreateObject("Excel.Sheet") mds = True fnm = "C:\Documents and Settings\デスクトップ\159.xls" j = adoRsWork.Fields.Count - 1 ReDim ctyp(j) As Boolean For i = 0 To j Select Case adoRsWork(i).Type Case 131, 139 ctyp(i) = True Case Else ctyp(i) = False End Select Next adoRsWork.Close Set exl = CreateObject("Excel.Application") exl.Application.Visible = True exl.Application.Workbooks.Open FileName:=fnm k = 1 If mds Then k = 2 End If gSvrADOActiveconnection.BeginTrans On Error Resume Next For k = k To 65536 s = "" If exl.Cells(2, 4) = "" Then Ret = MsgBox("棚卸数が入力されていません", vbInformation + vbOKOnly, Me.Caption) Exit For End If For i = 0 To j If ctyp(i) Then s = s & "," & exl.Cells(k, i + 1) Else s = s & ",'" & exl.Cells(k, i + 1) & "'" End If Next s = Mid(s, 2) strSQL = "insert into " & strFro1 & " values (" & s & ")" pbAdo.OpenRecordset (strSQL) If Err <> 0 Then gSvrADOActiveconnection.RollbackTrans Close fno adoRsWork.Close MsgBox "更新エラー" & Chr(10) & Err & ": " & Error _ & Chr(10) & ct + 1 & " 件目に問題あり" _ & Chr(10) & strSQL End End If ct = ct + 1 Next gSvrADOActiveconnection.CommitTrans On Error GoTo 0 exl.Application.DisplayAlerts = False exl.Application.Quit adoRsWork.Close End Sub

  • dsuekichi
  • ベストアンサー率64% (171/265)
回答No.1

> EXCELのD2のセル > exl.Cells(2, 4).Value BookやSheetは、あってますか? 別のWorkBookやWorkSheetを参照していたりしていませんか? とりあえず、確認してみてください。 例えば・・・ 「exl」が何をさしているか、明記されていませんが、 「Worksheet」のオブジェクトか、それとも「Excel.Application」のオブジェクトだと思います。 で、 「Worksheet」のオブジェクトなら、 MsgBox exl.parent.name & "!" & exl.name を、 「Excel.Application」のオブジェクトなら、 MsgBox exl.Cells(2, 4).parent.parent.name & "!" & exl.Cells(2, 4).parent.name を実行してみて、 対象のBookとSheetの名前が表示されるか確認してみてください。

kinoko731
質問者

補足

BookやSheetは、あっているようです。 対象のBookとSheetの名前が表示されました。

関連するQ&A

専門家に質問してみよう