您好我一直在使用各种代码来帮助我到达我需要的地方。
电子表格使用“JDW”工作表中的值更新主表(工作表“Stock”)中库存商品的数量。
VBA代码根据JDW工作表上的输入过滤主表以查找正确的部件号。
然后代码循环,直到找到过滤器未“隐藏”的第一行。这是需要很长时间的一点 - 一个偏移只将它移动到第二行而不是行“x” - 这可能是从第2行到第5000行的任何内容。
然后代码偏移到正确的单元格,复制粘贴,然后再次抵消并复制日期并将日期值粘贴到下一个单元格中(将日期添加到标题为“上次更新”的列中)
然后代码将数据的输入形式清除为基本的“重置”。
有什么建议吗?
Range("C4").Select
Selection.Copy
Sheets("Stock").Select
ActiveSheet.Range("$A$1:$X$5000").AutoFilter field:=1, Criteria1:=Worksheets("JDW").Range("C4").Value
Range("A1").Select
ActiveCell.Offset(1, 0).Activate
Do Until Selection.EntireRow.Hidden = False
If Selection.EntireRow.Hidden = True Then
ActiveCell.Offset(1, 0).Activate
End If
Loop
Selection.Offset(0, 16).Select
Sheets("JDW").Select
Range("C20").Select
Selection.Copy
Sheets("Stock").Select
ActiveSheet.Paste
Selection.Offset(0, 2).Select
Sheets("JDW").Select
Range("A1").Select
Selection.Copy
Sheets("Stock").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveSheet.Range("$A$1:$X$5000").AutoFilter field:=1
Sheets("JDW").Select
Range("C20").Select
Selection.ClearContents
答案 0 :(得分:1)
两件事......
首先,有一个范围要做.SpecialCells(xlCellTypeVisible)
的方法。您可以遍历此操作并仅使用可见单元格。
其次,摆脱Select
和Selection
- 这是不好的做法而且很慢。例如,请参考Sheets("JDW").Range("C20")
之类的内容,而不是使用复制/粘贴缓冲区,您可以执行Sheets("Stock").Cells(1,2).Value = Sheets("JDW").Range("C20").value
之类的操作直接输入值...
答案 1 :(得分:1)
这会将代码缩减为
Sheets("Stock").Range("$A$1:$X$5000").AutoFilter _
field:=1, Criteria1:=Worksheets("JDW").Range("C4").Value
Dim StockRow as range
Set StockRow = Sheets("Stock").Rows(2)
Do Until StockRow.Hidden = False
Set StockRow = StockRow.Offset(RowOffset:=1)
Loop
StockRow.Cells(1,17).Value = Sheets("JDW").Range("C20").Value
StockRow.Cells(1,19).Value = Sheets("JDW").Range("A1").Value
Sheet("Stock").Range("$A$1:$X$5000").AutoFilter field:=1
Sheets("JDW").Range("C20").ClearContents
(未经测试,因为我没有上下文)
但实际上你可以用
做得更好Dim StockRow as range, stockKey as variant
stockKey = Sheets("JDW").Range("C4").Value
Set StockRow = Sheets("Stock").Columns(1).Find(stockKey, LookAt:=xlWhole)
...