2016-08-01 30 views
0

下午好所有的細胞,試圖在Excel導出至CSV只包含數據

我建立一個Excel工作表的我的同事使用生成CSV文件。我需要得到一個帶有標題行的輸出,然後是表單中的所有數據。它不會超過40行,但可能會減少行數。我目前在表格中有很多公式,爲我的同事完成繁重的工作,例如從輸入數據中生成用戶名等。我需要讓他們點擊一個按鈕,並在另一端獲取CSV文件。我目前的問題如下。

1)即使逗號不在輸入數據中,我的CSV在每個字段中都包含雙引號。我需要防止這種情況,因爲我們正在向這些CSV文件提供的程序不像雙引號AT ALL。是的,我知道你可以在記事本中打開它,並全部替換它們以刪除它們,但是我試圖構建一個單擊解決方案,因爲使用它的一些人不太懂技術。

2.)我的宏目前正在導出所有四十行數據。我需要它只導出包含數據的行。從理論上講,使用構建的公式不應該有「部分」行,只有整行或空行。

3.)當生成CSV文件時,它根本不附加文件類型,我需要它來指定.txt。文件類型,如果可能的話,我們提供的這些程序非常挑剔。

Sub CommandButton1_Click() 
Dim filename As String 
Dim myFile As String, rng As Range, cellValue As Variant, i As Integer, j As Integer 

filename = InputBox("Please enter file name", "Save as CSV", "CSV_" & Format(Now, "DD_MM_yyyy")) 
myFile = Application.DefaultFilePath & filename 

Set rng = Range("A1:J41") 

Open myFile For Output As #1 

    For i = 1 To rng.Rows.Count 
     For j = 1 To rng.Columns.Count 

      cellValue = rng.Cells(i, j).Value 

       If j = rng.Columns.Count Then 
        Write #1, cellValue 
         Else 
        Write #1, cellValue, 
       End If 
     Next j 
    Next i 

Close #1 

末次

+0

這些雙引號來自哪裏?它們在您填充.csv時出現,還是在現有的cellValues中? –

+0

經過半個小時的代碼試驗後,我發現實際上有一個超級簡單的方法來做到這一點。只需使用「另存爲」 - >選擇CSV - >如果您的工作簿有多個表格,則會彈出提示,詢問您是否只想保存活動工作表。推'是' - >你完成 –

+0

只是一個快速澄清領域。 你說過並非所有的40行都可能有數據。數據是連續的行還是空白的?即如果在行1-5中有5行dat,或者它們是否在行1,2,4,6,9中? – viper941

回答

0

這是你的代碼將不得不樣子。不幸的是,我無法擺脫雙引號,也許別人有一個想法。

Sub csvExport() 
Dim filename As String 
Dim myFile As String, cellValue As Variant, i As Integer, j As Integer 
Dim ws As Worksheet 

filename = "\" & InputBox("Please enter file name", "Save as CSV", "CSV_" & Format(Now, "DD_MM_yyyy")) & ".txt" 
myFile = Application.DefaultFilePath & filename 

    Set ws = Worksheets("YOURSHEETNAME") 

    With ws 

    Open myFile For Output As #1 

    For i = 1 To .UsedRange.Rows.Count 
     For j = 1 To .UsedRange.Columns.Count 

      cellValue = .Cells(i, j).Value 
       If j = .UsedRange.Columns.Count Then 
        Write #1, cellValue 
         Else 
        Write #1, cellValue, 
       End If 
     Next j 
    Next i 

Close #1 
End With 

End Sub