Ms access 使用Access VBA设置子窗体动画

Ms access 使用Access VBA设置子窗体动画,ms-access,vba,Ms Access,Vba,我试图通过使用一些动画打开一个子窗体,向Access数据库添加一点flare。我希望它从主窗体的左上角打开,并通过小增量扩展其大小,直到达到主窗体的宽度和高度。当我单步执行时,我的代码似乎按照预期工作,但实际上,它会在循环的整个过程中暂停,并且只显示完整大小的表单,而不显示任何动画。似乎它在批处理中运行循环,然后对子窗体对象执行调整。有没有关于如何实现这一目标的建议 Option Compare Database Option Explicit Declare Sub Sleep Lib "k

我试图通过使用一些动画打开一个子窗体,向Access数据库添加一点flare。我希望它从主窗体的左上角打开,并通过小增量扩展其大小,直到达到主窗体的宽度和高度。当我单步执行时,我的代码似乎按照预期工作,但实际上,它会在循环的整个过程中暂停,并且只显示完整大小的表单,而不显示任何动画。似乎它在批处理中运行循环,然后对子窗体对象执行调整。有没有关于如何实现这一目标的建议

Option Compare Database
Option Explicit

Declare Sub Sleep Lib "kernel32" _
(ByVal dwMilliseconds As Long)

Public Sub AnimateOpenForm(SubForm As String, maxWidth As Long, maxHeight As Long)
    Dim sbf As SubForm
    Dim parentForm As String
    Dim incrementX As Double
    Dim incrementY As Double

    parentForm = "frmHome"

    Set sbf = Forms(parentForm).Controls("sbfPopUp")
    sbf.SourceObject = SubForm

    sbf.Width = 0
    sbf.Height = 0

    sbf.Visible = True

    incrementX = maxWidth / 1000
    incrementY = maxHeight / 1000

    Do While sbf.Width < maxWidth And sbf.Height < maxHeight

        sbf.Width = sbf.Width + incrementX
        sbf.Height = sbf.Height + incrementY

        Sleep 10

    Loop

End Sub
选项比较数据库
选项显式
声明子睡眠库“kernel32”_
(ByVal的长度为毫秒)
公共子动画表单(子表单为字符串,maxWidth为长,maxHeight为长)
将sbf设置为子窗体
将父窗体设置为字符串
Dim递增X为双精度
Dim递增为Double
parentForm=“frmHome”
设置sbf=Forms(parentForm).Controls(“sbfPopUp”)
sbf.SourceObject=子窗体
sbf.宽度=0
sbf.高度=0
sbf.Visible=True
增量x=最大宽度/1000
增量Y=最大高度/1000
当sbf.Width
DoEvents将为系统提供重新绘制所需的暂停时间

我将代码从“Sleep 10”改为“started=Timer:Do:DoEvents:Loop-Until-Timer-started>=0.001”,而不是Sleep(并进行32位内核调用) 顶部变暗“变暗开始为单个”,导致:

Public Sub AnimateOpenForm(SubForm As String, maxWidth As Long, maxHeight As Long) Dim sbf As SubForm Dim parentForm As String Dim incrementX As Double Dim incrementY As Double Dim started As Single parentForm = "frmHome" Set sbf = Forms(parentForm).Controls("sbfPopUp") sbf.SourceObject = SubForm sbf.Width = 0 sbf.Height = 0 sbf.Visible = True incrementX = maxWidth / 1000 incrementY = maxHeight / 1000 Do While sbf.Width < maxWidth And sbf.Height $lt; maxHeight sbf.Width = sbf.Width + incrementX sbf.Height = sbf.Height + incrementY started = Timer: Do: DoEvents: Loop Until Timer - started >= 0.001 Loop End Sub 公共子动画表单(子表单为字符串,maxWidth为长,maxHeight为长) 将sbf设置为子窗体 将父窗体设置为字符串 Dim递增X为双精度 Dim递增为Double 迪姆一开始是单身 parentForm=“frmHome” 设置sbf=Forms(parentForm).Controls(“sbfPopUp”) sbf.SourceObject=子窗体 sbf.宽度=0 sbf.高度=0 sbf.Visible=True 增量x=最大宽度/1000 增量Y=最大高度/1000 sbf.Width=0.001 环 端接头
啊哈!我在循环中添加了sbf.requery,现在它运行得很好。总是错过这件小事。。。