我在 VBA Excel 中编写了以下代码。目的是当我们单击切换按钮时,另一个工作表中的某些行和列将被隐藏。我有2个问题:1)运行速度很慢,代码花太长时间有什么问题? 2)如何在点击一个按钮时自动取消点击另外2个按钮?
`Private Sub ToggleButton1_Click()
If ToggleButton1.Value Then
MsgBox "Both Earth and Moon are applicable. All rows and columns are now visible"
Sheets("DIA_ISO26262_ISO21448").Rows.Hidden = False
End If
End Sub
Private Sub ToggleButton3_Click()
Dim x As Range
If ToggleButton3.Value Then
MsgBox "Column D and Earth-specific rows are hidden"
For Each x In Sheets("DIA_ISO26262_ISO21448").Range("E3:E109")
If x.Value = "" Then
x.EntireRow.Hidden = True
End If
Next x
Else
Sheets("DIA_ISO26262_ISO21448").Rows.Hidden = False
End If
Dim Earth As String
Earth = "D"
If ToggleButton3.Value Then
Application.Sheets("DIA_ISO26262_ISO21448").Columns(Earth).Hidden = True
Else
Application.Sheets("DIA_ISO26262_ISO21448").Columns(Earth).Hidden = False
End If
End Sub
Private Sub ToggleButton2_Click()
Dim c As Range
If ToggleButton2.Value Then
MsgBox "Column E and Moon-specific rows are hidden"
For Each c In Sheets("DIA_ISO26262_ISO21448").Range("D3:D109")
If c.Value = "" Then
c.EntireRow.Hidden = True
End If
Next c
Else
Sheets("DIA_ISO26262_ISO21448").Rows.Hidden = False
End If
Dim Moon As String
Moon = "E"
If ToggleButton2.Value Then
Application.Sheets("DIA_ISO26262_ISO21448").Columns(Moon).Hidden = True
Else
Application.Sheets("DIA_ISO26262_ISO21448").Columns(Moon).Hidden = False
End If
End Sub`
我写的代码可以工作,但太慢了。
尝试这样的事情:
Dim x As Range
Dim mX As Range
For Each x In Sheets("DIA_ISO26262_ISO21448").Range("E3:E109")
If x.Value2 = "" Then
If mX Is Nothing Then
Set mX = x
Else
Set mX = Union(mX, x)
End If
End If
Next
If Not mX Is Nothing Then
mX.EntireRow.Hidden = True
End If
关于按钮的切换,我建议将其外包给 mouseUp 事件。所以像这样:
Private Sub ToggleButton1_Click()
If ToggleButton1.Value Then
MsgBox "Both Earth and Moon are applicable. All rows and columns are now visible"
Sheets("DIA_ISO26262_ISO21448").Rows.Hidden = False
End If
End Sub
Private Sub ToggleButton1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal Xs As Single, ByVal Ys As Single)
ToggleButton2.Value = False
ToggleButton3.Value = False
End Sub
Private Sub ToggleButton2_Click()
Dim c As Range
If ToggleButton2.Value Then
MsgBox "Column E and Moon-specific rows are hidden"
For Each c In Sheets("DIA_ISO26262_ISO21448").Range("D3:D109")
If c.Value = "" Then
c.EntireRow.Hidden = True
End If
Next c
Else
Sheets("DIA_ISO26262_ISO21448").Rows.Hidden = False
End If
Dim Moon As String
Moon = "E"
If ToggleButton2.Value Then
Application.Sheets("DIA_ISO26262_ISO21448").Columns(Moon).Hidden = True
Else
Application.Sheets("DIA_ISO26262_ISO21448").Columns(Moon).Hidden = False
End If
End Sub
Private Sub ToggleButton2_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal Xs As Single, ByVal Ys As Single)
ToggleButton1.Value = False
ToggleButton3.Value = False
End Sub
Private Sub ToggleButton3_Click()
Dim X As Range
If ToggleButton3.Value Then
MsgBox "Column D and Earth-specific rows are hidden"
For Each X In Sheets("DIA_ISO26262_ISO21448").Range("E3:E109")
If X.Value = "" Then
X.EntireRow.Hidden = True
End If
Next X
Else
Sheets("DIA_ISO26262_ISO21448").Rows.Hidden = False
End If
Dim Earth As String
Earth = "D"
If ToggleButton3.Value Then
Application.Sheets("DIA_ISO26262_ISO21448").Columns(Earth).Hidden = True
Else
Application.Sheets("DIA_ISO26262_ISO21448").Columns(Earth).Hidden = False
End If
End Sub
Private Sub ToggleButton3_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal Xs As Single, ByVal Ys As Single)
ToggleButton1.Value = False
ToggleButton2.Value = False
End Sub