【发布时间】:2018-05-07 14:18:01
【问题描述】:
我有一个完全锁定的电子表格,并通过 VBA 控制所有排序和过滤。我还有另一个脚本可以在关闭时隐藏工作表并自动保存文件以隐藏该工作表。
我一直在试图弄清楚如何使用 VBA “单击”一个按钮(形状),这将清除任何已过滤的内容,然后“单击”另一个按钮(形状),该按钮将按字母顺序对电子表格进行排序.按钮(形状)已经与用户交互完美配合,但我也希望这些按钮(形状)在工作表打开时自动触发。
第一个按钮分配给宏SearchBox,与以下VBA相关联-
Sub SearchBox()
Dim myButton As OptionButton
Dim SearchString As String
Dim ButtonName As String
Dim sht As Worksheet
Dim myField As Long
Dim DataRange As Range
Dim mySearch As Variant
Set sht = ActiveSheet
On Error Resume Next
sht.ShowAllData
On Error GoTo 0
Set DataRange = sht.ListObjects("DataTable").Range
mySearch = sht.Shapes("UserSearch").TextFrame.Characters.Text
If IsNumeric(mySearch) = True Then
SearchString = "=" & mySearch
Else
SearchString = "=*" & mySearch & "*"
End If
For Each myButton In sht.OptionButtons
If myButton.Value = 1 Then
ButtonName = myButton.Text
Exit For
End If
Next myButton
myField = Application.WorksheetFunction.Match(ButtonName, DataRange.Rows(1), 0)
DataRange.AutoFilter _
Field:=myField, _
Criteria1:=SearchString, _
Operator:=xlAnd
sht.Shapes("UserSearch").TextFrame.Characters.Text = ""
End Sub
第二个更简单,它只是按特定列对数据表进行排序 -
Sub Sort_Name()
Dim oneRange As Range
Dim aCell As Range
Set oneRange = Range("A4:H1162")
Set aCell = Range("A4")
oneRange.Sort Key1:=aCell, Order1:=xlAscending, Header:=xlYes
End Sub
基本上,我还在学习,我觉得可以通过脚本触发这些按钮,但我还没有弄清楚。任何帮助将不胜感激。
【问题讨论】:
-
不需要点击按钮。您可以在另一个代码中使用
Call SeachBox直接调用代码 -
你像人一样思考。只需在代码中直接调用按钮链接到的子例程即可。按钮是为人类设计的。
-
因此,在
Workbook_Open事件中,您将有两行代码:SearchBox /n SortCode(/n 代表新行,实际代码中不包含)。 -
太棒了,谢谢大家 - 当@JNevill 说我像人类一样思考时,我查看了按钮本身正在进行的调用,我的问题是主脚本在 Sheet2 中,所以它不会工作,因为这是一个无效的电话。它现在运行良好,我的杰作已经完成。