2017-05-09 72 views
-1

这就像我得到它,但它现在只复制active.sheet多次,而不是骑自行车通过。需要改进的代码

我试图实现的想法是让宏运行并将每个工作表转换为.csv。该.csv的文件名将是由另一个宏决定的工作表名称,而不是之前在流程中运行的宏。

关于如何循环的任何想法,正如我之前所说的。我对代码相当陌生,因此我在问。

子Export_Sub_Xpath() ' ' Export_Sub_Xpath宏 '

Dim i As Integer 
    Dim WS_Count As Integer 
    Dim ws As Worksheet 

    WS_Count = ActiveWorkbook.Worksheets.Count 
    For i = 1 To WS_Count 



    Set ws = ThisWorkbook.Worksheets(i) 
    PathName = "" & ActiveWorkbook.Path & "\" & ws.Name & ".csv" 
    Columns("A:B").Select 
    Range("B3000").Activate 
    Selection.Copy 
    PathName = "" & ActiveWorkbook.Path & "\" & ws.Name & ".csv" 
    Workbooks.Add 
    ActiveSheet.Paste 
    Application.CutCopyMode = False 
    'ActiveWorkbook.SaveAs PathName = "" & ActiveWorkbook.Path & "\" & ws.Name & ".csv" 
    ActiveWorkbook.SaveAs Filename:=PathName, _ 
     FileFormat:=xlCSV, CreateBackup:=False 
    ActiveWorkbook.Close 

Next i 

End Sub 
+0

请描述你的任务。什么代码应该做? – Alexander

+0

代码如何完成您所需要的功能,但却无法正常工作?你真的**需要代码不起作用吗? – YowE3K

+0

尝试在代码的顶部添加'Option Explicit',并在该子文件中添加'Dim Pathname As String'。我可以运行这个代码没有问题! – MiguelH

回答

0

你忘记激活复制和保存前的各片材。试试这个:

Sub Export_Sub_Xpath() ' ' Export_Sub_Xpath Macro ' 
    Dim i As Integer 
    Dim WS_Count As Integer 
    Dim ws As Worksheet 

    WS_Count = ThisWorkbook.Worksheets.Count 

    For i = 1 To WS_Count 
      Set ws = ThisWorkbook.Worksheets(i) 
      PathName = "" & ThisWorkbook.Path & "\" & ws.Name & ".csv" 
      ThisWorkbook.Worksheets(i).Activate ' You forgeot to Activate Each Sheet before saving 
      Columns("A:B").Select 
      Range("B3000").Activate     
      Selection.Copy 
      Workbooks.Add 
      ActiveSheet.Paste 
      Application.CutCopyMode = False 
      ActiveWorkbook.SaveAs Filename:=PathName, _ 
       FileFormat:=xlCSV, CreateBackup:=False 
      ActiveWorkbook.Close 

Next i 

End Sub 
+0

完美无缺!非常感谢你! –