• 締切済み

エラーが出ます。 急いでいます。

今までちゃんと動いていたところに以下のソースをつけた所エラーが出てきました。 何かおかしなところがあるのでしょうか? If ADORS.Fields("SAI").Value < 0 Then .TextMatrix(intRow, enmCOL.SAI) = Format(ADORS.Fields("SAI").Value, "#,##0.#0") ElseIf ADORS.Fields("SAI").Value > 0 Then .TextMatrix(intRow, enmCOL.SAI) = Format(ADORS.Fields("SAI").Value, "+#,###.#0") ElseIf ADORS.Fields("ZAIKONUM").Value = ADORS.Fields("ITEMNUM").Value Then .TextMatrix(intRow, enmCOL.SAI) = ADORS.Fields("SAI").Value End If お願いします。

みんなの回答

  • mas_sama
  • ベストアンサー率50% (2/4)
回答No.4

補足 システム構成と実行環境が分かりかねます。 スタンドアロンのプログラムのようにも見えますし クライアント/サーバ(DBMS含む)のプログラムのようにも見えます。 教えていただけませんでしょうか?

  • mas_sama
  • ベストアンサー率50% (2/4)
回答No.3

原因不明のエラーとはなんでしょうか? 異常終了した場合、次の2種類があると思います。  (1)プログラムがエラーハンドリングしていない部分で発生した実行時エラー  (2)メモリリーク等によるクリティカルなエラー 2つのエラーに関して次のようなデバッグ情報がメッセージボックスなどで出力されるハズですが・・・  (1)「エラー番号」と「エラー内容」  (2)「メモリダンプ」と「エラーが発生したプログラム名称」 また、(1)のエラーであればハンドリングしている場合にはログ出力することも可能ですので 既存のプログラムを改造している場合はログファイルにエラー内容が出力されている可能性があります。 (コンパイルエラーがないのが前提です) エラーの内容が把握できない限り、解析作業は困難です。 バグを取り除く作業は(1)~(5)に従い、相談しながら確実に修正しましょう。  (1)エラー原因の解析  (2)原因に対する対処の検討  (3)対処(実装)  (4)対処の効果確認(試験)  (5)対処による既存機能へのデグレード確認(試験) ご参考まで、改造部分にコメントを加えて整理しました。   If isNull(ADORS.Fields("SAI").Value) Then     'SAIがNULLではない場合     If ADORS.Fields("SAI").Value < 0 Then       'SAIがマイナスの場合       .TextMatrix(intRow, enmCOL.SAI) = Format(ADORS.Fields("SAI").Value, "#,##0.#0")     ElseIf ADORS.Fields("SAI").Value > 0 Then       'SAIがプラスの場合       .TextMatrix(intRow, enmCOL.SAI) = Format(ADORS.Fields("SAI").Value, "+#,###.#0")     ElseIf ADORS.Fields("ZAIKONUM").Value = ADORS.Fields("ITEMNUM").Value Then       'SAIが0かつZAIKONUMとITEMNUMが同一の場合       .TextMatrix(intRow, enmCOL.SAI) = ADORS.Fields("SAI").Value     'Else       '上記以外の場合       '処理なし     End If   'Else     'SAIがNULLの場合     '処理なし   End if

  • Azzuri
  • ベストアンサー率68% (34/50)
回答No.2

No.4276でも回答しましたが、新たに質問する場合、 以前の質問を解決にしてもらえないでしょうか。 以下の回答は、No.4276と同じです。 ADORS.Fields("SAI").ValueにNULLが入る事はありませんか。 その場合、NULLを0に置き換えてやる必要があります。 また、以下の ElseIf ADORS.Fields("ZAIKONUM").Value = ADORS.Fields("ITEMNUM").Value Then の条件は、ADORS.Fields("SAI").Value = 0のときだけ判定 されますが、仕様なのでしょうか。 違う場合、If文を別に作成する必要があります。

  • mas_sama
  • ベストアンサー率50% (2/4)
回答No.1

aki08102001さん夜分遅くにお疲れ様です・・・。 できれば、変数定義が分かるように関数全体か、もしくは少し上のラインを見たいのですが・・・^^; ・ADORS.Fields("SAI").Valueの値がNullになっていませんか?(タブン数値型だと思いますが・・・) →If文でNullと0を比較してエラーとなっていませんか? ・.TextMatrixとありますが、MS-FlexGrid(またはVS-FlexGrid)などでしょうか? ・intRow,enmCOLSAIの値はグリッドから逸脱していませんか? ・エラーの番号と内容はどのようなものでしょうか? ・エラー発生行と変数の内容をステップ実行で追ってみましたか?

aki08102001
質問者

補足

お願いします。わかりません。予期せぬエラーが発生しましたです。これが上の部分です。 strSQL = strSQL & "SELECT " strSQL = strSQL & "mstITEM.ITEMCD, " strSQL = strSQL & "mstITEM.ITEMNM, " strSQL = strSQL & "mstITEM.ZAIKONUM, " strSQL = strSQL & "trnTANALOG.ITEMCD AS TITEMCD, " strSQL = strSQL & "trnTANALOG.ITEMNUM, " strSQL = strSQL & "mstHACYU.HACYUNM, " strSQL = strSQL & "(mstITEM.ZAIKONUM - iif(isnull(trnTANALOG.ITEMNUM),0,trnTANALOG.ITEMNUM)) AS SAI, " strSQL = strSQL & "mstGROUP.GROUPNM " strSQL = strSQL & "FROM ((mstITEM " strSQL = strSQL & "LEFT JOIN trnTANALOG ON mstITEM.ITEMCD = trnTANALOG.ITEMCD) " strSQL = strSQL & "LEFT JOIN mstGROUP ON mstGROUP.GROUPCD = mstITEM.GROUPCD) " strSQL = strSQL & "LEFT JOIN mstHACYU ON mstHACYU.HACYUCD = mstITEM.SIIRECD " If PstrWHERE <> "" Then strSQL = strSQL & " WHERE " & PstrWHERE strSQL = strSQL & " AND SETFLG = 0 " If chkHAISI.Value = 1 Then strSQL = strSQL & " AND mstITEM.ZAIKONUM <> iif(isnull(trnTANALOG.ITEMNUM),0,trnTANALOG.ITEMNUM) " End If Else strSQL = strSQL & " WHERE SETFLG = 0 " If chkHAISI.Value = 1 Then strSQL = strSQL & " AND mstITEM.ZAIKONUM <> iif(isnull(trnTANALOG.ITEMNUM),0,trnTANALOG.ITEMNUM) " End If End If strSQL = strSQL & "ORDER BY mstITEM.GROUPCD, mstITEM.ITEMCD " End If If bfOpenRecSetReadR(CURRENTDB, strSQL, ADORS, , lngRecCnt) = False Then MsgBox MSG_DBERR_MSG, vbCritical + vbOKOnly, MSG_SYSERR_TITLE GoTo END_ROUTIN End If If lngRecCnt = 0 Then vsgTANA.Rows = 1 GoTo END_ROUTIN End If intRow = 1 With vsgTANA .Rows = 1 Do Until ADORS.EOF .Rows = .Rows + 1 .TextMatrix(intRow, enmCOL.ITEMCD) = IIf(IsNull(ADORS.Fields("ITEMCD").Value), ADORS.Fields("TITEMCD").Value, ADORS.Fields("ITEMCD").Value) .TextMatrix(intRow, enmCOL.GROUPCD) = IIf(IsNull(ADORS.Fields("GROUPNM").Value), "指定なし", _ ADORS.Fields("GROUPNM").Value) .TextMatrix(intRow, enmCOL.ITEMNM) = ADORS.Fields("ITEMNM").Value .TextMatrix(intRow, enmCOL.HACYUNM) = IIf(IsNull(ADORS.Fields("HACYUNM").Value), "", _ ADORS.Fields("HACYUNM").Value) .TextMatrix(intRow, enmCOL.ZAIKONUM) = ADORS.Fields("ZAIKONUM").Value .TextMatrix(intRow, enmCOL.TANALOG) = IIf(IsNull(ADORS.Fields("ITEMNUM").Value), "棚卸データなし", _ ADORS.Fields("ITEMNUM").Value)

関連するQ&A

  • エクセルのVBA、ループ処理について

    if文とループ処理をどう組み合わせればいいのかわかりません 以下のコードで、iの数をを増やしていく処理を行いたいのですが、エラーがでてしまいうまくいきません どのように書けばいいのでしょうか 教えてください For i = 2 To 11 If Cells("4,i") > 80 Then Cells("5,i").Value = "A" ElseIf Cells("4,i") > 70 Then Cells("5,i").Value = "B" ElseIf Cells("4,i") > 60 Then Cells("5,i").Value = "C" Else Cells("4,i").Value = "D" End If Next

  • コンパイルエラー「プロシージャが大きすぎます」とのエラーが出ます

    セルに入力する値によって、重複した場合にセルの色が変化するようにVBAで記述しましたが、設定した行数が多すぎて、コンパイルエラー「プロシージャが大きすぎます」とのエラーが出ます。小さく記述するにはどの様に書いたらよいでしょうか?ご指導お願いいたします。 記述したVBAは下記とおりです。約35行ほどでエラーです。 Private Sub Worksheet_Change(ByVal Target As Range) Set myRng = Range("B2") '2行目の設定 For Each c In myRng If c.Value = "" Then c.Interior.ColorIndex = 2 'B2が空白ならばセルの色を白色 ElseIf c.Value = Range("I2") Then c.Interior.ColorIndex = 3 'B2=I2ならばセルの色を赤色 ElseIf c.Value = Range("J2") Then c.Interior.ColorIndex = 6 'B2=J2ならばセルの色を黄色 ElseIf c.Value = Range("K2") Then c.Interior.ColorIndex = 6 'B2=K2ならばセルの色を黄色 ElseIf c.Value = Range("L2") Then c.Interior.ColorIndex = 8 'B2=L2ならばセルの色を青色 ElseIf c.Value = Range("M2") Then c.Interior.ColorIndex = 8 'B2=M2ならばセルの色を青色 Else c.Interior.ColorIndex = xINone End If Next c Set myRng = Range("C2") '2行目の設定 For Each c In myRng If c.Value = "" Then c.Interior.ColorIndex = 2 'C2が空白ならばセルの色を白色 ElseIf c.Value = Range("I2") Then c.Interior.ColorIndex = 6 'C2=I2ならばセルの色を黄色 ElseIf c.Value = Range("J2") Then c.Interior.ColorIndex = 6 'C2=J2ならばセルの色を黄色 ElseIf c.Value = Range("K2") Then c.Interior.ColorIndex = 6 'C2=K2ならばセルの色を黄色 ElseIf c.Value = Range("L2") Then c.Interior.ColorIndex = 8 'C2=L2ならばセルの色を青色 ElseIf c.Value = Range("M2") Then c.Interior.ColorIndex = 8 'C2=M2ならばセルの色を青色 Else c.Interior.ColorIndex = xINone End If Next c Set myRng = Range("D2") '2行目の設定 For Each c In myRng If c.Value = "" Then c.Interior.ColorIndex = 2 'D2が空白ならばセルの色を白色 ElseIf c.Value = Range("I2") Then c.Interior.ColorIndex = 6 'D2=I2ならばセルの色を黄色 ElseIf c.Value = Range("J2") Then c.Interior.ColorIndex = 6 'D2=J2ならばセルの色を黄色 ElseIf c.Value = Range("K2") Then c.Interior.ColorIndex = 6 'D2=K2ならばセルの色を黄色 ElseIf c.Value = Range("L2") Then c.Interior.ColorIndex = 8 'D2=L2ならばセルの色を青色 ElseIf c.Value = Range("M2") Then c.Interior.ColorIndex = 8 'D2=M2ならばセルの色を青色 Else c.Interior.ColorIndex = xINone End If Next c      ・      ・ End Sub

  • エクセル ダブルクリックで処理日の入力

    お世話になります。 先般、お教え頂きました別のダブルクリックイベントプロシージャと 下記の当日の日付を入力するという処理を同じシート上で行いたいのですが、VBエディターにどのように記述したら良いかわかりません。 当方、かなりの初心者です。 よろしくご教授くださいませ。 【新しく加えたい処理】 Option Explicit Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Intersect(Target, Range("b4:C999")) Is Nothing Then Exit Sub If ActiveCell = "" Then ActiveCell = Date Cancel = True End If End Sub 【もともと使っている処理】 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Not Intersect(Target, Range("h1:h999")) Is Nothing Then With Target If .Value = "" Then .Value = "有" ElseIf .Value = "有" Then .Value = "無" ElseIf .Value = "無" Then .Value = "" End If End With ElseIf Not Intersect(Target, Range("i1:i999")) Is Nothing Then With Target If .Value = "" Then .Value = "要" ElseIf .Value = "要" Then .Value = "不要" ElseIf .Value = "不要" Then .Value = "" End If End With End If End Sub よろしくお願いします。

  • オブジェクトエラーが出る

    フォームの切り替え時に 同じマクロを使いたく(機能は同じなので) MultiPage1が1枚目の時と2枚目の時で 入力するコンボボックスを変えておこうとしたのですが エラーで動かないようです。 If MultiPage1.Value = 0 Then COMBX = "ComboBox1" ElseIf MultiPage1.Value = 1 Then COMBX = "ComboBox7" End If name = "シート名" Set ws = ThisWorkbook.Worksheets(name) i = 2 Do Until ws.Cells(i, 9) = "" COMBX.AddItem ws.Cells(i, 9).Value **********ここでエラー i = i + 1 Loop

  • エクセルVBAで無限ループ

    教えてください。 以下の2つのエクセルマクロはまったく同じことをさせようとしているのですが、test02の方は.Offset(1).Activateが働かないのか、無限ループに陥ってしまいます。 単にActiveCell.という記述をWith~End Withでまとめただけなのになぜこうなるのでしょうか? Sub test01() ActiveSheet.Cells(1, 1).Activate Do While ActiveCell.Value <> "" If Not IsNumeric(ActiveCell.Value) Then ActiveCell.Offset(0, 1).Value = "文字" ElseIf ActiveCell.Value > 0 Then ActiveCell.Offset(0, 1).Value = "正数" ElseIf ActiveCell.Value < 0 Then ActiveCell.Offset(0, 1).Value = "負数" Else ActiveCell.Offset(0, 1).Value = "その他" End If ActiveCell.Offset(1).Activate i = i + 1 Application.StatusBar = i Loop End Sub Sub test02() ActiveSheet.Cells(1, 1).Activate With ActiveCell Do While .Value <> "" If Not IsNumeric(.Value) Then .Offset(0, 1).Value = "文字" ElseIf .Value > 0 Then .Offset(0, 1).Value = "正数" ElseIf ActiveCell.Value < 0 Then .Offset(0, 1).Value = "負数" Else .Offset(0, 1).Value = "その他" End If .Offset(1).Activate i = i + 1 Application.StatusBar = i Loop End With End Sub

  • エクセル VBAで

    はじめまして。 VBA初心者です。 エクセルVBAで以下のことをしようとしていますが、 「型が一致しません」とエラーが出ます。 何がおかしいのでしょうか。 やろうとしていることは、以下のようなことです。 G2に入っている値を参照し>0なら、H2に”上昇”と表示。 <0なら、”下降”、=0なら”トンボ”と表示させ、G3以降も G列にデータが入っている限りそのように表示したいと思っております。 よろしくお願いいたします。 Sub 陰陽() If Range("G2:G10000").Value > 0 Then Range("H2:H10000").Value = "上昇" ElseIf Range("G2:G10000").Value < 0 Then Range("H2:H10000").Value = "下降" ElseIf Range("G2:G10000").Value = 0 Then Range("H2:H10000").Value = "トンボ" End If End Sub

  • VBAでelseに対応するifがありませんとエラー

    VBA初心者です 入力した数値(0から5)により、呼んでくる列を変えたいマクロを組んでいます if then elseif end ifで条件式を作ったのですが、 「elseに対応するifがありません」とエラーが出て進みません elseifが悪いのかと思い、条件を1つに絞ると上手く動きます(この際はendifは不要) ネット検索や参考書を見てますが、分かりません どなたか間違いを指摘して頂けませんか? Sub inputboxA() Dim nDat As String nDat = inputbox("何ヶ月目ですか?") If IsNumeric(nDat) = False Then MsgBox ("0から5までの値を入力して下さい") Exit Sub End If If nDat = 0 Then mm = 16 '0なら16列からデータを呼んでくる ElseIf nDat = 1 Then mm = 20 'ここでエラーが出る  1なら20列目からデータを呼んでくる ElseIf nDat = 2 Then mm = 24 '2なら24列目からデータを呼んでくる ElseIf nDat = 3 Then mm = 28 '3なら28列目からデータを呼んでくる ElseIf nDat = 4 Then mm = 32 '4なら32列目からデータを呼んでくる ElseIf nDat = 5 Then mm = 36 '5なら36列目からデータを呼んでくる End If 'データを呼んでくる For r = 4 To 2000 '処理するSheet1の行数範囲 b = Sheets(1).Cells(r, 1) 'bにA列の値を代入 For t = 6 To 2000 '検索するSheet3の行数範囲 If Sheets(3).Cells(t, 7) = b Then 'Sheet1のA列の値とSheet3のA列が一致した場合 y = Sheets(3).Cells(t, mm) 'yにB列の値を代入 Sheets(1).Cells(r, 6).Value = y 'Sheet1のB列に値を入力 Exit For '値が見つかったのでForを終了 End If Next Next End Sub

  • このVBA、もうちょっとシンプルにできないですか?

    自力でVBAを書いてみたのですが、長くなってしまいました。 もうちょっとシンプルにするアイディアがあればお願いします。 やりたいことは、 (1)ユーザーフォームのテキストボックス内が空欄だったら「無視」 (2)テキストボックスの中が空欄でなければ「書き込み」 以上のことをやりたいのですが、テキストボックスが6種類あるので単純に記述すると結構長くなってしまいました。 特に問題がなければ、その旨をお願いします。 If TextBox1 = "" Then If TextBox2 = "" Then If TextBox3 = "" Then If TextBox4 = "" Then If TextBox5 = "" Then If TextBox6 = "" Then MsgBox ("得点が入力されていません。") ElseIf TextBox6 <> "" Then Sheets("総合(得点)").Cells(t + 9, u) = TextBox6.Value End If ElseIf TextBox5 <> "" Then Sheets("総合(得点)").Cells(t + 8, u) = TextBox5.Value ElseIf TextBox6 <> "" Then Sheets("総合(得点)").Cells(t + 9, u) = TextBox6.Value End If End If ElseIf TextBox4 <> "" Then Sheets("総合(得点)").Cells(t + 7, u) = TextBox4.Value If TextBox5 <> "" Then Sheets("総合(得点)").Cells(t + 8, u) = TextBox5.Value If TextBox6 <> "" Then Sheets("総合(得点)").Cells(t + 9, u) = TextBox6.Value End If End If End If ElseIf TextBox3 <> "" Then Sheets("総合(得点)").Cells(t + 6, u) = TextBox3.Value If TextBox4 <> "" Then Sheets("総合(得点)").Cells(t + 7, u) = TextBox4.Value If TextBox5 <> "" Then Sheets("総合(得点)").Cells(t + 8, u) = TextBox5.Value If TextBox6 <> "" Then Sheets("総合(得点)").Cells(t + 9, u) = TextBox6.Value End If End If End If End If ElseIf TextBox2 <> "" Then Sheets("総合(得点)").Cells(t + 5, u) = TextBox2.Value If TextBox3 <> "" Then Sheets("総合(得点)").Cells(t + 6, u) = TextBox3.Value If TextBox4 <> "" Then Sheets("総合(得点)").Cells(t + 7, u) = TextBox4.Value If TextBox5 <> "" Then Sheets("総合(得点)").Cells(t + 8, u) = TextBox5.Value ・ ・ ・ こんな感じで規則的に記述しただけです。(文字数が多いので最後は省略しました) 段差がなくて見づらいですが、宜しくお願いします。

  • VBAについて

    以下のプログラムは、1年間の価格合計を求めるプログラムです。 これを実行するとうまくいくこともありますが、エラーが起きることもあります。 どうやら下記コードが原因のようなのですが、間違いがわかりません。 Target.Offset(0, 1).Value = run * (13 - month) どこが間違っているのでしょうか。 また最終的に、A行かB行のどちらかが更新されたときにこのプログラムを 実行させたいのですが、方法がわかりません。 無知な質問ではありますが、どなたか教えてください。 --------------------------------------------------------- Private Sub Worksheet_Change(ByVal Target As Range) Dim month As Integer Dim run As Integer If Intersect(Target, Range("A25:A35")) Is Nothing Then Exit Sub Else If Target.Offset(0, -2).Value <> "" Then month = Target.Offset(0, -2).Value month = month - 3 If month = -2 Then month = 10 ElseIf month = -1 Then month = 11 ElseIf month = 0 Then month = 12 End If run = Target.Offset(0, 0).Value Target.Offset(0, 1).Value = run * (13 - month) End If End If End Sub

  • エクセルマクロで「1」を「01」に変換したい

    エクセルマクロで、セルに入力された数値を、 変換するマクロを以下のように作成したのですが、 もっと簡単な方法はないのでしょうか。 やりたいことは、 「1」で入力された値を「01」に変換することです。 よろしくお願いします。 c = Sheets("Sheet1").Cells(1, 1).Value If c = 1 Then c = "01" ElseIf c = 2 Then c = "02" ElseIf b = 3 Then c = "03" ElseIf c = 4 Then c = "04" ElseIf c = 5 Then c = "05" ElseIf c = 6 Then c = "06" ElseIf c = 7 Then c = "07" ElseIf c = 8 Then c = "08" ElseIf c = 9 Then c = "09" End If

専門家に質問してみよう