【发布时间】:2018-01-25 23:16:16
【问题描述】:
我正在尝试将源工作簿中的内容复制到新工作簿并以 xlsx 格式保存在指定文件夹中。
我正在尝试以下代码,但在代码的最后一行出现应用程序定义错误,我试图将我的新工作簿另存为 .xlsx
另外,大约需要很长时间。这段代码需要 5 分钟。
Sub newWB()
Dim myWksht As String
Dim newWB As Workbook
Dim MyBook As Workbook
Dim i As Integer, j As Integer
Dim LastRow As Long, totalrows As Long
Dim path1, path2 As String
path1 = ThisWorkbook.Path
path2 = path1 & "\Tru\Sq\"
Set newWB = Workbooks.Add
With ThisWorkbook.Worksheets("Pivottabelle")
LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
End With
With newWB.Sheets("Sheet1")
.Name = "PivotTable"
j = .Cells(.Rows.Count, "A").End(xlUp).Row + 1
End With
With Worksheets("Pivottabelle")
For i = 1 To LastRow
ThisWorkbook.Sheets("Pivottabelle").Range("A1:Y400").Copy: newWB.Sheets("PivotTable").PasteSpecial
Next i
End With
With newWB.Worksheets("PivotTable")
totalrows = .Cells(.Rows.Count, "A").End(xlUp).Row
For i = totalrows To 2 Step -1
If .Cells(i, 8).Value <> "TRU" Then
Cells(i, 8).EntireRow.Delete
End If
Next
newWB.SaveAs Filename:=path2 & ".xlsx"
End With
End Sub
【问题讨论】:
-
filename解析为什么?浏览您的代码,您似乎没有包含文件名称,因此您将尝试保存到无效的ThisWorkbook.Path\Tru\Sq\.xlsx之类的名称。 -
Filename解析到什么?您所做的更改是有效的名称吗? -
请注意:
Dim i As Integer, j As Integer使用Long而不是Integer。 Excel 的行数超过了 Integer 可以处理的数量。而且您可能在Cells(i, 8).EntireRow.Delete之前缺少.,它应该是.Cells(i, 8).EntireRow.Delete -
至于速度问题,您需要弄清楚程序的哪一部分运行缓慢。保存文件不需要六分钟。如果没有重现问题的方法,就很难知道它是什么。
-
@Mikz 在你的循环中
ThisWorkbook.Sheets("Pivottabelle").Range("A1:Y400").Copy你将相同的范围一遍又一遍地复制到同一张纸上,然后你就这样做了LastRow-times。这没有多大意义,当然需要很多时间。我很确定复制一次就足够了?我的意思是如果范围没有改变为什么要循环?