我为我的工作创建了一个Excel工作簿,用于收集信息。在本工作簿中,我有一张表格,其中可以填写各种货币的详细信息。根据编制者的选择,单元格B5中的值将更改为USD或LC。如果单元格B5中的值为USD,则应隐藏C列和E列。这里的问题是这段代码不会立即取消隐藏列。单击随机单元格后,将隐藏列。如果有针对此问题的解决方案,请告诉我,每次都隐藏列而不点击随机单元格。谢谢。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Range("B5").Value = "USD" Then
Union(Columns("C"), Columns("E")).EntireColumn.Hidden = True
ElseIf Range("B5").Value = "LC" Then
Union(Columns("C"), Columns("E")).EntireColumn.Hidden = False
End If
End Sub
谢谢大家的意见。让我进一步阐述我的问题。原则上我的VBA代码有效。唯一的事情是,在B5单元格改为美元后,最初没有任何反应。单击此工作表中的随机单元格后,VBA代码将工作并隐藏列。如果单元格B5中的值是LC,则同样适用。然后,VBA代码不会立即生效。单击工作表中的随机单元格后,列将被取消隐藏。
关于单元格B5的小更新。因此,单元格B5包含与另一个工作表中列出的单元格链接的公式。从另一张表中的列表中选择一个值后,单元格B5将通过IF函数确定B5中的值是LC还是USD。
我现在担心在准备者在列出的单元格中选择一个值后,它不会点击指定表格中的随机单元格,导致他或她将看到错误的信息。
如果您需要更多信息,请与我们联系。谢谢。
PS。我在创建VBA代码方面不是很强大。
答案 0 :(得分:1)
您使用的是错误的活动。
当您选择其他单元格时会发出 SelectionChange
Change
会立即触发。
Private Sub Worksheet_Change(ByVal Target As Range)
If Range("B5").Value = "USD" Then
Union(Columns("C"), Columns("E")).EntireColumn.Hidden = True
ElseIf Range("B5").Value = "LC" Then
Union(Columns("C"), Columns("E")).EntireColumn.Hidden = False
End If
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If Target = Range("B5") Then Union(Columns("C"), Columns("E")).EntireColumn.Hidden = (Target.Value = "USD")
End Sub
(改编自@ Vityata的comment below)
答案 1 :(得分:0)
对您的代码进行一些更改:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$B$5" Then
If Range("B5").Value = "USD" Then
Union(Columns("C"), Columns("E")).EntireColumn.Hidden = True
Else
Union(Columns("C"), Columns("E")).EntireColumn.Hidden = False
End If
Application.Calculate
End If
End Sub
1:正确的事件是Change
(当工作表中的值发生变化时),而不是SelectionChange
(选择更改时)。
2:你的代码在我这边工作,所以我猜它不适合你,因为你有一些计算。我已经添加了行Application.Calculate
,即使您的计算设置为手动,也会刷新电子表格。
3:我已添加If Target.Address
条件,仅在更改的单元格是正确的单元格时进行检查。
4:我已添加Else
而不是ElseIf cell = "LC"
,因为它更快,因为我觉得它更清晰(如果用户完全删除了价值)在货币和美元之前,没有人会取消隐藏C和E列。
答案 2 :(得分:0)
保持简单,
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim rng As Range
Set rng = Range("B5")
If rng.Value = "USD" Then Columns("C:E").EntireColumn.Hidden = True
If rng.Value = "LC" Then Columns("C:E").EntireColumn.Hidden = False
End Sub