Excel 使用ActiveCell.Row时出现类型不匹配错误

Excel 使用ActiveCell.Row时出现类型不匹配错误,excel,vba,Excel,Vba,这里有点麻烦。在名为“开始”的工作表中,此列中有“I”列,行中的所有字段都有相同的下拉列表: 表1 第2页 第3页 我想打开工作簿中与下拉列表中的值对应的工作表。例如,如果我从列表中选择“工作表1”,工作簿中的“工作表1”将打开。正如前面提到的,这些下拉列表跨越整个列“I”,所以无论我选择哪一行使用下拉列表,我都希望发生同样的事情。我已使用活动单元格。行,但获取类型不匹配错误: Private Sub Worksheet_Change(ByVal Target As Range)

这里有点麻烦。在名为“开始”的工作表中,此列中有“I”列,行中的所有字段都有相同的下拉列表:

  • 表1
  • 第2页
  • 第3页
我想打开工作簿中与下拉列表中的值对应的工作表。例如,如果我从列表中选择“工作表1”,工作簿中的“工作表1”将打开。正如前面提到的,这些下拉列表跨越整个列“I”,所以无论我选择哪一行使用下拉列表,我都希望发生同样的事情。我已使用活动单元格。行,但获取类型不匹配错误:

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)。激活
。一个更好的方法是初步检查这些表是否存在。。。