我叫 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/