Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 范围的VBA代码问题。I';我得到类型不匹配错误13_Excel_Vba - Fatal编程技术网

Excel 范围的VBA代码问题。I';我得到类型不匹配错误13

Excel 范围的VBA代码问题。I';我得到类型不匹配错误13,excel,vba,Excel,Vba,下面的代码适用于单个单元格,但当我想在某个范围内实现此功能时,会出现类型不匹配。如果有人能做到以下几点,我们将不胜感激。谢谢 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Range("A159:A1034").Value = "SC" Then Range("J159:J1034").Value = "SC:NA&quo

下面的代码适用于单个单元格,但当我想在某个范围内实现此功能时,会出现类型不匹配。如果有人能做到以下几点,我们将不胜感激。谢谢

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Range("A159:A1034").Value = "SC" Then
        Range("J159:J1034").Value = "SC:NA"
    Else
        Range("J159:J1034").Value = Null
    End If
End Sub
即使
Range(“A159:A1034”).Value
可以工作,但它不能工作,它必须立即返回875个单元格的值。很可能不是你想要的

在范围内循环并进行调整的最简单方法如下:

Dim area As Range, c As Range
Set area = Range("A159:A1034")
For Each c In area
    If c.Value = "SC" Then
        c.Value = "SC:NA"
    Else
        c.Value = Null
    End If
Next c
Private Sub Worksheet_Change(ByVal Target As Range)
Dim area As Range, c As Range
Set area = Range("A159:A1034")
If Not Intersect(Target, area) Is Nothing Then
    Application.EnableEvents = False
    If Target.Value = "SC" Then
        Target.Value = "SC:NA"
    Else
        Target.Value = Null
    End If
    Application.EnableEvents = True
End If
End Sub
但由于多种原因,我不建议在
工作表\u selection change
事件中使用该选项

首先,这将是一个相当繁重的操作,每次更改选择时都会运行。使整个工作表的处理速度非常慢

第二,任何包含“SC”的单元格都将更改为“SC:NA”,但在选择的下一次更改时,它们将全部消失。因为它们将无法通过检查并被转换为“Null”。这似乎是非常奇怪的行为

如果要在工作表事件中运行它,可以改为在
工作表\u Change
事件中运行它,并将其限制为仅在此范围内进行更改时运行

比如:

Dim area As Range, c As Range
Set area = Range("A159:A1034")
For Each c In area
    If c.Value = "SC" Then
        c.Value = "SC:NA"
    Else
        c.Value = Null
    End If
Next c
Private Sub Worksheet_Change(ByVal Target As Range)
Dim area As Range, c As Range
Set area = Range("A159:A1034")
If Not Intersect(Target, area) Is Nothing Then
    Application.EnableEvents = False
    If Target.Value = "SC" Then
        Target.Value = "SC:NA"
    Else
        Target.Value = Null
    End If
    Application.EnableEvents = True
End If
End Sub

如果您想触发对整个范围的检查–如第一个示例,请将其作为单独的子项,作为宏调用。

您希望何时
if-range(“A159:A1034”).Value=“SC”
为真?当范围内的每个单元格都有该值时,还是其他值?如果需要检查许多单元格的值,可能必须循环检查所有值。设置值更容易。