从工作表加载图像

时间:2018-05-19 15:53:30

标签: excel vba image userform

我已经设置了Excel Userform,用于滚动6面骰子并报告结果。当用户按下命令按钮时,我生成一个随机数1-6,然后我想在用户表单上显示相应骰子卷的图像。我将骰子图像/形状(例如dice_1,dice_2等)放在名为" Inventory"的工作表中。我得到"运行时错误13:类型不匹配"当我尝试执行以下代码时,错误发生在LoadPicture命令。我意识到我没有选择与骰子卷对应的图片所需的If结构,但只要我弄清楚加载图像的语法就足够了。建议?

 Private Sub btnRollDice_Click()
 Dim DiceNum As Integer

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

1 个答案:

答案 0 :(得分:0)

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

  1. 录制宏:

    • 开发人员>记录宏>行
  2. 手动完成任务:

    • 插入>图片>选择你的照片
      (或者你正在显示这些图像)
  3. 停止录制:

    • 开发人员>停止
  4. 查看为您生成的VBA:

    • 开发人员>宏>选择你的宏>修改
  5. ......根据需要进行调整:

  6. 按照以下步骤为我生成此代码:

    ActiveSheet.Pictures.Insert("C:\{myPath}\{myFile}.jpg").Select
    

    为了最大限度地发挥此任务的学习效益,请花点时间了解Google使用的每个命令。我添加" excel msdn"到我的搜索查询结束,从而将结果限制为Microsoft Developer&Network的官方文档。

    一个小小的试错也很长(当然是在备份之后),这就是我第一次发现许多与SelectActivate相关的方法。可以安全地删除宏记录器添加。

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

    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