vba - Range.Find.执行错误 "Argument Not Optional"Excel VBA

标签 vba excel

我叫 Joe,我对 Excel VBA 编程非常很陌生。在实习期间,我被要求编写一个程序来分析 parking 数据,我决定使用 Excel 作为基础来存储数据并创建图表。我还决定需要使用宏来改进程序的功能和自动化。

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

无论如何,工作表将不同时间段的数据存储在列中,并在列顶部有一个单元格标记该列。数据按土地利用类型分开,例如购物中心、电影院、超市等。用户可以单击组合框来选择土地利用,并且有一个宏在中显示相应土地利用的数据。使用 Range.Find 方法绘制图表。我的问题是,某些土地用途没有与不同功能相关的数据,我希望能够在 Range.Find 方法返回错误之前知道这一点。因此,我认为一个简单的 If 语句可以通过合并 Range.Find.Execute 方法来工作,该方法应该返回一个 bool 值,但在运行时总是返回一个错误“参数不可选”。调试器始终突出显示“查找”。

我正在 Excel IDE(如果你可以这样调用它)中进行编辑,而不是外部 VBA 编辑器。我当前的 Excel 版本是 2010。

我还搜索了 Stack Overflow、MSDN 和其他网站来寻找答案,但似乎找不到。如果我错过了这个问题的答案,如果我找到答案或有人指出,我会将其删除。

下面是一些可以在工作表中使用的示例代码,但第一行始终返回错误。 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 工作,我强烈建议添加书签 this doc page 。这对你的 future 将是无价的:)

当您查看 Range.Find 的文档时,它说有一个必需参数。在第一个 if 语句中,您尝试不带参数调用它:

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

请注意,文档还说

This method returns Nothing if no match is found.

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

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

关于vba - Range.Find.执行错误 "Argument Not Optional"Excel VBA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32182447/

相关文章:

Excel宏将数据行复制到底行

vba - Word 宏用于查找并用文本框替换 Word 文档中的所有内容

VBA-Ubound Lbound错误

xml - Excel vba 解析复杂 XML

python - 使用 VBA 运行 .exe

excel - 计算/汇总一列但排除#N/A

excel - 过滤表中的日期值

excel - 使用 Active.cell.column 和行范围的 VBA 范围

excel - 检查整列的颜色

excel - 使用 VBA 在 Excel 中创建每月选项卡