我一直试图让两个独立的代码根据单元格值或数据验证选择来更改我的工作表。为了突出我的意图,我有一个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
其中......代表之前提到的代码。在这种情况下,如上所述,将成员输入后续列的宏工作但不是行隐藏例程。
非常感谢提前。
答案 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