带取消功能的VBA密码输入

2024-02-16

我一直在使用 Daniel Klann 编写的标准密码文本框(http://www.ozgrid.com/forum/showthread.php?t=72794 http://www.ozgrid.com/forum/showthread.php?t=72794)隐藏密码输入。

主要问题是标准InputBox返回空字段并以同样的方式取消。Application.InputBox然而能够返回一个False取消。

更新 Daniel Klann 的脚本以与Application.InputBox超出了我的范围。这将如何完成?

这是丹尼尔的代码:

Option Explicit 

 '////////////////////////////////////////////////////////////////////
 'Password masked inputbox
 'Allows you to hide characters entered in a VBA Inputbox.
 '
 'Code written by Daniel Klann
 'http://www.danielklann.com/
 'March 2003

 '// Kindly permitted to be amended
 '// Amended by Ivan F Moala
 '// http://www.xcelfiles.com
 '// April 2003
 '// Works for Xl2000+ due the AddressOf Operator
 '////////////////////////////////////////////////////////////////////

 '********************   CALL FROM FORM *********************************
 '    Dim pwd As String
 '
 '    pwd = InputBoxDK("Please Enter Password Below!", "Database Administration Security Form.")
 '
 '    'If no password was entered.
 '    If pwd = "" Then
 '        MsgBox "You didn't enter a password!  You must enter password to 'enter the Administration Screen!" _
 '        , vbInformation, "Security Warning"
 '    End If
 '**************************************



 'API functions to be used
Private Declare Function CallNextHookEx _ 
Lib "user32" ( _ 
ByVal hHook As Long, _ 
ByVal ncode As Long, _ 
ByVal wParam As Long, _ 
lParam As Any) _ 
As Long 

Private Declare Function GetModuleHandle _ 
Lib "kernel32" _ 
Alias "GetModuleHandleA" ( _ 
ByVal lpModuleName As String) _ 
As Long 

Private Declare Function SetWindowsHookEx _ 
Lib "user32" _ 
Alias "SetWindowsHookExA" ( _ 
ByVal idHook As Long, _ 
ByVal lpfn As Long, _ 
ByVal hmod As Long, _ 
ByVal dwThreadId As Long) _ 
As Long 

Private Declare Function UnhookWindowsHookEx _ 
Lib "user32" ( _ 
ByVal hHook As Long) _ 
As Long 

Private Declare Function SendDlgItemMessage _ 
Lib "user32" Alias "SendDlgItemMessageA" ( _ 
ByVal hDlg As Long, _ 
ByVal nIDDlgItem As Long, _ 
ByVal wMsg As Long, _ 
ByVal wParam As Long, _ 
ByVal lParam As Long) _ 
As Long 

Private Declare Function GetClassName _ 
Lib "user32" _ 
Alias "GetClassNameA" ( _ 
ByVal hWnd As Long, _ 
ByVal lpClassName As String, _ 
ByVal nMaxCount As Long) _ 
As Long 

Private Declare Function GetCurrentThreadId _ 
Lib "kernel32" () _ 
As Long 

 'Constants to be used in our API functions
Private Const EM_SETPASSWORDCHAR = &HCC 
Private Const WH_CBT = 5 
Private Const HCBT_ACTIVATE = 5 
Private Const HC_ACTION = 0 

Private hHook As Long 

Public Function NewProc(ByVal lngCode As Long, _ 
    ByVal wParam As Long, _ 
    ByVal lParam As Long) As Long 

    Dim RetVal 
    Dim strClassName As String, lngBuffer As Long 

    If lngCode < HC_ACTION Then 
        NewProc = CallNextHookEx(hHook, lngCode, wParam, lParam) 
        Exit Function 
    End If 

    strClassName = String$(256, " ") 
    lngBuffer = 255 

    If lngCode = HCBT_ACTIVATE Then 'A window has been activated
        RetVal = GetClassName(wParam, strClassName, lngBuffer) 
        If Left$(strClassName, RetVal) = "#32770" Then 'Class name of the Inputbox
             'This changes the edit control so that it display the password character *.
             'You can change the Asc("*") as you please.
            SendDlgItemMessage wParam, &H1324, EM_SETPASSWORDCHAR, Asc("*"), &H0 
        End If 
    End If 

     'This line will ensure that any other hooks that may be in place are
     'called correctly.
    CallNextHookEx hHook, lngCode, wParam, lParam 

End Function 

 '// Make it public = avail to ALL Modules
 '// Lets simulate the VBA Input Function
Public Function InputBoxDK(Prompt As String, Optional Title As String, _ 
    Optional Default As String, _ 
    Optional Xpos As Long, _ 
    Optional Ypos As Long, _ 
    Optional Helpfile As String, _ 
    Optional Context As Long) As String 

    Dim lngModHwnd As Long, lngThreadID As Long 

     '// Lets handle any Errors JIC! due to HookProc> App hang!
    On Error Goto ExitProperly 
    lngThreadID = GetCurrentThreadId 
    lngModHwnd = GetModuleHandle(vbNullString) 

    hHook = SetWindowsHookEx(WH_CBT, AddressOf NewProc, lngModHwnd, lngThreadID) 
    If Xpos Then 
        InputBoxDK = InputBox(Prompt, Title, Default, Xpos, Ypos, Helpfile, Context) 
    Else 
        InputBoxDK = InputBox(Prompt, Title, Default, , , Helpfile, Context) 
    End If 

ExitProperly: 
    UnhookWindowsHookEx hHook 

End Function 

标准InputBox返回空字段并以相同方式取消

不,不是的。它返回一个空指针(vbNullString) 取消时和空字符串 ("") 对于空输入。

Dim s As String
s = InputBox("Test")

If StrPtr(s) = 0 Then
  'Cancel pressed
Else
  'Ok pressed
End If

Because InputBoxDK返回InputBox的值不变,同样的逻辑适用于它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

带取消功能的VBA密码输入 的相关文章

  • 如何通过VBA刷新所有单元格

    有没有办法触发 从VBA Excel要求它重新评估所有Excel单元格 谢谢 The 计算 http msdn microsoft com en us library aa223802 28office 11 29 aspx方法可以重新计算
  • 将Excel数据转换为特定的JSON格式

    我收到一个 Excel 文件 xlsx 如下所示 行和列的数量可以变化 例如 它也可以如下所示 对于第一张图片中的 Excel 工作表 JSON 应如下所示 value Prename Nik Age 17 Country Switzerl
  • 数据透视和运行时错误 1004:应用程序定义或对象定义的错误

    我对宏和 VBA 编码很陌生 我正在尝试创建一个非常简单的宏 它从包含 33 列的表中获取数据并将其转换为数据透视表 只有最后 3 列 31 32 33 包含数字 我需要将其显示在枢轴上 因为我想比较当前月份 上个月以及逐月的变动 到目前为
  • 使用 C# 在 Powerpoint 2013 中创建具有多个系列的图表

    我使用的是 VS2013 Ultimate 带有 Office 2013 已安装 PowerPoint Excel 和 Word 我正在用 C 编码 我正在使用 C 创建 PowerPoint 演示文稿 到目前为止 我已经成功地完成了我想做
  • 在 Excel 2010 中添加基本功能区的 VBA 代码?

    我已经使用产品在 C addin express 中为 Excel 编写功能区 但我需要知道如何使用 vba 生成功能区 有人能为我提供一些代码来为此在工具栏中插入一个额外的功能区吗 我所说的功能区是指上面写着 公式 数据 评论 等的地方
  • 运行时错误:范围自动筛选上的“1004”

    我想用 VBA 做什么 使用数组过滤表并删除行 我的数组有 4 个元素 在循环中更改为有 5 个不同的集合 正在过滤的列有 5 个元素 我只想得到 1 这是一个循环 它将创建 5 个报告 每个报告根据第 29 列过滤不同的元素 如果在调试模
  • 连接两列之间的排列

    我需要有关 Excel 作业的帮助 Name City John London Maxx NY Ashley DC Paris 解决这个问题的方法必须是 John london John NY John DC John Paris Maxx
  • 列表框错误“无法设置列表属性。属性值无效。”

    我有一个带有列表框 文本框 组合框和保存按钮的用户表单 下面是我的保存按钮代码 Private Sub cmdsave Click Dim x As Integer x Me ListBox1 ListCount If Me cmbtran
  • 如何删除Excel 2010单元格中的某些字符

    在 A 列中 我有很多类似这样的名称 约翰 史密斯 我仍然希望它们在 A 中 但 被删除了 If John Smith 位于单元格 A1 中 然后使用以下公式执行您想要的操作 SUBSTITUTE SUBSTITUTE A1 内部 SUBS
  • 在 Word 2010 中复制形状而不使用 .Select?

    是否可以在 Word 2010 中复制形状而无需借助 Select 根据开发中心 http msdn microsoft com en us library office ff835500 aspx the Anchor属性返回形状的锚定范
  • 任务执行期间在任务窗格上滚动时工作表冻结

    我们正在使用office js API 开发一个office Addin 反复出现的问题损害了我们在店里的声誉 此问题是 Excel 插件 office js 中的工作表在滚动后被冻结 我编写了一个简单的脚本实验室片段代码 它重现了工作表冻
  • 更改使用 ClosedXML 显示的工作表

    我正在使用 ClosedXML 动态创建包含多个工作表的 Excel 工作簿 生成内容后 我正在努力将所选工作表更改回工作簿中的第一个工作表 并且在文档中找不到有关如何更改显示的工作表的任何内容 我努力了 wb Worksheet 1 Se
  • 元素不存在,尽管它具有 ID 属性

    在 selenium excel vba 中 我试图了解有关如何处理 CSS 选择器的更多信息 我很想知道 因为在检查带有 ID 的元素并运行代码时 我收到一条消息 指出未找到该元素 这是到目前为止的代码 Private bot As Ne
  • 有没有办法设置一个变量一次并在多个地方使用它而不给它模块级别的范围?

    我有一个循环将用户窗体控件添加到集合中 由于多个地方都需要该集合 因此我将其放入模块中并在需要时调用它 这意味着该集合仅在需要时才位于内存中 但这也意味着我每次想要使用它时都会运行一个循环 I could已给出集合模块级别范围并在第一次需要
  • 如何刷新幻灯片放映中的活动幻灯片?

    基于我的最后一个问题 https stackoverflow com questions 14503054 change the image of an image shape我得到了正确的代码来更改形状的图像 不幸的是 这不会更新活动演示
  • Apache POI - FileInputStream 工作,文件对象失败(NullPointerException)

    我尝试将所有工作表从一个工作簿复制到另一工作簿 问题是 如果我通过 FileInputStream 读取工作簿 它可以正常工作 但它不适用于文件对象 考虑以下方法 import java io BufferedReader import j
  • 在 VBA 循环中导出查询以根据字符串值选择数据

    我有一个名为 TEST 的表 下面的代码根据 Territory 列中的唯一值循环导出查询 该代码应该根据 Territory 列中的唯一值将数据导出到 Excel 文件 因此每个 Territory 值都有它自己的文件 我在设置 sql
  • 在 OpenXML 中应用数字格式

    我正在尝试使用 OpenXML 从头开始 创建 Excel 电子表格 并且一切正常 将实际值转储到实际单元格中 但现在我正在尝试将数字格式应用于列 但遇到了问题 我有styles xml看起来像这样
  • 更改索引设置访问 VBA

    我正在尝试自动化 Access 中的流程 我希望自动化的步骤之一是更改表中某些字段的索引设置 我需要这样做来提高后续查询的速度 使用索引查询速度大约快 100 倍 无论如何 假设我的表名为 Cars 如下所示 ID Name Charact
  • 检查所选单元格是否在特定范围内

    我正在使用 C 创建 Excel 加载项 如何检查选定的 或代码中范围表示的单元格 是否在特定范围内 例如如何检查单元格 P 5 是否在 A 1 Z 10 范围内 Use Application Intersect 像这样 在VBA中 Su

随机推荐

  • 我们应该在读取量大的应用程序中使用 dbref 还是嵌入文档

    我们正在开发一个阅读量很大并且可能包含数百万个文档的应用程序 几乎每个集合我们都需要引用用户信息 用户信息具有一些可能不时改变的属性 我们应该使用 DBref 还是将用户信息嵌入到所有集合中 在大量读取的应用程序中 DBref 性能有多差
  • 有没有办法在 EasyAdmin 3 中表示 JSON 字段?

    我是 Symfony 的新手 仍在学习中 我目前正在开发一个 Symfony 应用程序 其中有一个代表项目的表 每个项目都有id title startDate endDate and fields where fields是一个 JSON
  • 在 Graphviz 中对齐排名

    这是一个后续问题如何实现graphviz dot的严格反向排名 https stackoverflow com questions 47396374 how can i achieve strict reverse ranking of g
  • 如何使用Hibernate准备一个大的txt文件来批量插入?

    我试图将超过 200k 行插入 SQL 数据库 每行代表一个卡信息 70 字符串字段 在大型 TXT 文件中 我 新的 Java 开发人员 在这方面面临着相当困难的时期 我的方法是 读取文件 File file ReadFile loadC
  • 如何在 TensorFlow 2.0 中使用 tf.Lambda 和 tf.Variable

    我对 TensorFlow 2 0 非常陌生 我为循环 GAN 编写了如下代码 我仅提取用于构建生成器神经网络的代码 def instance norm x epsilon 1e 5 scale tf Variable initial va
  • 如何通过表单外的按钮提交表单?

    我想通过表单外部的按钮提交表单并对该表单进行验证 我正在使用react bootstrap 中的Form 标签 我的代码不验证表单
  • 类(静态)变量和方法

    我如何创建课程 即static https en wikipedia org wiki Method computer programming Static methods Python 中的变量或方法 在类定义内部但不在方法内部声明的变量
  • 使用 Boto 返回 CloudFormation 模板的输出?

    我正在尝试使用 Boto 从 CloudFormation 模板检索输出列表 我在文档中看到有一个名为boto cloudformation stack Output 但我认为这是未实现的功能 目前这可能吗 如果你做一个describe s
  • 如何在 iPython 笔记本中设置默认启动命令?

    我想在我创建的每个新笔记本中的几乎每个新笔记本中放置几个 带有我需要的命令的单元格 例如 当我创建一个新笔记本时 它应该放置一个 matplotlib inline import matplotlib pyplot as plt 默认在单元
  • 如何将变量值从 javascript 传递到 perl

    我正在使用 JavaScript 插件来获取 IP 地址 如果 IP 地址开头为10 15我想为一个变量分配一个值 如果IP以10 13我想为同一个变量分配不同的值 我不知道该变量是否必须在 Perl 或 JavaScript 中 我正在尝
  • Sencha Touch - Google 地图并将标记居中

    是我一个人的问题还是谷歌地图 API 似乎有点奇怪 尝试简单地显示某些坐标的标记 然后将屏幕置于标记的中心 在我的控制器中从视图触发 onGoogleMapRender function googleMap var long record
  • 无法使用 Osmdroid 实现 onTouchEvent(拖放)

    我一直在尝试实现 OnTouchEvent 以便当用户移动 拖放 覆盖项时我可以做出反应 我在 Osmdroid 网站上发现了类似的内容 http code google com p osmdroid issues detail id 22
  • OnClickListener 仅在第二次监听

    我有一个 editText 并向其中添加了一个 onClickListener 在单击方法中 我只是清除文本 当我第一次单击 editText 时 键盘会弹出 但它不会进入 onClick 方法 当我第二次单击它时 它被调用并清除文本 qt
  • 如何在 bash 脚本中执行命令,然后聚焦出现的窗口

    我有一个像这样的 bash 脚本 bin sh firefox Firefox 窗口打开 但没有焦点 我该怎么做才能让它自动获得焦点 我可以使用一些 X 窗口工具 命令 但如何获取 Firefox 的窗口 ID 窗口名称随着显示的 URL
  • 如何使带有列表数据源的tttableview顶部的蓝色条消失(在ios 5 beta上运行的程序)

    当程序在 ios 5 beta 上运行时 我的 tttableview 顶部会出现一个蓝色条 如果我在 ios 4 3 上运行程序 则不会出现蓝色条 该表配置为使用列表数据源 有谁知道是什么问题 ios 5 的 tableview api
  • Ajax 调用下载从 RESTful 服务返回的文件

    我对 AJAX 相当陌生 我正在使用 AJAX 向服务器发送请求 该服务返回一个文本文件 但返回数据时没有出现下载框 返回文件的rest服务如下 Path examples public class ExampleCodesRest POS
  • 在 Shiny 中下载 RenderTable() 数据帧上的处理程序

    我有一个闪亮的应用程序 它采用如下所示的 csv 文件 category action 并将其输入到数据框中以仅使用 action 过滤类别 可复制的应用程序 UI library shiny shinyUI fluidPage title
  • 再次为该片段创建 ViewModel

    我在 MainFragment 中创建视图模型 Override public void onActivityCreated Nullable Bundle savedInstanceState super onActivityCreate
  • Javafx 2 图表通过手绘调整大小

    我有一个在 JavaFX 2 0 中徒手绘制 XYChart 的代码 调整图表大小时遇到 问题 当我调整大小时 我遇到了徒手绘制的翻译问题 当我调整大小时 新绘图最初看起来超出了比例 但经过一点 图表移动 后 绘图它会自行修复 我该如何改进
  • 带取消功能的VBA密码输入

    我一直在使用 Daniel Klann 编写的标准密码文本框 http www ozgrid com forum showthread php t 72794 http www ozgrid com forum showthread php