我正在优化一个非常旧的宏代码,我注意到将数据从工作表"源"复制到"测试",然后再复制到正确的目标工作表"概述",这是无用的操作。
有没有办法摆脱额外的工作表"测试"和选择,CutCopyMode等?
Dim i As Integer
Dim m, n As Integer
Rmin = Application.InputBox("Min row.")
Rmax = Application.InputBox("Max row.")
For i = Rmin To Rmax
For j = 1 To 99
Sheets("Source").Select
Cells(i, j).Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Test").Select
Cells(1, j).Select
ActiveSheet.Paste
Next j
Sheets("Test").Select
Range("A1:PK1").Select
Selection.Copy
Sheets("Overview").Select
Range("A2").Select
ActiveSheet.Paste
Range("A3:I54").Select
Selection.Copy
Application.CutCopyMode = False
Selection.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
"C:Users...." & File & ".pdf" _
, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
:=False, OpenAfterPublish:=False
Next i
Sheets("Source").Select
Cells(Rmax, 1).Select
谢谢!
添加信息:宏用于为工作表"源"中的每个用户选择行创建PDF,然后使用工作表"概述"中的数据表单选择来创建PDF。而且我是整个 VBA 环境的新手,但是,我会尽力而为。我已经在使用 Application.ScreenUpdate 来减少运行时间。
从长远来看,我不完全清楚哪个单元格被复制到哪里,但一般来说,您始终可以使用以下语法避免 .copy/.paste 命令:
For i = Rmin To Rmax
For j = 1 To 99
Sheets("Overview").Cells(2,j).Value = Sheets("Source").Cells(i, j).Value
Next j
在这种情况下,您可以指定左侧单元格的值等于右侧单元格的内容。
此致敬意瑟尔伯格1
据我所知,您可以轻松地跳过粘贴到测试表的过程。试试这个:
Dim i As Integer
Dim m, n As Integer
Rmin = Application.InputBox("Min row.")
Rmax = Application.InputBox("Max row.")
For i = Rmin To Rmax
Sheets("Source").Select 'Move to the source sheet
Range("A" & i & ":PK" & i).Select 'Select the row to copy
Application.CutCopyMode = False
Selection.Copy 'Copy the row
Sheets("Overview").Select 'Move to "Destination"-sheet
Range("A2").Select 'Paste source into A2 (for some reason)
ActiveSheet.Paste
Range("A3:I54").Select 'Select the are you want to create a pdf of
'And create the PDF...
Selection.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
"C:Users...." & File & ".pdf" _
, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
:=False, OpenAfterPublish:=False
Next i 'Move to next row in source sheet
Sheets("Source").Select 'Move back to source
Cells(Rmax, 1).Select 'Select the last cell.
希望这有助于加快速度:)