ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[讨论] 这个例子能说明API函数在VBA中极不稳定吗?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2010-1-2 15:18 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
做了一个简单的窗体。调用窗体时,窗体的显示和功能一切正常。但是执行了子过程以后窗体的最大、最小化按钮就会消失。如果过程中,不更改窗体的Caption属性值,这个例子中的窗体的最大、最小化按钮就不会消失(但是其它例子偶尔有出现消失的时候,没准备好这个例子不上传了)。
这个例子能说明API函数在VBA中极不稳定吗?如果不能说明,那么说明了什么呢?

[ 本帖最后由 老伙计2008 于 2010-1-2 15:19 编辑 ]

窗体最大、最小化按钮消失.rar

19.71 KB, 下载次数: 20

TA的精华主题

TA的得分主题

发表于 2010-1-2 16:34 | 显示全部楼层
也许是因为改变窗体caption相当于重绘了,可以在过程中重新调用一次UserForm_Initialize

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-1-2 20:46 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
原帖由 赵国辉 于 2010-1-2 16:34 发表
也许是因为改变窗体caption相当于重绘了,可以在过程中重新调用一次UserForm_Initialize

重新调用窗体初始化,虽然能够显示最小、最大化按钮,可是这两个按钮是无效的。

窗体最大、最小化按钮消失.rar

19.72 KB, 下载次数: 9

TA的精华主题

TA的得分主题

发表于 2010-1-3 18:28 | 显示全部楼层
Private Sub CommandButton1_Click()
Dim i&, j#, t!
    Me.Caption = "正在进行计算……"

    t = Timer
    For i = 1 To 100
        DoEvents
        If CheckBox1 Then j = j + i
        j = j + i
    Next
    MsgBox "和=" & j & "    用时" & Timer - t & "秒   "
    Me.Caption = "极限分析"
    '---重画--
    SetWindowLong hWnd, -16, &H16CF0000
    DrawMenuBar hWnd
End Sub

TA的精华主题

TA的得分主题

发表于 2010-1-3 15:40 | 显示全部楼层
的确不行,再顶,抓空再看看
元旦一直在加班................

TA的精华主题

TA的得分主题

发表于 2010-1-3 17:24 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
应该是VBA窗体在重绘标题栏时自动又重新设置的了窗体的外观样式。

TA的精华主题

TA的得分主题

发表于 2010-1-3 17:27 | 显示全部楼层
改成这样好像就可以了,不过修改Caption就得修改一次窗体样式也是挺烦的……

  1. Private Sub CommandButton1_Click()
  2.     Dim i&, j#, t!
  3.     Me.Caption = "正在进行计算……"
  4.     UserForm_Initialize
  5.     t = Timer
  6.     For i = 1 To 100
  7.         DoEvents
  8.         If CheckBox1 Then j = j + i
  9.     Next
  10.     MsgBox "和=" & j & "    用时" & Timer - t & "秒   "
  11.     Me.Caption = "极限分析"
  12.    
  13.     UserForm_Initialize
  14. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2010-1-3 20:48 | 显示全部楼层
原帖由 stanleypan 于 2010-1-3 18:28 发表
Private Sub CommandButton1_Click()
Dim i&, j#, t!
    Me.Caption = "正在进行计算……"

    t = Timer
    For i = 1 To 100
        DoEvents
        If CheckBox1 Then j = j + i
        j = j + i ...

看着有点迷茫............

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-1-5 23:12 | 显示全部楼层

回复 7楼 stanleypan 的帖子

需要重画2次,不然在计算过程中仍然看不到,最小、最大化按钮
Private Sub CommandButton1_Click()
Dim i&, j#, t!
    Me.Caption = "正在进行计算……"

    '---重画--
    SetWindowLong hWnd, -16, &H16CF0000
    DrawMenuBar hWnd
    t = Timer
    For i = 1 To 100000
        DoEvents
        If CheckBox1 Then j = j + i
        j = j + i
    Next
    MsgBox "和=" & j & "    用时" & Timer - t & "秒   "
    Me.Caption = "极限分析"
    '---重画--
    SetWindowLong hWnd, -16, &H16CF0000
    DrawMenuBar hWnd
End Sub
从上面这个问题来看,确实是重绘标题栏时自动又重新设置的了窗体的外观样式。

可是另外遇到过:本来设置了关闭按钮在运行时失效。可是在强循环时,会出现暂时无响应,这时本来失效的关闭按钮会自动变为有效的,很可怕,不知道什么原因。这个例子暂时找不到了
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-4-28 20:07 , Processed in 0.049909 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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