2017-09-12 45 views
1

我有一個與Visual Basic的問題,我想生成一個csv只有3列,這將是BMR,我有一個代碼在這裏,但它不僅生成3列,但整個工作表,你能幫我嗎?保存3作爲CSV的工作表的列(與VBA)

Sub GravaTXT() 
    Dim pasta As Workbook 
    Dim abaPlan As Worksheet 
    Dim b As Range 
    Dim m As Range 
    Dim r As Range 
    Dim name As String 
    name = Range("R13").Value 

    Set b = ActiveCell.EntireColumn("B") 
    Set m = ActiveCell.EntireColumn("M") 
    Set r = ActiveCell.EntireColumn("R") 
    Set abaPlan = ThisWorkbook.Worksheets("Orcamento") 
    Set pasta = Application.Workbooks.Add 

    abaPlan.Copy Before:=pasta.Worksheets(pasta.Worksheets.Count) 
    Application.DisplayAlerts = False 
    pasta.SaveAs Filename:="C:\Users\alcir.scarmin\Desktop\" & name & ".csv", FileFormat:=xlCSV 
    Application.DisplayAlerts = True 
    pasta.Close SaveChanges:=False 
End Sub 

編輯
我做了一個小的修改(的@Pehs回答)要能正常運行,但我離開的方式,現在只需要行「20」怎麼會我做OffSet?我嘗試了幾種方法,但沒有奏效。 (我是巴西人,我使用谷歌翻譯,巴西人不喜歡自己幫忙)謝謝。

Sub GravaTXT() 
    Dim abaPlan As Worksheet 
    Set abaPlan = ThisWorkbook.Worksheets("Orcamento") 

    Dim name As String 
    name = abaPlan.Range("R13").Value 

    Dim pasta As Workbook 
    Set pasta = Application.Workbooks.Add 


    abaPlan.Range("B20,M20,R20").Copy pasta.Worksheets(1).Range("A1") 
    pasta.Worksheets(1).name = abaPlan.name 

    Application.DisplayAlerts = False 
    pasta.SaveAs Filename:="C:\Users\alcir.scarmin\Desktop\" & name & ".csv", FileFormat:=xlCSV 
    Application.DisplayAlerts = True 
    pasta.Close SaveChanges:=False 
End Sub 
+2

您正在將整個工作表複製到新的工作簿。這並不令人驚訝,它作爲整個表單出來。如果您想要某些列,請創建一個空白工作表並複製這些列。 – GSerg

回答

0

這是因爲你abaPlan.Copy複製整個工作表,但你只需要複製一些列abaPlan.Range("B:B,M:M,R:R").Copy

Option Explicit 

Sub GravaTXT() 
    Dim abaPlan As Worksheet 
    Set abaPlan = ThisWorkbook.Worksheets("Orcamento") 'source workbook 

    Dim name As String 
    name = abaPlan.Range("R13").Value 'always refer ranges to a specific worksheet 

    Dim pasta As Workbook 
    Set pasta = Application.Workbooks.Add 

    'copy columns B, M and R to new workbook first worksheet 
    abaPlan.Range("B:B,M:M,R:R").Copy pasta.Worksheets(1).Range("A1") 
    pasta.Worksheets(1).Name = abaPlan.Name 'rename the first worksheet to the same name as abaPlan 

    Application.DisplayAlerts = False 
    pasta.SaveAs Filename:="C:\Users\alcir.scarmin\Desktop\" & name & ".csv", FileFormat:=xlCSV 
    Application.DisplayAlerts = True 
    pasta.Close SaveChanges:=False 
End Sub 

注意
我建議使用

Filename:=Environ("userprofile") & "\Desktop\" & name & ".csv" 

,而不是硬編碼路徑。

另外要注意,使用從R13的name沒有檢查,如果它僅包含有效的一個文件名可能會導致錯誤的字符。

+0

上面的帖子被編輯了 –

+0

你爲什麼要把它改爲'B20,M20,R20'?當然,你只能得到這3個細胞。如果你需要整列,然後按照我的答案,堅持'B:B,M:M,R:R'。 –

相關問題