- 帖子
- 1
- 主題
- 1
- 精華
- 0
- 積分
- 2
- 點名
- 0
- 作業系統
- windows 2010
- 軟體版本
- excel 2016
- 閱讀權限
- 10
- 註冊時間
- 2017-12-11
- 最後登錄
- 2018-8-29
|
[發問] 請問VBA如何迴圈選取已篩選的資料複製到新工作表上的特定範圍
如題, 我想使用VBA去迴圈選取已篩選的資料複製到新工作表上的特定範圍及自動開新一行。
我嘗試錄製了巨集及修改了少許,但不成功。
VBA的 步驟:
1.按下在SHEET “VBA” 上的 In out record 7 days按扭
2.當按下制後,會選擇SHEET “AT”
3.在SHEET”AT”上, 由A6拉到AD6, 之後按篩選
4.之後在F6進行日期篩選,
5.把SHEET “In out record” 複製一張新SHEET 叫 “In out record 2”
6.把”In out record 2”複製一張新SHEET叫”In out record_AT”
7.把剛才在SHEET “AT”上篩選得出的資料複製
8.在SHEET ”In out record_AT” set C12 的VALUE 是AT
9.在SHEET” In out record_AT” 的B17 貼上剛才所複製的資料,每複製一次,開新一行, 在新一行上繼續複製及不夠位自動INSERT新一行
重複步驟4至8, 做7次(今日前3天到今日後3天,共7天)
我現在做到了1至8,但步驟9做了一次還可以,之後再複製就會覆蓋之前的資料
請問如何修改? 麻煩指導,感謝。
Code:- Private Sub CommandButton17_Click()
- Set copysheet = ThisWorkbook.Sheets("In out record")
- copysheet.Activate
- copysheet.Range("A1:O49").Select
- Selection.Copy
- Sheets.Add After:=Sheets(Sheets.Count)
- Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
- SkipBlanks:=False, Transpose:=False
- ActiveSheet.Paste
- ActiveSheet.Name = "In out record 2"
- Set copysheet2 = ThisWorkbook.Sheets("In out record 2")
- copysheet2.Copy After:=Sheets("In out record 2")
- Set ATworksheet = Sheets(Sheets("In out record 2").Index + 1)
- ATworksheet.Name = "In out record_AT"
- Set wSheetStart = ThisWorkbook.Sheets("AT")
- wSheetStart.Activate
- wSheetStart.AutoFilterMode = False
- ActiveSheet.Range("A6:AC6").AutoFilter Field:=6, Criteria1:=">=" & DateSerial(Year(Now - 3), Month(Now - 3), Day(Now - 3)), Operator:=xlAnd, Criteria2:="<=" & DateSerial(Year(Now - 3), Month(Now - 3), Day(Now - 3))
- If ActiveSheet.AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Count > 1 Then
- Worksheets("AT").Range("B7").Select
- Worksheets("AT").Range("B7:N7").Select
- Worksheets("AT").Range(Selection, Selection.End(xlDown)).Select
- Selection.Copy
- ATworksheet.Activate
- ATworksheet.Range("B17").PasteSpecial
-
- ATworksheet.Range("C12").Value = "AT"
-
- Set btn = ActiveSheet.Buttons.Add(477, 177, 40, 40)
- With btn
- .OnAction = "btnS"
- .Caption = "Save As"
- .Name = "Save As"
- Application.ScreenUpdating = True
- End With
-
- ATworksheet.Range("B21").Select
-
- wSheetStart.Activate
- ActiveSheet.Range("A6:AC6").AutoFilter Field:=6, Criteria1:=">=" & DateSerial(Year(Now - 2), Month(Now - 2), Day(Now - 2)), Operator:=xlAnd, Criteria2:="<=" & DateSerial(Year(Now - 2), Month(Now - 2), Day(Now - 2))
- If ActiveSheet.AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Count > 1 Then
- Worksheets("AT").Range("B7").Select
- Worksheets("AT").Range("B7:N7").Select
- Worksheets("AT").Range(Selection, Selection.End(xlDown)).Select
- Selection.Copy
- ATworksheet.Activate
- ATworksheet.Range("B17").End(xlUp).Offset(1).PasteSpecial
-
- wSheetStart.Activate
- ActiveSheet.Range("A6:AC6").AutoFilter Field:=6, Criteria1:=">=" & DateSerial(Year(Now - 1), Month(Now - 1), Day(Now - 1)), Operator:=xlAnd, Criteria2:="<=" & DateSerial(Year(Now - 1), Month(Now - 1), Day(Now - 1))
- If ActiveSheet.AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Count > 1 Then
- Worksheets("AT").Range("B7").Select
- Worksheets("AT").Range("B7:N7").Select
- Worksheets("AT").Range(Selection, Selection.End(xlDown)).Select
- Selection.Copy
- ATworksheet.Activate
- ATworksheet.Range("B17").End(xlUp).Offset(3).PasteSpecial
-
- wSheetStart.Activate
- ActiveSheet.Range("A6:AC6").AutoFilter Field:=6, Criteria1:=">=" & DateSerial(Year(Now), Month(Now), Day(Now)), Operator:=xlAnd, Criteria2:="<=" & DateSerial(Year(Now), Month(Now), Day(Now))
- If ActiveSheet.AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Count > 1 Then
- Worksheets("AT").Range("B7").Select
-
- Worksheets("AT").Range("B7:N7").Select
- Worksheets("AT").Range(Selection, Selection.End(xlDown)).Select
- Selection.Copy
- ATworksheet.Activate
- ATworksheet.Range("B17").End(xlUp).Offset(5).PasteSpecial
-
- wSheetStart.Activate
- ActiveSheet.Range("A6:AC6").AutoFilter Field:=6, Criteria1:=">=" & DateSerial(Year(Now + 1), Month(Now + 1), Day(Now + 1)), Operator:=xlAnd, Criteria2:="<=" & DateSerial(Year(Now + 1), Month(Now + 1), Day(Now + 1))
- If ActiveSheet.AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Count > 1 Then
- Worksheets("AT").Range("B7").Select
- Worksheets("AT").Range("B7:N7").Select
- Worksheets("AT").Range(Selection, Selection.End(xlDown)).Select
- Selection.Copy
- ATworksheet.Activate
- ATworksheet.Range("B17").End(xlUp).Offset(7).PasteSpecial
-
- wSheetStart.Activate
- ActiveSheet.Range("A6:AC6").AutoFilter Field:=6, Criteria1:=">=" & DateSerial(Year(Now + 2), Month(Now + 2), Day(Now + 2)), Operator:=xlAnd, Criteria2:="<=" & DateSerial(Year(Now + 2), Month(Now + 2), Day(Now + 2))
- If ActiveSheet.AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Count > 1 Then
- Worksheets("AT").Range("B7").Select
- Worksheets("AT").Range("B7:N7").Select
- Worksheets("AT").Range(Selection, Selection.End(xlDown)).Select
- Selection.Copy
- ATworksheet.Activate
- ATworksheet.Range("B17").End(xlUp).Offset(9).PasteSpecial
-
- wSheetStart.Activate
- ActiveSheet.Range("A6:AC6").AutoFilter Field:=6, Criteria1:=">=" & DateSerial(Year(Now + 3), Month(Now + 3), Day(Now + 3)), Operator:=xlAnd, Criteria2:="<=" & DateSerial(Year(Now + 3), Month(Now + 3), Day(Now + 3))
- If ActiveSheet.AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Count > 1 Then
- Worksheets("AT").Range("B7").Select
- Worksheets("AT").Range("B7:N7").Select
- Worksheets("AT").Range(Selection, Selection.End(xlDown)).Select
- Selection.Copy
- ATworksheet.Activate
- ATworksheet.Range("B17").End(xlUp).Offset(11).PasteSpecial
-
- End If
- End If
- End If
- End If
- End If
- End If
- End If
- End Sub
-
複製代碼 |
|