VBA 代码单击切换按钮并隐藏另一个工作表中的某些行和列 - 如何取消单击其他按钮?

问题描述 投票:0回答:2

我在 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`

我写的代码可以工作,但太慢了。

excel vba togglebutton
2个回答
0
投票

尝试这样的事情:

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

0
投票

关于按钮的切换,我建议将其外包给 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
© www.soinside.com 2019 - 2024. All rights reserved.