用户窗体ComboBox运行时错误“13”(类型不匹配)求助
解决VBA UserForm中运行时错误13(类型不匹配)的问题
嘿,我来帮你搞定这个类型不匹配的错误!你的代码思路没问题,但有个容易踩的坑导致了这个问题,我给你拆解一下:
核心问题原因
你声明了Dim xSheet As Worksheet,但遍历的是ActiveWorkbook.Sheets集合——这个集合不仅包含普通的工作表(Worksheet),还包含图表工作表(Chart)、宏工作表(MacroSheet)等其他类型的Sheet对象。当循环到非Worksheet类型的Sheet时,把它赋值给Worksheet类型的变量xSheet,就会触发类型不匹配错误。
解决方案
这里有两个针对性的修复方案,你可以根据需求选择:
方案1:只遍历普通工作表(推荐,如果你只需要工作表)
把遍历的集合从Sheets改成Worksheets,这样只会处理普通的工作表:
Private Sub UserForm_Activate() Dim xSheet As Worksheet ComboBox2.Clear ' 只遍历普通工作表集合 For Each xSheet In ActiveWorkbook.Worksheets ComboBox2.AddItem xSheet.Name Next xSheet End Sub
方案2:包含所有类型的Sheet(如果需要图表等Sheet)
把xSheet的类型改成Object,这样可以兼容所有Sheet类型:
Private Sub UserForm_Activate() Dim xSheet As Object ComboBox2.Clear For Each xSheet In ActiveWorkbook.Sheets ' 所有Sheet对象都有Name属性,直接添加即可 ComboBox2.AddItem xSheet.Name Next xSheet End Sub
额外检查点
除了上面的核心修复,你还可以确认这两个细节:
- 确保UserForm里确实存在名为
ComboBox2的组合框控件,没有拼写错误或者控件重名的情况。 - 如果你的代码是写在当前工作簿里的,建议把
ActiveWorkbook改成ThisWorkbook,这样可以避免切换工作簿导致的错误:For Each xSheet In ThisWorkbook.Worksheets
内容的提问来源于stack exchange,提问作者Jimanjay
相关产品推荐
相关产品推荐

