2015-04-01 27 views
0

我试图使用宏将每个5000行的电子表格拆分为多个新文件并保留标题。我想这个代码,但得到错误信息“enter image description here将每个带有标题的5000行拆分为多个新工作表

代码:

Sub Macro1() 
Dim inputFile As String, inputWb As Workbook 
    Dim lastRow As Long, row As Long, n As Long 
    Dim newCSV As Workbook 

inputFile = GetOpenFilename 

Set inputWb = Workbooks.Open(inputFile) 

With inputWb.Worksheets(1) 
    lastRow = .Cells(Rows.Count, "A").End(xlUp).row 

    Set newCSV = Workbooks.Add 

    n = 0 
    For row = 2 To lastRow Step 5000 
     n = n + 1 
     .Rows(1).EntireRow.Copy newCSV.Worksheets(1).Range("A1") 
     .Rows(row & ":" & row + 5000 - 1).EntireRow.Copy newCSV.Worksheets(1).Range("A2") 

     'Save in same folder as input workbook with .xlsx replaced by (n).csv 
     newCSV.SaveAs Filename:=Replace(inputWb.FullName, ".xlsx", "(" & n & ").csv"), FileFormat:=xlCSV, CreateBackup:=False 
    Next 
End With 

newCSV.Close saveChanges:=False 
    inputWb.Close saveChanges:=False 

End Sub 

错误根据从这里突出了‘调试’:

Set inputWb = Workbooks.Open(inputFile) 
+0

这似乎是问题出现在“GetOpenFilename”中。在分配后立即将'Debug.Print inputFile'放入(例如'inputFile = GetOpenFilename'),并在崩溃后检查立即窗口(Ctrl + G)以查看正在报告的内容。 – Jeeped 2015-04-01 23:10:42

+0

你试过'inputFile = Application.GetOpenFilename'吗? – Jeeped 2015-04-01 23:17:52

+0

立即窗口不显示任何东西,当我尝试这个“子Macro1的() 昏暗INPUTFILE作为字符串,inputWb作为工作簿 昏暗LASTROW长,排长,N当 昏暗newCSV作为工作簿 INPUTFILE = GetOpenFilename Debug.Print inputFile End Sub “ – 2015-04-01 23:22:41

回答

0

我建议你跳过GetOpenFilename选项去为另一个 - 具体在这种格式:

"C:\Path\To\ABCDE.xlsx" 

as de由John_w在MrExcel.com上追尾。

+0

我不知道我的路径是错误的还是什么,“/Users/annlll/Downloads/Workbook5.xlsx”说无法找到。 – 2015-04-01 23:28:45

+0

驱动器号和反斜杠可能会有所帮助。 – pnuts 2015-04-01 23:30:58

+0

好吧,路径问题没问题,但它要求我打开文件,但它已经打开。如果我说是,那么它会再次打开,我的宏消失,如果我说不,它仍然是相同的错误“打开对象失败” – 2015-04-01 23:37:23

0

只是将其更改为ActiveWorkbook ,除非您计划将其运行于其他工作簿,然后再使用该工作簿。

Sub Macro1() 
Dim inputFile As String, inputWb As Workbook 
    Dim lastRow As Long, row As Long, n As Long 
    Dim newCSV As Workbook 

With ActiveWorkbook.Worksheets(1) 
    lastRow = .Cells(Rows.Count, "A").End(xlUp).row 

    Set newCSV = Workbooks.Add 

    n = 0 
    For row = 2 To lastRow Step 5000 
     n = n + 1 
     .Rows(1).EntireRow.Copy newCSV.Worksheets(1).Range("A1") 
     .Rows(row & ":" & row + 5000 - 1).EntireRow.Copy newCSV.Worksheets(1).Range("A2") 

     'Save in same folder as input workbook with .xlsx replaced by (n).csv 
     newCSV.SaveAs Filename:=n & ".csv", FileFormat:=xlCSV, CreateBackup:=False 
    Next 
End With 

newCSV.Close saveChanges:=False 

End Sub 

你的问题是在

INPUTFILE = GetOpenFilename

设置inputWb = Workbooks.Open(INPUTFILE)

你不告诉它的getopenfilename是什么

有不需要重新打开

使用ACtiveWorkbook

相关问题