ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 5402|回复: 9

[求助] 与vlookup连用的Application.WorksheetFunction和application

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-3-11 10:07 | 显示全部楼层 |阅读模式
请教各位

如果是
Public Sub test()
k = Application.WorksheetFunction.VLookup([C1], [a1:b10], 2, False)
If IsError(k) Then
[f1] = "没有此user"
Else: [f1] = k
End If
End Sub
结果:报错不能取得vlookup属性

如果是
Public Sub test()
k = Application.VLookup([C1], [a1:b10], 2, False)
If IsError(k) Then
[f1] = "没有此user"
Else: [f1] = k
End If
End Sub
也就是Application.WorksheetFunction改成application就可以了。
请问在这里Application.WorksheetFunction.与application有什么根本性差异吗?
为什么会有这种区别。
谢谢

TA的精华主题

TA的得分主题

发表于 2018-3-11 10:37 | 显示全部楼层
如果VLOOKUP能找到值,两个语句应该都没问题的。如果VLOOKUP找不到查找值,问题才会出现吧。
application.vlookup是直接调工作表原始函数,没有经过中间方,当vlookup找不到结果时,k就返回错误值。
Application.WorksheetFunction.VLookup是调工作表函数为了和VBA对接而封装后的函数,有一个中间方,当VLOOKUP返回错误值时,到中间方那里就挂了,传不到K那。

评分

5

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-3-11 10:45 来自手机 | 显示全部楼层
看见星光 发表于 2018-3-11 10:37
如果VLOOKUP能找到值,两个语句应该都没问题的。如果VLOOKUP找不到查找值,问题才会出现吧。
application. ...

原来如此,谢谢!

TA的精华主题

TA的得分主题

发表于 2018-10-11 21:32 | 显示全部楼层
看见星光 发表于 2018-3-11 10:37
如果VLOOKUP能找到值,两个语句应该都没问题的。如果VLOOKUP找不到查找值,问题才会出现吧。
application. ...

学习了,还有这操作啊。

TA的精华主题

TA的得分主题

发表于 2019-9-21 09:44 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
看见星光 发表于 2018-3-11 10:37
如果VLOOKUP能找到值,两个语句应该都没问题的。如果VLOOKUP找不到查找值,问题才会出现吧。
application. ...

权威就是权威,不服不行,我在用k = Application.WorksheetFucntion.Large(rng, 4)时,总是显示运行时错语'438‘,对象不支持该属性和方法,改用k = WorksheetFucntion.Large(rng, 4),显示编译错误,变量未定义,只有k = Application.Large(rng, 4)可以顺利通测试,百思不得其解,今天看到看见星光老师的权威解释,算是明白了!!

TA的精华主题

TA的得分主题

发表于 2019-9-21 15:28 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2020-1-24 14:21 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
cui26896 发表于 2019-9-21 09:44
权威就是权威,不服不行,我在用k = Application.WorksheetFucntion.Large(rng, 4)时,总是显示运行时错 ...

既然 Application.Large(rng, 4)不经过中间商可以顺利通测试,,那么为什么Application.WorksheetFucntion.Large(rng, 4)时,总是显示运行时错语'438‘对象不支持该属性和方法?

TA的精华主题

TA的得分主题

发表于 2020-1-24 14:30 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
学习了留下脚印

TA的精华主题

TA的得分主题

发表于 2020-1-24 15:45 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 lss001 于 2020-1-24 15:50 编辑
myail 发表于 2020-1-24 14:21
既然 Application.Large(rng, 4)不经过中间商可以顺利通测试,,那么为什么Application.WorksheetFucntio ...

set rng = [a1:a10]
k = Application.WorksheetFunction.Large(Rng, 4) ' 正拼写
'k = Application.WorksheetFucntion.Large(rng, 4)' 5楼单词拼写错误

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-10-8 23:32 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
看见星光 发表于 2018-3-11 10:37
如果VLOOKUP能找到值,两个语句应该都没问题的。如果VLOOKUP找不到查找值,问题才会出现吧。
application. ...

请教:
在不打开文件的情况下查找,为什么报错呢,
aaa = Application.VLookup("星期日", "'D:\[测试.xls]sheet1'!$C$6:$D$15", 2, False)
"'D:\[测试.xls]sheet1'!$C$6:$D$15" 就是这一句错了,该怎么表示呢

但如果用workbooks("测试.xls").sheets("Sheet1").[C6:D6] 则能正确查找
bbb= Application.VLookup("星期日", workbooks("测试.xls").sheets("Sheet1").[C6:D6], 2, False)

我想不打开文件进行查找,能用第一种方式查找吗
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-19 07:44 , Processed in 0.042201 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表