只是想通过说我是VBA的新手,并愿意采用更好的方法来对此代码开头。我有一个初始过程,我将根据条件(日期,货币组和度量)在数组中过滤值,然后粘贴到另一张纸上。然后,我将运行代码以根据条件复制这些值并将其粘贴到单独的工作表中。现在,我要消除手动过滤器,在那里我自己过滤材料并粘贴到另一张纸上。我试图在我使用的手动过程中记录一个宏,我的计划是插入一张同名的表,以便其余初始代码可以正常使用。问题是我想读取日期我要粘贴的工作表中,将它们用作变量,然后在要从中获取数据并将其粘贴到另一个工作表中的工作表上过滤值。这是带有注释的代码:
Sub Actual()
Dim rw As Integer
Dim z As Integer
Dim i As Integer
Dim rpt_nm As String
Dim wb As Workbook: Set wb = ThisWorkbook
Dim wb2 As Workbook
Dim dt1, dt2, dt3 As Date
Dim ws As Worksheet
Dim TAmt, VAmt, UAmt, OAmt As Double
Worksheets("PAct").Range("G1").Activate
Let rw = ActiveCell
Let rpt_nm = Range("k1").Value
Let dt1 = Cells(rw, 1)
Let dt2 = Cells(rw + 1, 1)
Let dt3 = Cells(rw + 2, 1)
' Workbooks.Open Filename:=ThisWorkbook.Path & "\2. 2019 Legacy.xlsx"
Set wb2 = Workbooks.Open(Filename:=ThisWorkbook.Path & rpt_nm)
With wb2
.Sheets.Add After:=.Sheets("Actual Input").Name = "VBA Input"
End With
'This is the macro I recorded in sheet I am trying to copy from
Sheets("Actual Input").Activate
Columns("E:E").Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Range("E2").Select
ActiveCell.FormulaR1C1 = _
"=IF(LEN(RC[-1])=9,DATE(RIGHT(RC[-1],4),LEFT(RC[-1],1),MID(RC[-1],3,2)),DATE(RIGHT(RC[-1],4),LEFT(RC[-1],2),MID(RC[-1],4,2)))"
Range("E2").Select 'Formatting on previous lines was my clumsy attempt to try and change text formats to dates using excel
Selection.AutoFill Destination:=Range("E2:E721")
Range("E2:E721").Select
Selection.Copy
Range("E2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("D1").Select
Application.CutCopyMode = False
Selection.Copy
Range("E1").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Columns("D:D").Select
Selection.Delete Shift:=xlToLeft
Range("A1").Select
Range(Selection, Selection.End(xlToRight)).Select
Selection.AutoFilter
ActiveSheet.Range("$A$1:$H$721").AutoFilter Field:=7, Criteria1:="Net"
****ActiveSheet.Range("$A$1:$H$721").AutoFilter Field:=4, Operator:= _
xlFilterValues, Criteria2:=Array(1, "7/31/2019", 1, "8/31/2019", 1, "9/30/2019") 'This is the place where I want to remove the specific dates selected and use variables
ActiveSheet.Range("$A$1:$H$721").AutoFilter Field:=3, Criteria1:="5M=" ‘Everytime I try and replace these values with dt1, dt2 and dt3 the filter will not select anything and there is no data****
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
ActiveSheet.Next.Select
Range("A2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("I3").Select
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = "=RC[-1]/1000000"
Range("I3").Select
Selection.AutoFill Destination:=Range("I3:I17")
Range("I3:I17").Select
ActiveSheet.Previous.Select
ActiveSheet.Range("$A$1:$H$721").AutoFilter Field:=3, Criteria1:="1M-4.99M"
Selection.Copy
ActiveSheet.Next.Select
Range("K2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("S3").Select
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = "=RC[-1]/1000000"
Range("S3").Select
Selection.AutoFill Destination:=Range("S3:S17")
Range("S3:S17").Select
ActiveSheet.Previous.Select
ActiveSheet.Range("$A$1:$H$721").AutoFilter Field:=3, Criteria1:="1M<"
Selection.Copy
ActiveSheet.Next.Select
Range("U2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveWindow.SmallScroll ToRight:=4
Range("AC3").Select
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = "=RC[-1]/1000000"
Range("AC3").Select
Selection.AutoFill Destination:=Range("AC3:AC17")
Range("AC3:AC17").Select
'This is where the macro recorder ends
For z = 0 To 2
For i = 0 To 2
wb2.Worksheets("VBA Input").Activate
VAmt = Cells(3 + (i * 5), 9 + (z * 10))
UAmt = Cells(4 + (i * 5), 9 + (z * 10)) + Cells(5 + (i * 5), 9 + (z * 10))
TAmt = Cells(6 + (i * 5), 9 + (z * 10))
OAmt = Cells(7 + (i * 5), 9 + (z * 10))
wb.Worksheets("PAct").Activate
Cells(rw + i, 16 + (z * 5)) = TAmt
Cells(rw + i, 17 + (z * 5)) = VAmt
Cells(rw + i, 18 + (z * 5)) = UAmt
Cells(rw + i, 19 + (z * 5)) = OAmt
Next
Next
End Sub
对于VBA来说还是很新,所以如果您认为有更好的方法(特别是关于录制的宏),请告诉我,我自己可以解决。只是认为最好学习更多有关记录宏的知识。谢谢
因此,通常,您将希望使用记录的宏来了解将使用哪些函数来执行某些操作。录制的宏确实不适用于生成动态代码。若要读取要粘贴的工作簿的日期,请使用WorkSheets(“ SheetName”)。Range(“ A1”)。Value。然后您可以使用该日期来过滤将要复制的代码。
请逐步进行,不要感到不知所措。该录制的宏中有大量不必要的垃圾。