アプリ版:「スタンプのみでお礼する」機能のリリースについて

ご教授願います。
accessのテーブルをcsv形式でエクスポートすると以下のエラーが発生します。エラー回避する方法ありますでしょうか?

■エラーメッセージ
テキストエクスポートウイザード
!フィールドAAの開始位置'32896'が有効ではありません。開始位置は32767以内で指定してください。


データのテーブル列数は230列です。
よろしくお願いいたします

A 回答 (5件)

NO3です。


項目を特に編集(書式)する必要が無いようでしたら、
NO4さんの書き方がスマートです。
NO4さんのソースを参考にどうぞ。
    • good
    • 0

こんな感じで如何でしょ。

標準モジュールでどうぞ。
エラー処理は入れていませんし検証も十分ではありません。
後は適宜アレンジしてください。

Sub csvOut()
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim fld As DAO.Field
Dim s As String
Dim objFs As Object
Dim outFile As Object
Const ForWriting = 2

Set objFs = CreateObject("Scripting.FileSystemObject")
Set outFile = objFs.CreateTextFile("c:\test.csv", ForWriting, True)
'既存の c:\test.csv は上書きされます

Set db = CurrentDb
Set rs = db.OpenRecordset("実際のテーブル名", dbOpenSnapshot)

Do Until rs.EOF
  
  For Each fld In rs.Fields
    
    Select Case fld.Type
      Case 10, 12   'テキストかメモ型の場合
        s = s & Chr(34) & fld.Value & Chr(34) & Chr(44)
      Case Else
        s = s & fld.Value & Chr(44)
    End Select
  
  Next
  
  s = Left(s, Len(s) - 1)
  Debug.Print s
  outFile.writeline s
  s = ""
  rs.MoveNext
Loop

outFile.Close
Set objFs = Nothing
rs.Close: Set rs = Nothing
db.Close: Set db = Nothing
MsgBox "おしまい"
End Sub
    • good
    • 1

具体的な項目名までは 不明ですが


参考までに。
テキスト項目は、"囲む形ですかね?
取りあえず、
1,"ああああ" のように、文字列は””でくくるように
書いています。


Private Sub コマンド0_Click()
Dim DB As DAO.Database
Dim rs As DAO.Recordset
Dim f_out As String
Dim nRtn As Long
Dim strLine As String
On Error GoTo CSV_Go_Err

Set DB = CurrentDb

'砂時計を表示
DoCmd.Hourglass True

f_out = "c:\目的のCSVファイル名.CSV" '変更してください

'ファイルが既に存在する時→確認後ファイルの削除
If Dir(f_out) <> "" Then
If MsgBox("既に目的のCSVファイルが存在します。作成しなおしますか?", vbOKCancel + vbCritical) = vbCancel Then
Exit Sub
End If
Kill f_out 'ファイルを削除する
End If

'新規にCSVを作成する
Open f_out For Output As #1 ' シーケンシャル出力モードでファイルを開きます。
Set rs = DB.OpenRecordset("テーブル1") '変更してください
With rs
Do Until .EOF
strLine = .Fields("数値項目").Value & ","
strLine = strLine & """" & .Fields("テキスト項目").Value & ""","
strLine = strLine & .Fields("数値項目2").Value & ","

'必要なだけ 繰り返し(トータル230項目分)項目名は変更してください

strLine = strLine & """" & .Fields("テキスト項目2").Value & """"
'ファイルへ書き込み
Print #1, strLine
'次のレコードへ
.MoveNext
Loop
End With

CSV_Go_Exit:
Close #1
Set rs = Nothing
DB.Close

'砂時計を表示
DoCmd.Hourglass False
MsgBox ("目的のCSVファイル 作成成功!" & Chr(10) & Err.Description)
Exit Sub

CSV_Go_Err:
MsgBox ("目的のCSVファイル 作成失敗!" & Chr(10) & Err.Description)
Resume CSV_Go_Exit
End Sub
    • good
    • 0

私のacc2000では、



DoCmd.TransferText acExportDelim, , "出力テーブル名","出力ファイルパス" & "\" & "出力ファイル名.csv", true

でレコード数13万件(フィールド数は20くらいですけど)は数秒で問題なく作られました。 これでだめだったら、txt形式でエクスポートしてCSVに変換とか、一件ずつ読んで、一行ずつ書くものをつくるとか、、、(フィールド数が多いとめんどくさいですね。)
    • good
    • 1

テーブルのレコードのサイズが大きすぎるようですね。


回避方法1、テーブルの設計を見直す。
回避方法2、EXCELの上限にかからないのであれば、たぶんEXCELには持っていけるので、EXCELに移した後で、CSV形式で保存する。
回避方法3、VBAで自前でファイル出力する。
ですかね。
1は、テーブルを分散させる様になるので、影響が大きいでしょう。
2は、データの量が不明なので?
3が、一番確実です。

同様の質問がNET上で数件ありました。
「開始位置は32767以内で指定してください」で検索してみてください。
今の方法のままでの、回避は難しいでしょう。
    • good
    • 0
この回答へのお礼

kurodai2様
VBの記述をお願いしたんですが・・
よろしくお願いします。

お礼日時:2007/08/29 12:05

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す


このQ&Aを見た人がよく見るQ&A