You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:59:45