VBA代码,用于根据其中的值选择销售

VBA代码,用于根据其中的值选择销售,vba,Vba,我正在尝试编写一小段代码,用于选择A1:J10范围内包含“D”的所有单元格。对不起,如果下面的代码是次优的目的,但我试图使用这作为一种学习语言的手段。代码中似乎没有明显的错误(对我来说),但当我尝试运行它时,它会显示“无效的过程调用或参数” Option Explicit Dim t As Range Dim finalrange As Range Sub selectallbattleships() For Each t In Range("A1:J10") If

我正在尝试编写一小段代码,用于选择A1:J10范围内包含“D”的所有单元格。对不起,如果下面的代码是次优的目的,但我试图使用这作为一种学习语言的手段。代码中似乎没有明显的错误(对我来说),但当我尝试运行它时,它会显示“无效的过程调用或参数”

Option Explicit


Dim t As Range
Dim finalrange As Range

Sub selectallbattleships()
    For Each t In Range("A1:J10")
        If t.Value = "D" Then Set finalrange = Application.Union(finalrange, t)
    Next t

finalrange.Select

End Sub

您必须给
finalrange
一个初始范围,否则它以
Nothing
开始。代码在
应用程序中失败。Union(finalrange,t)
因为它试图联合
什么都不做

这里有几个问题

首先,您的Dim语句应该在sub中。接下来,您不能将任何内容联合起来,因此您需要检查finalrange是否已分配给任何内容,然后决定如何处理它-在这种情况下,如果尚未分配,则只将其分配给
t
,否则,
union
。最后,在
union
之前,您不需要“应用程序”

Sub selectallbattleships()
    Dim t As Range
    Dim finalrange As Range

    For Each t In Range("A1:J10")
        If t.Value = "D" Then
            If finalrange Is Nothing Then
                Set finalrange = t
            Else
                Set finalrange = Union(finalrange, t)
            End If
        End If
    Next t

finalrange.Select

End Sub

仅供参考,标注的变量不需要在子例程中。如果他们希望将它们设置为可由其他子例程访问的全局变量,该怎么办。