Excel 从工作表加载图像

Excel 从工作表加载图像,excel,vba,image,userform,Excel,Vba,Image,Userform,我已经设置了一个Excel用户表单,用于滚动6面骰子并报告结果。当用户按下命令按钮时,我生成一个随机数1-6,然后我希望相应骰子卷的图像显示在用户窗体上。我将骰子图像/形状(如骰子1、骰子2等)放在名为“库存”的工作表中。当我尝试执行以下代码时,我得到了“运行时错误13:类型不匹配”,错误发生在LoadPicture命令中。我意识到我没有必要的If结构来选择与掷骰子对应的pic,但是一旦我弄清楚加载图像的语法,这就足够简单了。建议 Private Sub btnRollDice_Click()

我已经设置了一个Excel用户表单,用于滚动6面骰子并报告结果。当用户按下命令按钮时,我生成一个随机数1-6,然后我希望相应骰子卷的图像显示在用户窗体上。我将骰子图像/形状(如骰子1、骰子2等)放在名为“库存”的工作表中。当我尝试执行以下代码时,我得到了“运行时错误13:类型不匹配”,错误发生在LoadPicture命令中。我意识到我没有必要的If结构来选择与掷骰子对应的pic,但是一旦我弄清楚加载图像的语法,这就足够简单了。建议

 Private Sub btnRollDice_Click()
 Dim DiceNum As Integer

     Randomize
     DiceNum = Int((6 * Rnd) + 1)     
     pic1stDie.Picture = LoadPicture(Worksheets("Inventory").Shapes("dice_1"))
 End Sub

找出如何以编程方式复制Excel功能的最简单方法是在手动执行任务时录制宏,然后停止录制并检查为您生成的VBA,并根据需要进行调整

  • 录制宏:

    • 开发者>录制宏>确定
  • 手动执行此任务:

    • 插入>图片>选择您的图片
      (或以何种方式显示这些图像)
  • 停止录制:

    • 开发者>停止
  • 查看为您生成的VBA:

    • 开发人员>宏>选择宏>编辑
  • …根据需要进行调整:

    • MSDN:
    • MSDN:
  • 以下步骤为我生成了此代码:

    ActiveSheet.Pictures.Insert("C:\{myPath}\{myFile}.jpg").Select
    
    为了最大限度地提高此任务的学习效果,请花点时间在谷歌上搜索它使用的每个命令。我会在搜索查询的末尾添加“excel msdn”,从而将搜索结果限制在Microsoft开发者网络的官方文档中

    一点尝试和错误也会有很大的帮助(当然,在备份之后),这就是我第一次发现宏记录器添加的许多与
    Select
    Activate
    相关的方法可以安全删除的原因

    在上面的示例中,完成的代码可能如下所示:

    Sub btnRollDice_Click()
        Dim DiceNum As Integer
        Randomize
        DiceNum = Int((6 * Rnd) + 1)
        ActiveSheet.Pictures.Insert ("C:\{myPath}\myDice" & DiceNum & ".jpg")
    End Sub
    
    如果只是显示同一组图像,您还可以将所有图像(形状)放置在正确的位置(即使在“相同的位置”,彼此重叠),并根据需要将形状的
    Visible
    属性设置为True/False,例如:

    ActiveSheet.Shapes("My Die 4").Visible = False 'hides this image
    

    您的答案很好,但OP的目的不是不插入图片,因为图片已经包含在工作表“库存”中?最简单的解决方案是将图片加载到Userform上的6个隐藏图像控件中。然后,您可以使用
    pic1stDie.Picture=picdice_1.Picture