ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] strptr函数,或许对你有用(转的O(∩_∩)O)

[复制链接]

TA的精华主题

TA的得分主题

发表于 2009-11-23 13:44 | 显示全部楼层 |阅读模式
在VBA程序中,InputBox函数用于输入字符串,提供了一个文本框和确定、取消两个按钮,如果按 “确定” 则返回文本框内的内容,按 “取消” 则返回一个长度为零的字符串 (""),但是如果文本框内没有内容,“确定”是返回(""),“取消”也是返回(""),那么怎样在VBA中区分呢?

请看下面的这一段代码:

Private Sub Test()
    Dim strTemp As String
    strTemp = Application.InputBox("test", "提示 - http://www.excelba.com", "False")
    If StrPtr(strTemp) = 0 Then
        MsgBox "You'v pressed 取消"
    Else
        MsgBox "You'v pressed 确定"
    End If
End Sub

那StrPtr何许人也,很可惜,VBA的帮助中竞找不到相关的帮助,于是就在网海里搜索:

StrPtr:返回真正的UNICODE字符串缓冲区的地址。也就是字符串变量在内存的地址!

StrPtr是唯一能直观地告诉你空字符串(点击确定时返回的值)和null字符串(点击取消时返回的值)的不同的方法。对于null字符串(vbNullString),StrPtr的返回值为0(因为变量中什么都没有),而对于空字符串,函数的返回值为非零(即字符串地址值)。

VBA中,我们还可以利用Application.InputBox来代替InputBox函数,但有了这个方法,你就可以区别上面的情况了!

转载请注明:本文来自:Excel吧 (www.excelba.com) 详细出处参考:http://www.excelba.com/Art/Html/326.html

中午无聊的时候浏览网页的时候看到的,或许你已知道,就当复习了吧
调用api的时候或许你会遇到它

TA的精华主题

TA的得分主题

发表于 2009-11-23 14:17 | 显示全部楼层
学习了,THX

TA的精华主题

TA的得分主题

发表于 2014-2-7 23:41 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
MARK。。。

TA的精华主题

TA的得分主题

发表于 2014-2-8 00:09 | 显示全部楼层
可以在VB中找资料
如果功夫不够深,慎用

TA的精华主题

TA的得分主题

发表于 2014-2-8 09:42 | 显示全部楼层
好像记得Application.InputBox的取消是返回boolean值的,只有inputbox是返回空吧。

TA的精华主题

TA的得分主题

发表于 2014-4-12 12:40 | 显示全部楼层
我的怎么点击都是弹出我点击了确定啊?

TA的精华主题

TA的得分主题

发表于 2017-5-17 11:14 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 zlt1982 于 2017-5-17 13:21 编辑
dreamhight 发表于 2014-4-12 12:40
我的怎么点击都是弹出我点击了确定啊?

application.inputbox 方法不能通过这个函数判断,可以输出下两种情况下的 StrPtr(strTemp) 返回值看下,都是已经分配了内存地址的。

application.inputbox 方法要判断返回的逻辑值 false,而且不能使用 “false = strTemp” 这种等号判断(当输入值本身为 false 时无法进行区分),要使用
"Boolean" = TypeName(strTemp) 。


这个帖子是完整的 http://www.exceltip.net/thread-6625-1-1.html


TA的精华主题

TA的得分主题

发表于 2018-4-11 16:14 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2019-11-9 08:34 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
MARK,随时都用得上

TA的精华主题

TA的得分主题

发表于 2020-10-9 22:04 | 显示全部楼层
  1.     Dim xStr&
  2.     xStr = Application.InputBox("InputBox 测试", "Mars Wang", Type:=1)
  3.     MsgBox xStr
  4.     MsgBox StrPtr(xStr)
复制代码

如果是Application.InputBox,那么填0和点取消或叉叉都会一样的结果
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-17 06:28 , Processed in 0.039105 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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