Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VBA在输入后不会自动更新_Vba_Excel - Fatal编程技术网

VBA在输入后不会自动更新

VBA在输入后不会自动更新,vba,excel,Vba,Excel,我已经为收集信息的工作创建了Excel工作簿。在这本工作簿中,我有一张表格,可以填写各种货币的详细信息。根据制备方的选择,单元格B5中的值将更改为美元或信用证。如果单元格B5中的值为美元,则应隐藏C列和E列。这里的问题是,此代码不会立即取消隐藏列。单击随机单元格后,列将隐藏。请让我知道是否有一个解决方案,可以在每次不点击随机单元格的情况下隐藏列。多谢各位 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Ran

我已经为收集信息的工作创建了Excel工作簿。在这本工作簿中,我有一张表格,可以填写各种货币的详细信息。根据制备方的选择,单元格B5中的值将更改为美元或信用证。如果单元格B5中的值为美元,则应隐藏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

我现在担心,在制表人在列出的单元格中选择一个值后,它不会单击指定表格中的随机单元格,从而导致他或她看到错误的信息

如果您需要更多信息,请告诉我。多谢各位


另外,我不是很擅长创建VBA代码

您使用了错误的事件

选择其他单元格时,SelectionChange会触发,等等

更改在单元格内容更改后立即激发

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
替代解决方案: 改编自@vityta's

更多信息: MSDN:

MSDN:


对代码的一些更改:

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:正确的事件是当工作表中的值更改时更改,而不是选择更改时更改

2:你的代码在我这边有效,所以我猜它在你这边不起作用,因为你有一些计算错误。我添加了行应用程序。Calculate,即使您的计算设置为手动,它也会刷新电子表格

3:我添加了一个If Target.Address条件,仅当更改的单元格是正确的单元格时才进行检查

4:我添加了ElseIf cell=LC,而不是ElseIf cell=LC,因为它更快,因为我认为如果用户完全删除货币的价值,那么在它是美元之前,没有人会取消隐藏C列和E列。保持简单

    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

建议:如果可能的话,做一个简单的决定。如果B5=美元,则隐藏,如果不是,则取消隐藏。无需指定B5=LC。如果B5=USD,则隐藏Else取消隐藏。@QHarr是的,对不起,我打字速度快,格式不正确。让我来解决它什么不是立即取消隐藏意味着什么?目前,如果B5是美元,它将隐藏,如果是信用证,它将取消隐藏。似乎对我来说运行得很好。@QHarr好的,评论只能在前5分钟内编辑,我无法修复:O对此表示抱歉。亲爱的各位,我已经尝试了上述所有解决方案,但不幸的是,我的问题仍未解决。我已经包括了一些可能有帮助的进一步解释。非常感谢。或者您甚至可以使用这样的一个行程序:UnionColumnsC,ColumnsE.entireclumn.Hidden=cboolRangeB5.Value=USD在旁注上,虽然事件不是很好,但代码在我这边工作正常。它只是被触发的次数超过了必要的次数,但并不是因为选择的事件,OP才有问题——我想更多的是关于屏幕更新的问题。@vityta-smart!如果我把它添加到OP的答案中,你不会生气吧?如果工作表是动态添加的,那么你可以使用类似于工作簿\u SheetSelectionChange的东西,然后这将开始对所有工作表工作。此子项需要放在ThisWorkbook模块中。此外,您还可以在此子系统中编写一个if循环,以控制哪些工作表需要考虑,哪些不需要考虑。@ashleedawg-不,这很完美:谢谢您的详细解释。我尝试过这个VBA代码,但不幸的是它不起作用。我在最初的问题中作了进一步的解释。谢谢。我们假设范围5发生了物理变化。这将是工作表变更事件开始的唯一方式。
    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