Datarow[ ]への代入でエラーが起きる

Datarow()型変数Rowsへ、倉庫マスタから引き当てたdatarowを格納したいです。

Rows = 倉庫マスタ.Select(“[JAN Code] = '” & str_SKU &“'”)

いつも問題なく動作していたのですが、マスタ(Excel)を更新したところ、次のようなエラーが発生してしまいました。
“message”: "代入:Rows: Min (3145) must be less than or equal to max (-1) in a Range object.

原因としてどんなことが考えられるでしょうか。

前提:
問題なく動作していた更新前の倉庫マスタExcelは3283行ありました。
そこから下に15行の新しいデータを追加したところ、エラーになっています。
更新前からある3283行分のExcelデータや、ワークフローに変更はありません。
エラーが出るのは、3298行のデータを使用したときはいつも同じstr_SKUでselectした時です。(エラーが出現しないstr_SKUの値もあります。)

こんにちは

まずは エラー発生時のstr_SKUの中身を確認すると良いかと思います。

こんにちは、いつもありがとうございます。

str_SKUの中身については、特に異常は見つかりません。
str_SKUは13桁の数字ですが、String型として読み込めています。

前提をいくつか書き足しました。ほかに検討するべきか所はありますでしょうか。。

こんにちは

エラーからしますとRowsの操作が問題のように思えますが、上記代入ではそのようなエラーは起きないように思えます。エラーが発生しているのはこの代入アクティビティで間違いないでしょうか?

エラーが出ているアクティビティはここで間違いないのです。
全貌をお見せできるとよいのですがそうもいかず。。

この下の処理では、Rowsが1以上あるかどうかで処理を分岐させているのですが、
ほかにやり方はありますでしょうか。

過去に同じ問題がいくつか出ているようです。
解決策の一つとして提示されているものに
「JANCode]を文字型にキャストした項目を作って、そちらを対象にselectする
といったものがあるようです。

1 Like

アクティビティの表示名が「代入」だけではなく以降のものも表示名だったのですね。
型の違いによるものと思いますがDataTable.Selectメソッドはこのあたりのコントロールが面倒なので、LINQで記述したほうが楽ではないかと思います。例えば以下になります。

Rows = 倉庫マスタ.AsEnumerable.Where(Function(r) r("JAN Code").ToString=str_SKU).ToArray()
1 Like

minami様、 Yoichi様、ありがとうございます。

急にエラー出るようになった原因は謎ですが、
おふたりのアドバイスをもとにどちらの方法でもエラー出ないことが確認できました。

Rows = 倉庫マスタ.Select("Convert([JAN Code], System.String) = '" & str_SKU &"'")

Rows = 倉庫マスタ.AsEnumerable.Where(Function(r) r("JAN Code").ToString=str_SKU).ToArray()

大変助かりました。ありがとうございました。

This topic was automatically closed 3 days after the last reply. New replies are no longer allowed.