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

时间:2015-08-24 12:33:29

标签: excel vba excel-vba

我的名字是Joe,而且我非常是Excel VBA编程的新手。我被要求在我的实习期间组建一个便于分析停车数据的程序,我决定使用Excel作为存储数据和创建图表的基础。我还决定使用宏来改进程序的功能和自动化。

我只是为了开发这张表而学习了基本的Excel VBA,所以这是我第一次在Excel中编写宏。

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

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

我还搜索了Stack Overflow,MSDN和其他网站以获得答案,但我似乎无法找到答案。如果我错过了这个问题的答案,我将删除它,如果我找到一个或如果有人指出它。

下面是一些可以在工作表中使用的示例代码,但第一行总是返回Error。 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

2 个答案:

答案 0 :(得分:0)

Private Sub Transtable() Dim connOk As Boolean Dim MyWorkBook As Workbook Dim CurSheet As Worksheet Dim listObj As ListObject Dim rs As New ADODB.Recordset Dim dbclass As New ADODB.Connection Dim ServerName As String, DataBaseName As String, strSQL As String Set dbclass = New ADODB.Connection ServerName = "E43b0784" DataBaseName = "Tables" ' Specify the OLE DB provider. dbclass.Provider = "sqloledb" ' Set SQLOLEDB connection properties. dbclass.Properties("Data Source").Value = ServerName dbclass.Properties("Initial Catalog").Value = DataBaseName ' Windows NT authentication. dbclass.Properties("Integrated Security").Value = "SSPI" dbclass.Open Set MyWorkBook = ActiveWorkbook Set CurSheet = MyWorkBook.Sheets("Sheet2") 'Create Table in Excel VBA CurSheet.ListObjects.Add(xlSrcRange, Range("A1:B4"), , xlYes).Name = "Table1" Set listObj = CurSheet.ListObjects("Table1") 'Table Name 'get range of Table HeaderRange = listObj.HeaderRowRange.Address DataRange = listObj.DataBodyRange.Address dbclass.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _ "Data Source=" & ThisWorkbook.FullName & ";" & _ "Extended Properties=""Excel 12.0;HDR=Yes;IMEX=1"";" strSQL = "SELECT * FROM [" & CurSheet.Name & "$" & Replace(DataRange, "$", "") & "];" rs.Open strSQL, dbclass, adOpenStatic, adLockReadOnly arrData = rs.GetRows rs.Close dbclass.Close Set rs = Nothing Set dbclass = Nothing Set listObj = Nothing Set CurSheet = Nothing End Sub 如果成功则返回Find()个对象,而不是布尔值。并且没有Range

Find.Execute

答案 1 :(得分:0)

我认为问题在于你需要给Find找一个要查找的值(我不确定你为什么要使用.execute)。

以下内容应该有效:

scp

请注意,我已经使用过#34; Is Nothing"确定是否在范围内找到了combobox1.value。