2014-09-26 65 views
0

我有一个excel宏,我们的财务团队将使用它将excel文件转换为特定格式(逗号分隔txt),以便他们可以将数据导入到我们的系统。这个宏很好,除了一个例外。最终文件需要有5个字段:账号,卡号,日期,交易代码,金额。使用VBA在一行文本文件中计数逗号

只有帐号或卡号是强制性的 - 你不需要两个。问题在于,当将Excel文件保存为以逗号分隔的文件(手动或使用宏)并且没有帐号(即所有记录仅使用卡号)时,第一列为空(文件没有标题),然后用逗号分隔的文件只保存4个字段,从卡号开始 - 它应该以空白字段开始,即用 直接逗号 - 我们的系统现在拒绝这些文件。

这样可以节省这样的:

1944210004744845,20092014,931,2191.33 

应该保存这样的:

,1944210004744845,20092014,931,2191.33 

只要是在某个地方在第一列的一切一个帐号是好的。

我不希望我们的开发人员进行更改,因此我在考虑在保存txt文件之后在宏的末尾添加一段文件,该文件将计算第一行txt中的逗号数文件,如果只有3个逗号,它必须在文件中的每个记录之前添加一个逗号。

有人可能会帮助这一点,因为我不知道该怎么做。或者也许有更好的办法?在串

回答

1

与一个名为位于C 'myfile.txt的' 文件开始:\ TEMP目录如下:

enter image description here

运行这段代码:

Sub readTXT() 
    Dim FilePath As String 
    Dim strFirstLine As String 

    FilePath = "C:\temp\myFile.txt" 

    'Load txt file into array 
    Open FilePath For Input As #1 
    dataArray = Split(Input$(LOF(1), #1), vbLf) 
    Close #1 

    'Test first line if it has three commas 
    If Len(dataArray(0)) - Len(Replace(dataArray(0), ",", "")) = 3 Then 
     'Add comma to start of strings 
     For i = LBound(dataArray) To UBound(dataArray) 
      dataArray(i) = "," & dataArray(i) 
     Next i 

     'Creat new file 
     FilePath = Left(FilePath, Len(FilePath) - 4) & "_Comma.txt" 
     Open FilePath For Output As #2 

     'Write to new file modified data 
     For Each Line In dataArray 
      Print #2, Line 
     Next Line 

     Close #2 
    End If 
End Sub 

结果是一个新的文件名为myFile_Comma.txt看起来像这样:

enter image description here


您不必保存到一个新的文件,但如果事情出错会让回头更容易。

+0

This works great除了文本文件中的每一行现在都以问号结尾 - 我怎样才能从整个文件中删除它们? – user2725402 2014-09-28 14:54:37

+0

一种方式,在“Print”行之前加上这一行:'Line = Left(Line,Len(Line) - 1)'。它只是删除最后一个字符。如果它不总是'?'然后像这样测试它:'如果Right(Line,1)=“?”然后Line = Left(Line,Len(Line) - 1)' – 2014-09-28 15:37:11

0

计数字符: Count specific character occurrences in string

迭代通过行简单的例子整个文件行:

dim c as Range 
Set c = Range("A1") 
do until IsEmpty(c.Value) 
    if countTheCharacters(c.Value,",") < 3 then 
    c.Value = "," & c.Value 
    end if 
    set c = c.Offset(1,0) 
loop 
+0

我该如何在文本文件中做这件事,即我的范围根本不会在我的工作簿中,如果第一行只包含3个逗号,那么这将是一个需要打开和编辑的txt文件 – user2725402 2014-09-26 07:12:38