У меня есть простой макрос, который смотрит на A1, затем копирует и вставляет в определенный диапазон в другой лист, возвращается к исходному листу, а затем смещает каждый столбец (процедура копирования и вставки) до тех пор, пока столбец T, то это перемещается вниз на 1 строку и повторяется, а затем сохраняет лист как PDF, и этот процесс повторяется примерно 100 раз.Альтернатива activecell copy и paste
Как я могу улучшить скорость этого макроса, я добавлю Dim rng в качестве рабочего листа. Затем установите rng как рабочий лист («Cost Aained») и т. Д. Но после того, как я снял активацию и смещенную часть и заменил ее ...?
Два листа находятся в одной книге, которая уже открыта, когда выполняется макрос.
Пожалуйста, помогите!
Sub Input_Template()
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.DisplayStatusBar = False
Dim E26val As String
'Go to A1 in Cost Gained sheet, look for next available cell.
Sheets("Cost Gained SelfBill").Select
Range("A1").Select
ActiveCell.Offset(1, 0).Select
Do Until ActiveCell.EntireRow.Hidden = False
ActiveCell.Offset(1, 0).Select
Loop
Do
'1
ActiveCell.Offset(0, 0).Select
Selection.Copy
Sheets("Debit Note").Select
Range("G8,C6").Select
ActiveSheet.PasteSpecial
Range("C6").Select
ActiveCell.FormulaR1C1 = "=CONCATENATE(R[2]C[4], ""Q-DN"")"
'2
Sheets("Cost Gained SelfBill").Select
ActiveCell.Offset(0, 1).Select
Selection.Copy
Sheets("Debit Note").Select
Range("G11").Select
ActiveSheet.PasteSpecial
'3
Sheets("Cost Gained SelfBill").Select
ActiveCell.Offset(0, 2).Select
Selection.Copy
Sheets("Debit Note").Select
Range("G16,C22").Select
ActiveSheet.PasteSpecial
'4
Sheets("Cost Gained SelfBill").Select
ActiveCell.Offset(0, 2).Select
Selection.Copy
Sheets("Debit Note").Select
Range("G9,G22,G24,G26").Select
ActiveSheet.PasteSpecial
'5
Sheets("Cost Gained SelfBill").Select
ActiveCell.Offset(0, 2).Select
Selection.Copy
Sheets("Debit Note").Select
Range("G10").Select
ActiveSheet.PasteSpecial
'6
Sheets("Cost Gained SelfBill").Select
ActiveCell.Offset(0, 2).Select
Selection.Copy
Sheets("Debit Note").Select
Range("G7").Select
ActiveSheet.PasteSpecial
'7
Sheets("Cost Gained SelfBill").Select
ActiveCell.Offset(0, 1).Select
Selection.Copy
Sheets("Debit Note").Select
Range("G15").Select
ActiveSheet.PasteSpecial
'8
Sheets("Cost Gained SelfBill").Select
ActiveCell.Offset(0, 1).Select
Selection.Copy
Sheets("Debit Note").Select
Range("C9").Select
ActiveSheet.PasteSpecial
'9
Sheets("Cost Gained SelfBill").Select
ActiveCell.Offset(0, 1).Select
Selection.Copy
Sheets("Debit Note").Select
Range("C10").Select
ActiveSheet.PasteSpecial
'10
Sheets("Cost Gained SelfBill").Select
ActiveCell.Offset(0, 1).Select
Selection.Copy
Sheets("Debit Note").Select
Range("C11").Select
ActiveSheet.PasteSpecial
'11
Sheets("Cost Gained SelfBill").Select
ActiveCell.Offset(0, 1).Select
Selection.Copy
Sheets("Debit Note").Select
Range("C12").Select
ActiveSheet.PasteSpecial
'12
Sheets("Cost Gained SelfBill").Select
ActiveCell.Offset(0, 1).Select
Selection.Copy
Sheets("Debit Note").Select
Range("C13").Select
ActiveSheet.PasteSpecial
'13
Sheets("Cost Gained SelfBill").Select
ActiveCell.Offset(0, 1).Select
Selection.Copy
Sheets("Debit Note").Select
Range("C14").Select
ActiveSheet.PasteSpecial
'14
Sheets("Cost Gained SelfBill").Select
ActiveCell.Offset(0, 1).Select
Selection.Copy
Sheets("Debit Note").Select
Range("C15").Select
ActiveSheet.PasteSpecial
'15
Sheets("Cost Gained SelfBill").Select
ActiveCell.Offset(0, 1).Select
Selection.Copy
Sheets("Debit Note").Select
Range("E26").Select
ActiveSheet.PasteSpecial
'16
Sheets("Cost Gained SelfBill").Select
ActiveCell.Offset(0, 8).Select
Selection.Copy
Sheets("Debit Note").Select
Range("C16").Select
ActiveSheet.PasteSpecial
With Sheets("Debit Note")
E26val = .Range("E26").Value
With .Range("G9,G22,G24,G26")
Select Case E26val
Case Is = "GBP"
.NumberFormat = "$#,##0.00"
Case Is = "EUR"
.NumberFormat = "[$€-2] #,##0.00"
Case Is = "USD"
.NumberFormat = "[$$-409]#,##0.00"
Case Else
'Nothing
End Select 'E26val
End With '.Range("G9,G22,G24,G26")
End With 'Sheets("Sheet1")
Range("B22,G16").Select
Selection.NumberFormat = "General"
Range("G15").Select
Selection.Style = "Hyperlink 2"
Sheets("Debit Note").Select
ChDir "P:\Feb\"
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
"P:\Feb\" & Range("G8").Value
'Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
:=False, OpenAfterPublish:=False
Sheets("Cost Gained SelfBill").Select
ActiveCell.Select
ActiveCell.Offset(1, -26).Select
Do Until ActiveCell.EntireRow.Hidden = False
ActiveCell.Offset(1, 0).Select
Loop
Loop Until ActiveCell.Row = "20000"
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
Application.EnableEvents = True
Application.DisplayStatusBar = True
End Sub
Также это поможет уменьшить линии моего макроса.
Спасибо для смотреть
Не используйте '.Select', просто обратитесь к ячейке непосредственно, например. 'Таблицы (« CostBurn SelfBill »). Диапазон (« A1 »)'. Кроме того, не копируйте/'Paste'. Установите значения ячеек на то, что вы хотите, например. 'Range (« A1 »). Value = Range (« A2 »). Value' – Jordan
Спасибо, Jordan, Некоторые ячейки отфильтрованы, поэтому я не знал, как обойти это, установив значение. Я возьму ваш совет и использую его для последней строки '1 Range («C6») и т. Д. –
[Вот хорошая нить SO] (https://stackoverflow.com/questions/10714251/how-to-avoid -using-select-in-excel-vba-macro) о том, как избежать использования '.Select' /' .Activate'. – BruceWayne