0

さまざまなサイトから収集したコードを使用して、各レコードの区切り記号を持つフラット ファイルを読み取りました。このコードは、ファイル内のレコード数が 505 を超えると実行時エラー 6 エラーが発生することを除いて、うまく機能します。これについて何をすべきかを手伝ってもらえますか?私は VBA のバックグラウンドを持っていませんが、他の人からの質問を使用して、このコードをアプリケーション用にまとめました。

Sub Posting()

Dim RowNdx As Long
Dim ColNdx As Integer
Dim TempVal As Variant
Dim WholeLine As String
Dim Pos As Integer
Dim NextPos As Integer
Dim SaveColNdx As Integer
Dim FName As String

Range("A2").Select
   Range(Selection, Selection.End(xlDown)).Select
   Range(Selection, Selection.End(xlToRight)).Select
   Application.CutCopyMode = False
   Selection.ClearContents
   Range("A1").Select


Application.ScreenUpdating = False
'On Error GoTo EndMacro:

Sep = "@"

FName = Application.GetOpenFilename


If sFileName = "False" Then Exit Sub

Cells(1, 8).Value = Mid(FName, Len(FName) - 8, 4)

SaveColNdx = ActiveCell.Column
RowNdx = ActiveCell.Row

Open FName For Input Access Read As #1

While Not EOF(1)
    Line Input #1, WholeLine
     If Right(WholeLine, 1) <> Sep Then
         WholeLine = WholeLine & Sep
    End If
    ColNdx = SaveColNdx
    Pos = 1
    NextPos = InStr(Pos, WholeLine, Sep)
     While NextPos >= 1
        TempVal = Mid(WholeLine, Pos, NextPos - Pos)
        Cells(ColNdx, RowNdx).Value = TempVal
        Pos = NextPos + 1
        ColNdx = ColNdx + 1
        NextPos = InStr(Pos, WholeLine, Sep)
    Wend
RowNdx = RowNdx + 1
Wend

実行時エラー 6 オーバーフローが表示されていますNextPos = InStr(Pos, WholeLine, Sep)

4

1 に答える 1

3

Integer として宣言するNextPosと、32768 までの数値が可能になります。InStr(これよりも大きい値が返されると、Overflowエラーが発生します。

データ型を に変更するだけLongで問題は解決します!

また、パラメーターを混同していると思います -行が最初のパラメーターで、列が2番目のパラメーターでCells(ColNdx, RowNdx)あることに注意してください!Cells

ところで:テキストを手動で分割する代わりに、組み込みSplit関数を使用することもできます。

Dim varSplitted as Variant

...
While Not EOF(1)
    Line Input #1, WholeLine
    varSplitted = Split(WholeLine, Sep)
    Range(RowNdx,SaveColNdx).Resize(, UBound(varSplitted, 1)+1) = varSplitted
    RowNdx = RowNdx + 1
Wend
于 2013-03-09T21:45:14.060 に答える