Range.Find.Execute错误“参数不可选”Excel VBA

我的名字是Joe,我对Excel VBA编程非常新颖。 我被要求在实习期间制定一个方便分析停车数据的程序,并决定使用Excel作为存储数据和创build图表的基础。 我也决定我需要使用macros来改进程序的function和自动化。

为了开发这个工作表,我学习了基本的Excel VBA,所以它实际上是我第一次在Excel中编写macros。

无论如何,工作表中的数据存储在不同时间段的列中,列的顶部有一个单元格标记列。 数据按购物中心,电影院,超市等土地types分类。用户可以点击ComboBox来select土地使用情况,并且有一个macros显示各个土地用途的数据该图使用Range.Find方法。 我的问题是,一些土地使用不具有与他们不同的function相关的数据,我希望能够知道这之前Range.Find方法返回一个错误。 因此,我认为一个简单的If语句可以通过合并Range.Find.Execute方法来工作,该方法应该返回一个布尔值,但在运行时总是返回一个Error,“参数不是可选的”。 debugging器总是强调“查找”。

我在Excel IDE中进行编辑(如果可以的话),而不是外部的VBA编辑器。 我目前的Excel版本是2010年。

我也搜刮堆栈溢出,MSDN和其他网站的答案,但我似乎无法find一个。 如果我错过了这个问题的答案,我会删除它,如果我find一个或如果有人指出。

下面是一些可以在工作表中使用的示例代码,除了第一行总是返回一个错误。 从MSDN网站的示例代码似乎也不工作。

If Range("A1:B20").Find.Execute(ComboBox1.Value) = True Then Range("A1:B20").Find(ComboBox1.Value).Activate 'And do this Else MsgBox ("No data available for this selection.") 'And do this End If 

首先,如果你要继续在VBA工作,我强烈build议为这个文档页面添加书签。 这对你前进将是非常宝贵的:)

当你看看Range.Find的文档时,说有一个必需的参数。 在你的第一个if语句中,你试图用无参数来调用它:

 If Range("A1:B20").Find.Execute(ComboBox1.Value) = True Then 

请注意,该文件也说

如果找不到匹配项,此方法返回Nothing。

大概你想做的事情是这样的:

 Dim FoundRange as Range Set FoundRange = Range("A1:B20").Find(ComboBox1.Value) if not(FoundRange is Nothing) then Range("A1:B20").Find(ComboBox1.Value).Activate 'And do this else MsgBox ("No data available for this selection.") end if 

如果成功, Find()返回一个Range对象,而不是布尔值。 并没有Find.Execute

 Dim r As Range Set r = Range("A1:B20").Find(ComboBox1.Value) If Not r Is Nothing Then r.Activate 'And do this Else MsgBox ("No data available for this selection.") 'And do this End If 

我认为这个问题是,你需要给找一个值来寻找(我不知道为什么你会使用.execute)。

以下应该工作:

 If not Range("A1:B20").Find(ComboBox1.Value) is nothing Then Range("A1:B20").Find(ComboBox1.Value).Activate 'And do this Else MsgBox ("No data available for this selection.") 'And do this End If 

请注意,我用“没有”来确定是否在范围内findcombobox1.value。