excel VBA中的自动筛选

h43kikqp  于 2023-03-24  发布在  其他
关注(0)|答案(1)|浏览(187)

我使用自动筛选(不在VBA中)菜单来筛选仓库中的项目以及它们所在的货架。
当我过滤掉除了我想添加库存的货架之外的所有内容时,我添加的值(通过VBA编程的按钮,基本上复制了“添加到库存”(AKA“C4:C1000”行)中的所有内容,并将其添加到“当前库存”行(AKA“D1:d1000”))被添加到错误的行。
我的解决方案是使用自动过滤器找到正确的货架,写下添加到库存中的数量,然后按下按钮。
按钮的VBA代码(在我的新计划中)将完全像以前一样执行,只是这次它将首先删除过滤器,像以前一样执行,然后重新应用过滤器。
如何使用VBA重新打开自动筛选器?
我能找到的最接近我想要的是以下内容:

Activesheet.range("a4").autofilter

这只会阻止我的代码在中途完成执行。
其中一个页面的完整代码:

Sub AddtoInnTotalandclear()
'The macro is used to move all amounts plottet into "INN" colum. Amounts are moved into "TOTAL AMOUNT IN STORAGE" while clearing the "INN" colum simultaneously

'Removes flickering from the screen (part 1 of 2)
Application.ScreenUpdating = False

'removes the protection on the worksheet (NB! you have to have the current password in the code line for this to work)
ActiveSheet.Unprotect Password:="kirk"

'Copies the values from the "inn" colum
Range("c4:c1000").Copy

'Adds the copied values to the values already in the "Total Amount" colum
Range("d4:d1000").PasteSpecial Operation:=xlPasteSpecialOperationAdd

'Clears the "inn" colum
Range("c4:c1000").ClearContents

'Disable marchiing atnsa around copied range
Application.CutCopyMode = False

Range("d4:d1000").Select

Selection.Locked = True

'Allows autofilter usage despite the document being locked 
'&
'Re-Activates the password protection
With ActiveSheet
    .Protect Password:="kirk", AllowFiltering:=True
    .EnableSelection = xlNoRestrictions
End With

'Determines where you end up when you are finished
Worksheets("in").Range("c4").Select

'Removes flickering from the screen (part 2 of 2)
Application.ScreenUpdating = True

End Sub

我想删除/禁用自动过滤器,当我按下按钮,激活此VBA代码,然后重新激活自动过滤器,一旦整个过程完成。

n53p2ov0

n53p2ov01#

下面是一个演示示例。假设我们在colsAD中有数据,头在第1行。如果您运行:

Sub qwerty()
    Dim s As Worksheet
    Set s = ActiveSheet
    
    s.AutoFilterMode = False
    s.Range("A:D").AutoFilter
End Sub

最后,您将在colsAD上进行过滤,但在这些列中没有应用任何条件。

EDIT#1:

如果您的标题行是行#3,并且我们正在过滤colsAD,则:

Sub qwerty2()
    Dim s As Worksheet, N As Long
    Set s = ActiveSheet
    
    N = Cells(Rows.Count, "A").End(xlUp).Row
    s.AutoFilterMode = False
    s.Range("A3:D" & N).AutoFilter
End Sub

相关问题