2016-09-17 67 views
2

我想用Excel VBA中 我试过很多代码的简单的Excel文件转换成CSV(管道分隔) 文件到CSV文件(管道分隔),但不能得到预期的输出如何转换Excel中使用Excel的VBA

following code I tried 

     Sub mergeFiles() 
     Dim xlwkbInput1 As Workbook 
     Dim xlshtInput1 As Worksheet 
     Dim xlwbfinalrpt As Workbook 
     Dim xlshtfinalrpt As Worksheet 

     Dim rcount1 As Long 

     Dim xlwkbInput2 As Workbook 
     Dim xlshtInput2 As Worksheet 
     Dim xlapp As Excel.Application 


     Set xlapp = New Excel.Application 
     xlapp.Visible = True    

      Set xlwkbInput1 = xlapp.Workbooks.Open(ActiveWorkbook.Path & "\Output\Operative_CashFlow_Report.xlsx") 
      Set xlwkbInput2 = xlapp.Workbooks.Open(ActiveWorkbook.Path & "\Output\Collection_CashFlow_Report.xlsx") 

      xlwkbInput2.Sheets("Sheet1").Activate 
      xlwkbInput2.ActiveSheet.UsedRange.Copy 

      xlwkbInput1.Sheets("Sheet1").Activate 
      rcount = xlwkbInput1.ActiveSheet.UsedRange.Rows.Count 

      xlwkbInput1.Sheets("Sheet1").Range("A" & CStr(rcount + 1)).PasteSpecial 

      xlwkbInput1.UsedRange("$A$1:$I$274").AutoFilter Field:=1, Criteria1:=Array(_ 
      "LIC106", "LIC107", "LIC134", "LIC138", "="), Operator:=xlFilterValues 
      xlwkbInput1.UsedRange.Delete    
      xlwkbInput1.SaveAs ActiveWorkbook.Path & "\Output\final_report.xlsx"    
      Set xlwbfinalrpt = xlapp.Workbooks.Open(ActiveWorkbook.Path & "\Output\final_report.xlsx")  
      xlwbfinalrpt.Sheet("Sheet1").Activate 

      xlwbfinalrpt.SaveAs ActiveWorkbook.Path & "\Output\final_report.xlsx"  

    xlwbfinalrptwb = Workbooks.Open (ActiveWorkbook.Path & "\Output\final_report.xlsx" 

     xlwbfinalrptwb .SaveAs fileName:=ActiveWorkbook.Path & "\Output\final_report.xlsx" 
    , FileFormat:=xlCSV, CreateBackup:=False 

“在这里,我在做的Excel转换到CSV文件

End Sub 
+0

太棒了!你试过什么代码?你期望什么产出?你得到了什么产出?你能提供样本数据吗?尽管有些人可能会在StackOverflow帮助我,但我还没有遇到一位心灵读者。请更详细地编辑您的问题,因为目前它是一个广泛问题的定义。 – Kroltan

+0

谢谢#krottan实际的任务是我打开一个excel文件并做一些过滤并将此文件另存为CSV FILE(管道分隔符)在excel vba –

+0

我明白了。但是你做了什么,来完成这项任务?发布代码,错误(如果有的话)以及一些数据和预期输出,以便我们可以帮助您。尝试制作[mcve]。 – Kroltan

回答

2

您可以保存一个Excel文件作为逗号分隔或制表符分隔而不是管道分隔。

以下是如何实现管道分隔的输出。

Basic示例

只是为了在这里显示的基本面。

Sub Writing_to_a_text_file() 
    Dim N As Integer 
    Dim FileName As String 

    'Define where to save the output file. 
    FileName = Environ("USERPROFILE") & "\Desktop\" & "Sample1.csv" 

    'Get a free file number 
    N = FreeFile 

    Open FileName For Output As #N 
     '"Print" print data into the file. Another method is "Write". 
     'Both do the same job but behave slightly differently. Try Google it. 
     Print #N, "This is a test" 
     Print #N, "Writing another line here" 
     Print #N, Join(Array("Pipe", "delimited", "line", "here"), "|") 
     Print #N, vbNullString '<- this create an empty line 
    Close N 
End Sub 

出口的一系列管道分隔格式数据转换为文本文件

Sub ExportToTextFile() 
'Export range("A1:E10") data to a text file in pipe delimited format. 
    Dim N As Integer 
    Dim FileName As String 
    Dim R As Long, C As Long, DataLine As String 

    FileName = Environ("USERPROFILE") & "\Desktop\" & "TextOutput.csv" 

    N = FreeFile 

    Open FileName For Output As #N 
     For R = 1 To 10 
      DataLine = vbNullString 
      For C = 1 To 5 
       DataLine = DataLine & "|" & Cells(R, C).Value2 
      Next C 
      DataLine = Right(DataLine, Len(DataLine) - 1) 
      Print #N, DataLine 
     Next R 
    Close N 
End Sub 
0

如果你只是想走出节省纸张作为管道分隔文件,那么这应该为你工作:

Sub DelimFile() 

Open "C:\output.txt" For Output As 1 'Change this path 

rowno = 1 
colcount = Application.CountA(ActiveSheet.Rows(1)) 
While activesheet.Cells(rowno, 1) <> "" 
    dataout = "" 
    For c = 1 To colcount 
     If c <> colcount Then 
      dataout = dataout & """" & Trim(activesheet.Cells(rowno, c)) & """|" 
     Else 
      dataout = dataout & """" & Trim(activesheet.Cells(rowno, c)) & """" 
     End If 
    Next c 
    Print #1, dataout 
    rowno = rowno + 1 
Wend 
Close #1 
End Sub