VBA – 如何使用macrosbutton多个框

我是VBA和macros的新手。 我将尝试解释我正在尝试创build的内容,然后解释我遇到的问题。

在我的Excel中有两张纸; “工作表1”和“工作表2”。

工作表1充满了数据。 这个数据从A列到AK,有4206行。

工作表2仅包含一个input单元格框,其旁边有一个“GO”button。 该button被分配给一个macros。

我想创build什么?

在input单元格框中input“GB”之类的内容,然后按“GO”button。 'GO'button将通过Sheet 1查看其中包含“GB”的单元格。 有两个特定的列可以有'GB'在其中; 其中一列是K列,一列是L列。“GO”button将在这两列中查找“GB”并过滤行。

重要说明:我不想devise一个macros,以便他们在列K 列L中查找“GB”。相反,我希望他们在列K 列L中查找“GB”。

我创造了什么?

我devise了一个macros,并将其分配给“GO”框。 这是我input的代码:

Option Explicit Sub Macro1() ' ' Macro1 Macro ' Sheets("Sheet 1").Select If ActiveSheet.AutoFilterMode Or ActiveSheet.FilterMode Then ActiveSheet.ShowAllData End If Range("A12:AM4216").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _ Range("A1:AK2"), Unique:=False End Sub 

什么与代码一起工作? 问题是什么?

该代码将返回在列L中具有“GB”的行。这非常棒。 不过,我正在寻找如何更改代码的方法,以便它将返回列K 列L中具有“GB”的行。

有什么build议吗?

谢谢。

我认为这样的事情应该可以做到。 对于'GB'是否会有所不同,或者每次都是相同的,我对此有点困惑,所以我包含了这两个选项(默认情况下,代码假定它是静态的)。 我也不知道是否需要区分大小写,所以默认情况下不区分大小写(区分大小写,删除LCasefunction)。

 Sub Macro1() Dim ws As Worksheet Dim firstRow As Long, lastRow As Long Dim firstCol As String, secondCol As String Dim findStr As String Dim x As Long 'define worksheet to check Set ws = ActiveWorkbook.Sheets("Sheet1") 'or whichever sheet 'define search string to check for based on static value findStr = "GB" 'define search string to check for based on cell value 'findStr = ws.cells("A1") 'or whichever cell 'define start and end rows to loop through firstRow = 12 lastRow = 4216 'define columns to check firstCol = "K" secondCol = "L" 'turn off screenupdating Application.ScreenUpdating = False 'unhide rows in range ws.Range(ws.Rows(firstRow).EntireRow, ws.Rows(lastRow).EntireRow).Hidden = False 'loop through the rows For x = firstRow To lastRow 'if either cell has the search string in it (regardless of case)... If InStr(LCase(ws.Range(firstCol & x)), LCase(findStr)) Or InStr(LCase(ws.Range(secondCol & x)), LCase(findStr)) Then '...do nothing Else '...otherwise, hide the row ws.Rows(x).EntireRow.Hidden = True End If Next x 'turn screenupdating back on Application.ScreenUpdating = True End Sub 

请注意,像上面提到的Cyril,这不是一个真正的filter:它只是隐藏行不符合指定的标准。