求教 --Application.Evaluate()提示类型不匹配问题

DD 2012-02-14 04:12:04
EXCEL表中有 姓名 身份证号 性别 出生日期....

Sub 查询()
Dim AdoConn As New ADODB.Connection
Dim AdoRst As New ADODB.Recordset
Dim strConn As String
Dim strSQL As String
Dim strFName As String
Dim I As integer
'设置连接字符串
strConn = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & ThisWorkbook.FullName & _
";Extended Properties=""Excel 12.0;HDR=YES"";"
'打开数据库链接
AdoConn.Open strConn
'设置SQL语句,查询所有记录
strSQL = "SELECT * FROM [数据库$] WHERE 0=1"
'执行查询,并打开记录集
AdoRst.Open strSQL, AdoConn, 3, 3
'重新设定SQL语句
strSQL = "SELECT * FROM [数据库$] WHERE"
'将各条件写入查询字段子句中
For I = 1 To AdoRst.Fields.Count - 1
strFName = AdoRst.Fields(I).Name

If Application.Evaluate(strfname) <> "" Then
strSQL = strSQL & " " & strFName & "=""" & Application.Evaluate(strFName) & """ AND"
End If
Next I
....
End Sub
当循环到I=2是,strFName 的值为"身份证号",Application.Evaluate(strfname)提示类型不匹配,返回ERROR ,如何解决这个问题???
...全文
191 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
DD 2012-02-15
  • 打赏
  • 举报
回复
代码太多,没有全部贴出来。 Application.Evaluate(strfname)当执行到STRFNAME = "身份证号"时,返回ERROR 2029
  • 打赏
  • 举报
回复
lz你这段代码很诡异。

1.strSQL = "SELECT * FROM [数据库$] WHERE 0=1" 是故意返回一个空记录集,用来获取字段?感觉多此一举。
2.貌似ADO recordset.fields的索引是从0开始的,您从1开始,2的时候是身份证号?
3.strSQL = strSQL & " " & strFName & "=""" & Application.Evaluate(strFName) & """ AND",费劲的构造了一条SQL语句,姑且不论构建的对不对,从代码看,你构建完也没有执行啊?是故意隐藏了代码吗?

以上没问题的话,只能单步调试,看Application.Evaluate(strfname)返回值的类型。
dsd999 2012-02-15
  • 打赏
  • 举报
回复
If Application.Evaluate(strfname) <> "" Then

直接用 if strfname <> "" Then
不行吗?
  • 打赏
  • 举报
回复
error:2029是应用成语定义或对象定义错误。

Evaluate所需的参数必须是规定的对象名称。如单元格、区域、名称、引用、图标等。你的参数传入的是一个字符串变量,所以肯定不行。要么你传入单元格对象,要么直接1楼方法判断。

5,139

社区成员

发帖
与我相关
我的任务
社区描述
其他开发语言 Office开发/ VBA
社区管理员
  • Office开发/ VBA社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧