Vba 通过项目ID更改项目的属性以进行形状动画

Vba 通过项目ID更改项目的属性以进行形状动画,vba,Vba,例如,是否可以通过对象的ID发出命令来旋转形状或更改不同(布尔)设置(如可见性),或者是否需要事先选择? 就我所知,我必须在更改每个项目的特征/数据之前选择一个“取消选择”选项 我的代码如下所示(将生成闪烁箭头的“动画”): 如果可能,我正在寻找更简单的方法: Private Sub timeout(duration_ms As Double) Start_Time = Timer Do DoEvents Loop Until (Timer - Start_Tim

例如,是否可以通过对象的ID发出命令来旋转形状或更改不同(布尔)设置(如可见性),或者是否需要事先选择? 就我所知,我必须在更改每个项目的特征/数据之前选择一个“取消选择”选项

我的代码如下所示(将生成闪烁箭头的“动画”):

如果可能,我正在寻找更简单的方法:

Private Sub timeout(duration_ms As Double)
    Start_Time = Timer
    Do
    DoEvents
    Loop Until (Timer - Start_Time) >= duration_ms
End Sub

Private Sub cmd_blinking_Click()

    rep_count = 0
    Target = 400
    blink = 0.3

    Do Until rep_count = Target
    DoEvents

    rep_count = rep_count + 1

    ActiveWindow.Shapes.ID(255).Visible = True
    ActiveWindow.Shapes.ID(256).Visible = False    
    ActiveWindow.Shapes.ID(257).Visible = False
    timeout (blink)

    ActiveWindow.Shapes.ID(256).Visible = True 
    timeout (blink)
    
    ActiveWindow.Shapes.ID(257).Visible = False
    timeout (blink * 3)

    ActiveWindow.Shapes.ID(255).Visible = False
    ActiveWindow.Shapes.ID(256).Visible = False    
    ActiveWindow.Shapes.ID(257).Visible = False
    timeout (blink * 0.9)

    Loop

End Sub
对于在
VBA
中查找“动画箭头”的任何人(如我所问):

该功能用于在单个对象/形状的外观之间进行暂停

之后,对象/形状需要更改其
可见性
属性以产生“闪烁效果”

在我的示例中,我使用了三个带有特定给定名称的箭头(
“Left\u Arrow\u 1”
,等等),这里必须插入对象名称。通过制作一个宏来插入对象并给它们定义名称,这使事情变得更容易

Sub timeout(duration_ms As Double)
    Start_Time = Timer
    Do
    DoEvents
    Loop Until (Timer - Start_Time) >= duration_ms
End Sub

Sub blinking_arrows() 

rep_count = 0
target = 400
blink = 0.3

Do Until rep_count = target
DoEvents
rep_count = rep_count + 1

Sheet1.Shapes("Left_Arrow_1").Visible = True
Sheet1.Shapes("Left_Arrow_2").Visible = False
Sheet1.Shapes("Left_Arrow_3").Visible = False
timeout (blink)

Sheet1.Shapes("Left_Arrow_2").Visible = True
timeout (blink)

Sheet1.Shapes("Left_Arrow_3").Visible = True
timeout (blink * 3)

Sheet1.Shapes("Left_Arrow_1").Visible = False
Sheet1.Shapes("Left_Arrow_2").Visible = False
Sheet1.Shapes("Left_Arrow_3").Visible = False
timeout (blink * 0.9)

Loop

End Sub

你试过了吗?发生了什么?“运行时错误438:对象不支持此属性或方法”用于访问Visio对象的VBA完全错误。尝试使用ActivePage.Shapes.ItemFromID(255),而不是ActiveWindow.Shapes(这是不允许的),假设255等是正确的ID。如果没有,那么您的代码将停止工作。.Visible属性也不存在。我认为您需要下载并安装VisioSDK,并查看其中的示例。好的,我们将查找SDK
Sub timeout(duration_ms As Double)
    Start_Time = Timer
    Do
    DoEvents
    Loop Until (Timer - Start_Time) >= duration_ms
End Sub

Sub blinking_arrows() 

rep_count = 0
target = 400
blink = 0.3

Do Until rep_count = target
DoEvents
rep_count = rep_count + 1

Sheet1.Shapes("Left_Arrow_1").Visible = True
Sheet1.Shapes("Left_Arrow_2").Visible = False
Sheet1.Shapes("Left_Arrow_3").Visible = False
timeout (blink)

Sheet1.Shapes("Left_Arrow_2").Visible = True
timeout (blink)

Sheet1.Shapes("Left_Arrow_3").Visible = True
timeout (blink * 3)

Sheet1.Shapes("Left_Arrow_1").Visible = False
Sheet1.Shapes("Left_Arrow_2").Visible = False
Sheet1.Shapes("Left_Arrow_3").Visible = False
timeout (blink * 0.9)

Loop

End Sub