- 帖子
- 913
- 主題
- 150
- 精華
- 0
- 積分
- 1089
- 點名
- 0
- 作業系統
- win10
- 軟體版本
- office 2019
- 閱讀權限
- 50
- 性別
- 女
- 註冊時間
- 2011-8-28
- 最後登錄
- 2023-7-19
 
|
請問二個問題:
手動Label.rar (270.11 KB)
1. 這段程式是先將Sheets("Label (3)")的J2~J end的資料清除,但這個卻寫法無法清除資料.- Set Wb = Workbooks("最新庫存.xlsx")
- Set S = Wb.Sheets("Label (3)")
- S.Select
- With S
- Set A = .Range("J2", .Range("J2").End(xlDown)) '從指定點到資料最底部....但這個寫法不能自動清除
- A.ClearContents '清除資料
- End With
複製代碼 2. Sheets("Label (3)")已手動把需要打勾的部份手動補上,原本的的資料有好幾千列,這個寫法在執行時會停頓很久,像程式快當掉的感覺,請問是否有不同寫法,可以讓它執行快一點?
這個程式的執行過程是讓J欄打勾的部份,全部新增二列,然後將原本打勾的同列C欄資料,複制貼上到新增列的B欄中,如果無法明白我的解說,請將附件的檔案執行看看,可能比較容易懂,不過因為資料已經減少了,可能比較不感覺"卡卡"的,不過真實情況是跑得很不理想.- Set Wb = Workbooks("最新庫存.xlsx")
- Wb.Activate
-
- Set S = Wb.Sheets("Label (3)")
- With S
- .UsedRange.AutoFilter Field:=10, Criteria1:="", Operator:=xlAnd '空格的資料刪除
- Set xRng = .UsedRange.Offset(1, 0).SpecialCells(xlCellTypeVisible) '選擇有資料的範圍刪除,Offset(1, 0)表示表頭往下一列開始
- xRng.Delete
- .UsedRange.AutoFilter Field:=10 '取消篩選
- End With
- With S
- LastRow = ActiveSheet.UsedRange.SpecialCells(xlLastCell).Row
- For J = 1 To LastRow
- If Range("J" & J).Value = "V" Then
- LastRow = LastRow + 2
- End If
- Next J
-
- For J = 1 To LastRow
- If Range("J" & J).Value = "V" Then 'J欄"V",則新增2列
- Rows(J + 1).Insert Shift:=xlDown
- Rows(J + 1).Insert Shift:=xlDown
- Range("C" & J).Copy
- Range("B" & J + 1).Select '"V"同列的C欄值copy到新增第1列的B欄
- ActiveSheet.Paste
- End If
- Next J
- End With
-
- ActiveWorkbook.SaveAs "D:\5_VBA輸出報表\庫存_" & Format(Date, "YYYYMMDD") & "." & Format(Time, "HHMM") & ".xlsx"
- Kill "D:\Download\暫存\最新庫存.xlsx"
- End Sub
複製代碼 |
|