excel - 从工作表加载图像
问题描述
我已经设置了一个 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
解决方案
弄清楚如何以编程方式复制 Excel 功能的最简单方法是在手动执行任务时录制宏,然后停止录制并检查为您生成的 VBA,并根据需要进行调整。
录制宏:
- 开发人员>录制宏>确定
手动执行任务:
- 插入>图片>选择您的图片
(或者您正在显示这些图片)
- 插入>图片>选择您的图片
停止录制:
- 开发人员 > 停止
查看为您生成的 VBA:
- 开发人员>宏>选择你的宏>编辑
...根据需要进行调整:
- MSDN:录制宏以生成代码
- MSDN :修改录制的 Visual Basic 宏
按照这些步骤为我生成了此代码:
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
推荐阅读
- javascript - 如何摆脱算法中的复杂性?
- google-sheets - 是否可以在 Google 工作表上显示所有执行 Importrange 或 Query 的工作表?
- amazon-web-services - nginx:在 /etc/nginx/nginx.conf:11 的上游“udagram-users:8080”中找不到 [emerg] 主机
- azure-logic-apps - Azure App Logic - 如何在 Blob 存储上分页文件
- machine-learning - 如何将不同的值传递给管道参数
- javascript - React 和 Gsap 动画问题
- sharepoint - 拉取文件时逻辑应用 Sharepoint 文件名错误
- c++ - std::move 在不同的编译器上表现不同?
- javascript - 在 Javascript 中对数据和时间字符串进行排序
- arrays - 如何创建一个包含对象数组的 PowerShell 对象?