隐藏不与其他宏代码一起使用的代码行部分

时间:2014-12-11 16:58:02

标签: excel-vba hide vba excel

我一直试图让两个独立的代码根据单元格值或数据验证选择来更改我的工作表。为了突出我的意图,我有一个Steel Structural成员数据库,我正在尝试创建一个工作表,如果他们想要US或Metric单位,最终用户将选择该工作表。基于该选择,我需要隐藏第11行或第12行。我已经在工作表上附加了一个宏,它将用户从数据验证列表中选择到后续列中。为了进一步解释我的最终目标:第11行是美国单位的成员,12是指标单位。如果最终用户选择美国,他们将看不到度量标准行,反之亦然。

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo exitHandler

Dim rngDV As Range
Dim iCol As Integer

If Target.Count > 1 Then GoTo exitHandler

On Error Resume Next
Set rngDV = Cells.SpecialCells(xlCellTypeAllValidation)
On Error GoTo exitHandler
If rngDV Is Nothing Then GoTo exitHandler
If Intersect(Target, rngDV) Is Nothing Then
   'do nothing
    Else
      Application.EnableEvents = False
       If Target.Column = 3 Then
       If Target.Value = "" Then GoTo exitHandler
       If Target.Validation.Value = True Then
        iCol = Cells(Target.Row, Columns.Count).End(xlToLeft).Column + 2
        Cells(Target.Row, iCol).Value = Target.Value
    Else
  MsgBox "Invalid entry"
  Target.Activate
  End If
 End If
End If

exitHandler:
Application.EnableEvents = True

If Target.Address = "$AS$7" Then
    Rows("11").Hidden = (Target.Value = "Metric")
    Rows("12").Hidden = (Target.Value = "US Standard")
End If
End Sub

我将它们作为两个Worksheet_Change事件并且有编译器错误,我试图将这两个程序分解为单独的子例程,即:

Private Sub Worksheet_Change(ByVal Target As Range)
SelectStructural Target
HideRow Target
End Sub

Sub SelectStructural (ByVal Target As Range)
...
End Sub
Sub HideRow (ByVal Target As Range)
...
End Sub

其中......代表之前提到的代码。在这种情况下,如上所述,将成员输入后续列的宏工作但不是行隐藏例程。

非常感谢提前。

1 个答案:

答案 0 :(得分:0)

以下是我要解决的问题。我根本不会有这样的workheet_change事件,因为每次有人输入一个东西,这个代码都必须运行。有一些用户选择美国或公制的地方,当这种情况发生变化时,你可以让活动结束。

确定用户输入美国或公制的位置。

Sub MetricCheck_Change(ByVal Target As Range)
Dim userChoice as String

    userChoice = LCase(Sheets("Sheet1").Range("A1"))  'Convert a user input to lowercase
    If userChoice = "us" Then
        Call UsSub
    ElseIf userChoice = "metric" Then
        Call MetricSub
    Else
        MsgBox("Neither US or Metric has been selected.  Please select to continue.")
    End If

End Sub

有一个显示美国行的子,并隐藏度量标准。只记录一个可以做到这一点的宏,然后把它放在这里。

Sub UsSub()
    'Show the US Row
    'Hide the Metric Row
End Sub

对于Metric Sub

执行相反的操作
Sub MetricSub
    'Hide the US Row
    'Show the Metric Row
End Sub