停止访问将两组双引号写入csv

时间:2016-10-14 11:27:44

标签: vba csv ms-access

因此,我使用记录集的输出并写入csv文件。但是我的引号出现了问题。理想情况下,我希望将它们包含为文本标记。但如果我将它们包含在我的文本行中,它们将被打印为两组引号。

我想将此作为输出(由制表符分隔):

  

"头1" " HEADER2" " ...... [] ...." headerX"

我试过这个

Sub Write_Tbl(Filename, StrSQL)
Dim unicode, UTF, i As Long , Fileout As Object, forwriting,  TristateUseDefault, TxtStr As String, TextHolder As String, rs As Recordset

Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")

Dim File_out As Object
Set File_out = fso.CreateTextFile(Filename, True, unicode = UTF - 8)
File_out.Close

Open Filename For Output As #1

Set rs = CurrentDb.OpenRecordset(StrSQL)
rs.MoveFirst

'for headers
    TxtStr = rs.Fields.Item(0).Name         'so that there isn't a tab at the start of the string

For i = 1 To rs.Fields.Count - 1

TxtStr = TxtStr & chr(34) & vbTab & chr(34) & rs.Fields.Item(i).Name
Next i

Write #1, TxtStr & chr(34)          'write headers to file

并将其作为输出

  

""头1"" "" HEADER2"" "" ...... [] ...."" headerX""

所以我删除了引号并得到了这个:

'for headers
    TxtStr = rs.Fields.Item(0).Name         'so that there isn't a tab at the start of the string

For i = 1 To rs.Fields.Count - 1

TxtStr = TxtStr & vbTab & rs.Fields.Item(i).Name
Next i

Write #1, TxtStr          'write headers to file

和我得到的是

  

" Header1 header2 ...... [] .... headerX"

如果我在本地窗口中监控变量,那么只有一组引号,所以它必须与打印有关吗?如果我使用单引号(ascii no 39)就不会发生这种情况。我也尝试过使用write to file而不是文本流,但是我遇到了内存问题并且ERROR 5 issues. STUMPED。请帮忙。

1 个答案:

答案 0 :(得分:1)

如果您已在VBA中准备好文本字符串,则应使用Print #语句而不是Write #

文档:Print #Write #

  

Print#语句不同, Write#语句会在字符串写入文件时在字符串和引号之间插入逗号。

注意:

我不确定这些函数是否完全写入Unicode,或者关心文件的创建方式。

Open Filename For Output As #1
如果文件不存在,

将创建该文件,因此您可以省略整个CreateTextFile部分。

或者使用File_out.WriteLine()代替,混合两种方法(FSO和古老的Print / Write语句)似乎很奇怪。

修改:请参阅How to create and write to a txt file using VBA