Excel用户窗体加载工作表骰子图片遇类型不匹配错误,求解决方案
解决Excel用户窗体加载骰子图片的「运行时错误13:类型不匹配」问题
你遇到的这个类型不匹配问题,根源很明确:LoadPicture()函数的参数要求是图片文件的完整路径字符串,但你直接传入了工作表里的Shape对象,两者类型不兼容,所以触发了错误。
给你两种简单的解决思路,都能绕过这个问题:
方法1:直接复制Shape的图片属性(推荐,无需临时文件)
这种方法最直接,因为Excel的Shape对象本身就有Picture属性,可以直接赋值给用户窗体的图片控件,完全不用涉及文件路径:
Private Sub btnRollDice_Click() Dim DiceNum As Integer Dim targetDiceShape As Shape ' 生成1-6的随机数 Randomize DiceNum = Int((6 * Rnd) + 1) ' 获取对应点数的骰子形状 Set targetDiceShape = Worksheets("Inventory").Shapes("dice_" & DiceNum) ' 直接将形状的图片赋值给控件 Set pic1stDie.Picture = targetDiceShape.Picture End Sub
方法2:导出Shape为临时图片再加载
如果因为某些原因你必须用LoadPicture(),可以先把工作表里的形状导出成临时图片文件,再通过路径加载:
Private Sub btnRollDice_Click() Dim DiceNum As Integer Dim tempPicPath As String Dim targetDiceShape As Shape Randomize DiceNum = Int((6 * Rnd) + 1) Set targetDiceShape = Worksheets("Inventory").Shapes("dice_" & DiceNum) ' 设置临时图片的保存路径(系统临时文件夹) tempPicPath = Environ("TEMP") & "\current_dice.png" ' 将形状导出为PNG格式的临时图片 targetDiceShape.Export Filename:=tempPicPath, FilterName:="PNG" ' 通过路径加载图片到控件 pic1stDie.Picture = LoadPicture(tempPicPath) ' 可选:用完临时文件后删除,避免占用空间 Kill tempPicPath End Sub
两种方法都能解决你当前的语法问题,后续你只需要确保dice_1到dice_6这些形状名称在Inventory工作表里正确存在就可以了。
内容的提问来源于stack exchange,提问作者G Eller
相关产品推荐
相关产品推荐

