【问题标题】:Load image from worksheet从工作表加载图像
【发布时间】:2018-10-29 19:43:45
【问题描述】:

我设置了一个 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

【问题讨论】:

  • 最简单的解决方案是将图像加载到用户窗体上的 6 个隐藏图像控件中。然后,您可以使用 pic1stDie.Picture = picdice_1.Picture 更改图像

标签: excel vba image userform


【解决方案1】:

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

  1. 录制宏:

    • 开发者>录制宏>确定
  2. 手动完成任务:

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

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

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

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

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

为了最大限度地提高这项任务的学习效果,请花点时间 Google 一下它正在使用的每个命令。我会在搜索查询的末尾添加“excel msdn”,从而将结果限制在 Microsoft Developer's 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

如果只是显示同一组图像的问题,您还可以将所有图像(形状)放在正确的位置(即使在“同一位置”,彼此重叠)并设置形状的 @ 987654327@属性根据需要改为True/False,如:

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

【讨论】:

  • 您的答案已经很好地布置了,但是 OP 的目的不是不插入图片,因为图像已经包含在工作表“库存”中吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-10
  • 2015-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-19
  • 1970-01-01
相关资源
最近更新 更多