更新:
每次打开选项卡时,它都会自动生成订单列表。
据我所知,代码中有一个错误:
- “完整列表”上的第一行(在本例中为 C8:P8)总是被复制并插入到新数组中,无论那里有什么。
我让它复制了一个空白行,但粘贴到“订单”选项卡中应该只列出订单项目。我尝试粘贴除第一行之外的结果数组中的所有项目,但没有成功。哦,非常感谢@David-Zemens 在这方面提供的所有帮助。你知道你在做什么,它显示了:)
Private Sub Worksheet_Activate()
Dim wsList As Worksheet, wsOrder As Worksheet
Dim rng As Range
Set wsList = Worksheets("Full List")
Set wsOrder = Worksheets("Order")
wsList.Unprotect
'Clear Columns B, C, & D below row 3 in the Order sheet
wsOrder.Range("B3:D" & Rows.Count).ClearContents
'Set Range to include all columns from C to P starting with row 8
Set rng = wsList.Range("C8:P" & GetLastRow(wsList, 3))
wsList.AutoFilterMode = False
'filter so that only numeric values in column P are showing
rng.AutoFilter Field:=14, Criteria1:=">0", _
Operator:=xlAnd
'Copy column C (in wsList) to column B (in wsOrder)
rng.Columns(1).SpecialCells(xlCellTypeVisible).Copy
wsOrder.Range("B2").PasteSpecial xlPasteValues
'Copy column D (in wsList) to column C (in wsOrder)
rng.Columns(2).SpecialCells(xlCellTypeVisible).Copy
wsOrder.Range("C2").PasteSpecial xlPasteValues
'Copy column P (in wsList) to column D (in wsOrder)
rng.Columns(14).SpecialCells(xlCellTypeVisible).Copy
wsOrder.Range("D2").PasteSpecial xlPasteValues
wsList.AutoFilterMode = False
wsList.Protect
End Sub
Function GetLastRow(sh As Worksheet, column As Long)
' Function will return the last effective cell in specified column on worksheet
' sh: Worskheet object i.e., Worksheets("Sheet1")
' column: long/integer value of column, i.e., column A = 1, column N = 12, etc.
' Modified from :
' http://stackoverflow.com/questions/11169445/error-in-finding-last-used-cell-in-vba
'
With sh
If Application.WorksheetFunction.CountA(.Cells) <> 0 Then
lastRow = .Cells.Find(What:="*", _
After:=.Cells(1, column), _
Lookat:=xlPart, _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, _
MatchCase:=False).Row
Else
lastRow = 1
End If
End With
GetLastRow = lastRow
End Function
原帖:
我希望有人可以提供帮助。
我创建了一个 Excel 程序,让我可以查看库存水平并将其与计数值或预期值进行比较。这让我可以看到我们需要订购多少商品。
我希望做的是(在另一个选项卡上)生成一个单独的列表,该列表只显示产品代码、产品名称和要订购的数量。
计算所有内容的主选项卡名为“完整列表”,即 Sheet06。
有多行,但我感兴趣的行从第 9 行开始,位于 C(产品代码)、D(产品名称)和 P(订购数量)列上,并且有超过一千行产品使用一些空白行来尝试使其易于阅读(如果需要,这些行可以用一些东西填充或使用 Q 列来获得 TRUE/FALSE "=ISNUMBER(P9)" 等式)
在 P 列,如果不需要订单,则有空格 (="") 或文本
|A|B|Product Code|Name |E|F|G|H|I|J|K|L|M|N|O|Order
9 | | |00002 |something| | | | | | | | | | | |""
10| | |345663 |something| | | | | | | | | | | |3
11| | |6534214 |something| | | | | | | | | | | |15
12| | | | | | | |(Blank row)| | |
13| | |24435224 |something| | | | | | | | | | | |DONT ORDER
14| | |8784347 |something| | | | | | | | | | | |8
15| | |357823 |something| | | | | | | | | | | |""
我一直在尝试创建(但失败)的是另一个名为“订单”的选项卡,即 Sheet07
当且仅当另一个选项卡上的 P 行有数字时,它应该复制产品代码、名称和订购数量。此外,这必须复制为订单(18、4 等)生成的值,而不是公式(=E9-F9+G9....)。
|A|Product Code|Name |Order
4| |345663 |something|3
5| |6534214 |something|15
6| |8784347 |something|8
我已经为此苦苦挣扎了很长一段时间,并且遇到了心理障碍。
任何帮助,将不胜感激 :)