Excel 使用ActiveCell.Row时出现类型不匹配错误
这里有点麻烦。在名为“开始”的工作表中,此列中有“I”列,行中的所有字段都有相同的下拉列表:Excel 使用ActiveCell.Row时出现类型不匹配错误,excel,vba,Excel,Vba,这里有点麻烦。在名为“开始”的工作表中,此列中有“I”列,行中的所有字段都有相同的下拉列表: 表1 第2页 第3页 我想打开工作簿中与下拉列表中的值对应的工作表。例如,如果我从列表中选择“工作表1”,工作簿中的“工作表1”将打开。正如前面提到的,这些下拉列表跨越整个列“I”,所以无论我选择哪一行使用下拉列表,我都希望发生同样的事情。我已使用活动单元格。行,但获取类型不匹配错误: Private Sub Worksheet_Change(ByVal Target As Range)
- 表1
- 第2页
- 第3页
Private Sub Worksheet_Change(ByVal Target As Range)
If Rows(ActiveCell.Row).Value = "Sheet 1" Then
Worksheets("Sheet 1").Visible = True
Worksheets("Sheet 1").Activate
Else
If Rows(ActiveCell.Row).Value = "Sheet 2" Then
Worksheets("Sheet 2").Visible = True
Worksheets("Sheet 2").Activate
Else
If Rows(ActiveCell.Row).Value = "Sheet 3" Then
Worksheets("Sheet 3").Visible = True
Worksheets("Sheet 3").Activate
End If
End If
End If
End Sub
有什么想法吗?你可以:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 9 Then ThisWorkbook.Worksheets(Target.Value).Activate
End Sub
注意:只有当目标.Value
与图纸名称完全匹配时,此选项才有效。您可以执行以下操作:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 9 Then ThisWorkbook.Worksheets(Target.Value).Activate
End Sub
注意:只有当
Target.Value
与工作表名完全匹配时,这才有效您应该使用Target
而不是ActiveCell
:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim v1 As Long, v2 As String
v1 = Target.Column
v2 = Target.Value
If v1 <> 9 Then Exit Sub
If v2 = "Sheet 1" Or v2 = "Sheet 2" Or v2 = "Sheet 3" Then
Worksheets(v2).Visible = True
Worksheets(v2).Activate
End If
End Sub
Private子工作表\u更改(ByVal目标作为范围)
尺寸v1为长,v2为字符串
v1=目标.列
v2=目标值
如果是v1 9,则退出Sub
如果v2=“第1页”或v2=“第2页”或v2=“第3页”,则
工作表(v2).可见=真
工作表(v2)。激活
如果结束
端接头
您应该使用Target
而不是ActiveCell
:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim v1 As Long, v2 As String
v1 = Target.Column
v2 = Target.Value
If v1 <> 9 Then Exit Sub
If v2 = "Sheet 1" Or v2 = "Sheet 2" Or v2 = "Sheet 3" Then
Worksheets(v2).Visible = True
Worksheets(v2).Activate
End If
End Sub
Private子工作表\u更改(ByVal目标作为范围)
尺寸v1为长,v2为字符串
v1=目标.列
v2=目标值
如果是v1 9,则退出Sub
如果v2=“第1页”或v2=“第2页”或v2=“第3页”,则
工作表(v2).可见=真
工作表(v2)。激活
如果结束
端接头
我的第一个怀疑是行
没有值
属性如果target.Value….
您希望从行(ActiveCell.Row).Value
代码行?@FaneDuru.Value应该从下拉列表中读取所选值。我已经通过将If Range(“A”和(ActiveCell.Row)).Value=“Sheet 1”然后分别添加到每个条件来实现这一点。然后,您可以调整事件以仅使用代码行:工作表(Range(“A”)和Target.Row.Value)。激活。更好的方法是初步检查表是否存在…我的第一个怀疑是行
没有值
属性如果target.Value…
您对行(ActiveCell.Row)有什么期望值
代码行?@FaneDuru.Value应该从下拉列表中读取所选值。我已经通过将If Range(“A”和(ActiveCell.Row)).Value=“Sheet 1”然后分别添加到每个条件来实现这一点。然后,您可以调整事件以仅使用代码行:工作表(Range(“A”)和Target.Row.Value)。激活。一个更好的方法是初步检查这些表是否存在。。。