2017-09-12 97 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'。 –

相关问题