首页 > 解决方案 > 从工作表加载图像

问题描述

我已经设置了一个 Excel 用户表单,用于滚动 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

标签: excelvbaimageuserform

解决方案


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

  1. 录制宏:

    • 开发人员>录制宏>确定
  2. 手动执行任务:

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

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

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

按照这些步骤为我生成了此代码:

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

为了最大限度地提高这项任务的学习效益,请花点时间谷歌它正在使用的每个命令。我会在搜索查询的末尾添加“excel msdn”,从而将结果限制在 Microsoft Developer's Network 的官方文档中。

一点点试错也有很长的路要走(当然是在备份之后),这就是我第一次发现宏记录器添加的许多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/根据需要为假,例如:

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

推荐阅读