[vbaエラー]開始位置32916が有効ではありません。開始位置は32767以内で・・

本業終了後、夜な夜な得意先に導入されるEDIシステムへの対応プログラムを開発。

疲れたよ!

得意先から渡された仕様書を読むと

業界標準の流通BMIシステム

業界標準ってどういう意味かと思ったら、何のことは無い
全業種に対応するために無駄にたくさんの項目が用意されたテーブルを持つシステムでした!

水域・産地名・等級・養殖区分・解凍・部位・カラー名称・・・・

9割以上、加工食品卸業に関係ない項目。

すごくプログラムし難いんですけど、これ!

取り合えずEDIアップロード用「実出荷データ」を用意しcsvエクスポートテスト・・・

すると、見たことのないエラー

フィールドF134の開始位置32916が有効ではありません。
開始位置は32767以内で指定してください。

【VBAエラー】開始位置32916が有効ではありません。開始位置は32767以内で・・


何これ?

原因究明の為、項目文字数・項目数を変えながら何度もテストしたら・・・・・・

エラー原因、わかりました!

項目数が多すぎてMS-Access君がエクスポート用定義を作れないみたい!

なんだ、そんな原因ならTextStreamを使えばいいじゃん!

select caseで項目ごとの固定値も簡単に指定できる。

流通BMI開発は、TextStreamで楽勝ね!
逆に言えば、項目がバカみたいに多い流通BMI、
TextStreamを知らないと開発出来ません。

Private Sub btnEDIexp_Click()

Dim i As Integer
Dim FnameS As String

i = 0
FnameS = "C:\katabe\EDIupload.csv"

Dim FSO As New FileSystemObject
Dim f As File
Dim st As TextStream

Set st = FSO.CreateTextFile("C:\katabe\EDIupload.csv")

Dim cn As ADODB.Connection
Set cn = Application.CurrentProject.Connection
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset

rs.Open "select * from QEDIエクスポートソース", cn, adOpenKeyset, adLockOptimistic


Dim myTEXT As String

myTEXT = ""

'検証用ヘッダー部

    For i = 1 To 188
    
        If i = 188 Then
            myTEXT = myTEXT & "F" & i
        Else
            myTEXT = myTEXT & "F" & i & ","
        End If
    Next i
    
   st.WriteLine (myTEXT)


Do While rs.EOF = False
    myTEXT = ""
    For i = 0 To 187
    
        
    Select Case i
    Case 0
        myTEXT = rs.Fields(i)
    Case 4, 8, 9, 13, 26, 39, 45, 98, 100, 111, 123, 132, 139, 142, 145, 153, 161
       myTEXT = myTEXT & "," & rs.Fields(i)
    Case 5
        myTEXT = myTEXT & ",00" '固定00
    Case 19
        myTEXT = myTEXT & ",03" '固定03
    Case 33
        myTEXT = myTEXT & ",02" '固定02
    Case 66
        myTEXT = myTEXT & ",999" '固定999
    Case 84
        myTEXT = myTEXT & ",00" '固定00
    Case 89
        myTEXT = myTEXT & ",01" '固定01
    Case 133
        myTEXT = myTEXT & "," & Date()
    Case 155
      myTEXT = myTEXT & ",1" '固定1
    Case Else
        myTEXT = myTEXT & ","
    End Select
        
    Next i
    
   st.WriteLine (myTEXT)

 
rs.MoveNext

Loop

rs.Close
cn.Close

st.Close
    
Call Shell("notepad.exe C:\katabe\EDIupdate.csv", 1)

End Sub

これまでの物件は全てヘッダー・フッターが必要だった為、最初からTextStreamで開発してました。
その為、今回のエラーに遭遇しなかったのかな?

One thought

  1. いつも興味深く拝読しております。
    流通BMS、自分はインポートファイルの作成プログラムしか作ったことがありませんが、
    仕様書を見ると毎回ため息が出ますね。
    (A3で印刷してもとても字が小さい)

コメントを残す

メールアドレスが公開されることはありません。