Image 使用VBA在Excel 2010中显示一系列图像

Image 使用VBA在Excel 2010中显示一系列图像,image,excel,excel-2010,vba,Image,Excel,Excel 2010,Vba,作为更大项目的一部分,我需要在一个宏中显示一系列图像。当我运行此操作时,它会在最后一个msgbox之后显示最终图像,其他图像在下面分层: Sub Macro4() Dim x As Integer Dim Pic As Object Dim picname As String For x = 1 To 7 picname = ThisWorkbook.Path & "/" & "pic" & x & ".png" ActiveSheet.Pictures.Inse

作为更大项目的一部分,我需要在一个宏中显示一系列图像。当我运行此操作时,它会在最后一个msgbox之后显示最终图像,其他图像在下面分层:

Sub Macro4()
Dim x As Integer
Dim Pic As Object
Dim picname As String
For x = 1 To 7
picname = ThisWorkbook.Path & "/" & "pic" & x & ".png"
ActiveSheet.Pictures.Insert(picname).Select
MsgBox (x)
Next x
End Sub
Msgbox命令用于减慢进程,以便我可以看到或在本例中看不到图片的变化

这些图像被称为pic1.png、pic2.png等

如何在宏期间显示单独的图像

重新编辑:

这里是图像函数和更大的函数,它播放一段随机的音乐混凝土

Private Declare Function PlaySound Lib "winmm.dll" _
Alias "PlaySoundA" (ByVal lpszName As String, _
ByVal hModule As Long, ByVal dwFlags As Long) As Long
showpic给出与所播放声音的音调相关的图像

play运行一系列特定的声音文件,这些文件由随机过程生成,选择乐器和音高并创建必要的文件名。“工件”运行“notes”秒,由一个单独的宏触发,该宏更改给定“单元格”中的值以匹配“条件”

我有三个问题:

  • 它不显示第一个图像文件
  • 它在开始时执行“计算”或F9,因此重新随机化乐曲,不播放显示的序列;我想这是由第一个事件引起的
  • 现在播放两次!然而,第二次通过它确实显示了所有的图像文件

  • 编辑:
    既然我最初的回答对你不起作用,那么用一种完全不同的方式来实现你的结果怎么样。此方法用于重新运行sub并插入下一张图片

    Sub NextPicture()
        Static x As Integer
        Dim pic As Object
        Dim picname As String
        'Reset x to 0 because I assumed you want to rotate through the pictures.
        'If you want it to stop replace with If x = 7 then exit sub
        If x = 7 Then x = 0
        x = x + 1
        picname = ThisWorkbook.Path & "/" & "pic" & x & ".png"
        ActiveSheet.Pictures.Insert(picname).Select
        'Using 00:00:05 = 5 seconds, change the amount to speed up or slow down the picture changes
        Application.OnTime Now + TimeValue("00:00:05"), "NextPicture"
    End Sub
    

    原始答案
    我无法让您的代码正常工作,但如果我使用,我可以,这实际上更健壮,因为您可以/必须指定位置和大小

    语法:

    expression.AddPicture(Filename, LinkToFile, SaveWithDocument, Left, Top, Width, Height)
    
    例如:

    ActiveSheet.Shapes.AddPicture(picname, True, True, 100, 100, 70, 70)
    

    编辑:
    既然我最初的回答对你不起作用,那么用一种完全不同的方式来实现你的结果怎么样。此方法用于重新运行sub并插入下一张图片

    Sub NextPicture()
        Static x As Integer
        Dim pic As Object
        Dim picname As String
        'Reset x to 0 because I assumed you want to rotate through the pictures.
        'If you want it to stop replace with If x = 7 then exit sub
        If x = 7 Then x = 0
        x = x + 1
        picname = ThisWorkbook.Path & "/" & "pic" & x & ".png"
        ActiveSheet.Pictures.Insert(picname).Select
        'Using 00:00:05 = 5 seconds, change the amount to speed up or slow down the picture changes
        Application.OnTime Now + TimeValue("00:00:05"), "NextPicture"
    End Sub
    

    原始答案
    我无法让您的代码正常工作,但如果我使用,我可以,这实际上更健壮,因为您可以/必须指定位置和大小

    语法:

    expression.AddPicture(Filename, LinkToFile, SaveWithDocument, Left, Top, Width, Height)
    
    例如:

    ActiveSheet.Shapes.AddPicture(picname, True, True, 100, 100, 70, 70)
    

    尝试在每次插入后添加
    DoEvents
    调用。DoEvents应该可以工作。看到这个了吗。它可以在VBA环境中正常运行,但在使用工作表上的按钮激活时无法正常运行。您只添加了部分代码更新。showpic叫什么名字?在什么情况下?你问丹尼尔!已重新编辑上述内容。尝试在每次插入后添加
    DoEvents
    调用。DoEvents应该可以工作。看到这个了吗。它可以在VBA环境中正常运行,但在使用工作表上的按钮激活时无法正常运行。您只添加了部分代码更新。showpic叫什么名字?在什么情况下?你问丹尼尔!已经重新编辑了上面的内容。嗨,丹尼尔。具有讽刺意味的是,我之前使用过AddPicture,但当我使用Record宏查看是否可以得到更好的效果时,我改变了!我现在有:ActiveSheet.Shapes.AddPicture(picname),真的,真的,a1,a1,170,170,但即使使用DoEvents,它仍然不适合我!好的,我已经更新了我的答案,以提供一种完全不同的方式来完成我认为您希望使用大多数原始代码完成的任务;需要写代码,所以我已经编辑了我的原始文章上面。嗨,丹尼尔。具有讽刺意味的是,我之前使用过AddPicture,但当我使用Record宏查看是否可以得到更好的效果时,我改变了!我现在有:ActiveSheet.Shapes.AddPicture(picname),真的,真的,a1,a1,170,170,但即使使用DoEvents,它仍然不适合我!好的,我已经更新了我的答案,以提供一种完全不同的方式来完成我认为您希望使用大多数原始代码完成的任务;需要写代码,所以我在上面编辑了我的原始帖子。