【问题标题】:Excel VBA - Sub not finishing after Call with TargetExcel VBA - 使用目标调用后子没有完成
【发布时间】:2017-12-06 21:10:14
【问题描述】:

我正在尝试制作一个根据页面上的不同选择进行调整的工作表。有 3 个单元格将下拉列表,它们将根据所选值修改页面。当我直接在 Worksheet_SelectionChange 中启动子程序时,它可以正常工作(因为它只是一个),但是由于我需要 3,我想根据您选择的单元格启动它。我现在遇到的问题是选择有效(使用 Showmsg 完成测试),但之后应该发生的一切都没有。

Option Explicit

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Selection.Count = 1 Then
        If Not Intersect(Target, Range("D25")) Is Nothing Then
            Call LineBlock_Change(Target)
        End If
    End If
End Sub

---------

Sub LineBlock_Change(ByVal Target As Range) 'D25
    Select Case Target
    Case "Non Protected / Non Redundant"
        ' Affichage 1 Ligne
        Columns("J:O").Hidden = True
    Case Else
        ' Affichage 2 Ligne
        Columns("J:O").Hidden = False
    End Select
End Sub

问题是,当我在 Worksheet_SelectionChange 中使用相同的 Sub 代码时(对可以选择的单元格有限制)它确实有效,但在尝试与 Sub 共进午餐时却没有。我个人不知道是否可以这样跟进,或者我是否需要重新考虑这样做的方式。

提前感谢您的帮助。


更新:当我注意到我可能有一些问题真正解释我不能做什么时,我将尝试另一种方法。 我有这个代码:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    If Target.Address <> "$D$25" Then Exit Sub
    Select Case Target
     Case "Non Protected / Non Redundant"
        ' Affichage 1 Ligne
        Columns("J:O").Hidden = True
    Case Else
       ' Affichage 2 Ligne
        Columns("J:O").Hidden = False
    End Select
End Sub

它完全符合我的要求,当 D25 有字符串:“非保护/非冗余”时,它隐藏了 J:O 列。现在我的问题是 D25 不是我希望隐藏/取消隐藏列/行的唯一条件。因此,我正在尝试编写一个代码,该代码将根据选择的 Cell 以及其中的内容来启动 sub。 虽然当我尝试以一种可以作为子工作的方式编写代码时,它并没有按照我想要的方式做出反应(隐藏列)。

【问题讨论】:

  • 使用Case Else 而不是Case Not "Non Protected / Non Redundant"
  • 已更正,但隐藏行的后续操作不起作用。
  • 您的代码按照发布的方式工作,因此有些内容您没有提及,或者那不是真正的代码(可以解释所有错别字)。
  • 这才是真正的代码。我已经尝试在页面或模块上启动它,但它对我不起作用。如果我可以问,您还指的是什么错别字?
  • 所有在 cmets 中提到的。 确切地说 “不起作用”是什么意思?

标签: vba excel


【解决方案1】:
Sub LineBlock_Change(ByVal Target As Range) 'D25

    Stop '<-  see what happens
    Select Case Target

    Case "Non Protected / Non Redundant"
        ' Affichage 1 Ligne
        Columns("J:O").Hidden = True
    Case Else
        ' Affichage 2 Ligne
        Columns("J:O").Hidden = False        
    End Select

End Sub

LineBlock的问题如下:

  • Column 应该是 Columns()
  • Columns("J:O").EntireRow.Hidden = True 隐藏整个工作表。那太棒了!但您可能需要删除 EntireRow 部分。

编辑:

更新后,读到“D25 不是我希望隐藏/取消隐藏列/行的唯一条件”,这是您应该做的:

Select Case True

    Case Target = "Non Protected / Non Redundant"
        'some action
    Case Range("A1") = "something else"
        'some other action
    Case Else
        Columns("J:O").Hidden = False
End Select

【讨论】:

  • @Ekounerio - 你试过把Bock改成Block吗?
  • 哦,是的,之后直接更正了。但我确定不是这样,因为其他潜艇也不起作用。 (只举了一个例子。
  • @Ekounerio - 这个Columns("J:O").EntireRow.Hidden = True 可能是我在过去 3 个月中见过的最好的代码! :) 谢谢! :)
  • 好吧,谢谢 :D 遗憾的是,无论是否使用 EntireRow,都没有什么不同。我遇到的主要问题是感觉“选择有效,但并没有走得更远。
  • @write StopSelect Case Target 之前,看看会发生什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-18
  • 2012-05-28
  • 1970-01-01
相关资源
最近更新 更多