将工作表列自动适配代码封装为函数时出现对象属性方法不支持错误
问题解决:VBA调用Autofit函数时出现“Object doesn't support this property or method”错误
错误原因
- 调用时的括号误用:
VBA中,调用无返回值的过程(包括不返回值的Function)时,直接加括号会触发强制求值,把Worksheet对象转换成它的默认属性值(即工作表名称字符串)。而你的函数参数要求的是Worksheet对象,类型不匹配就会抛出错误。 - 过程类型不合理:
你的代码只是执行自动列宽操作,没有返回值,用Function不符合VBA的设计规范,应该使用Sub(子过程)。
修复方案
方案1:修正调用方式(保留原Function)
去掉调用时的括号,或者使用Call关键字加括号:
' 方式1:去掉括号直接调用 AutofitAllUsedColumns SheetToModify ' 方式2:用Call关键字,此时需要加括号 Call AutofitAllUsedColumns(SheetToModify)
方案2:将Function改为Sub(推荐)
把原函数改成子过程,更符合VBA的代码规范:
Public Sub AutofitAllUsedColumns(mySheet As Worksheet) Dim x As Integer For x = 1 To mySheet.UsedRange.Columns.Count mySheet.Columns(x).EntireColumn.AutoFit Next x End Sub
调用时直接写:
Dim SheetToModify As Worksheet Set SheetToModify = Sheets(strNewProjSheetName) AutofitAllUsedColumns SheetToModify ' 无需括号
额外优化:简化自动列宽代码
其实不需要循环每一列,直接对UsedRange的所有列执行AutoFit即可,代码更简洁高效:
Public Sub AutofitAllUsedColumns(mySheet As Worksheet) mySheet.UsedRange.EntireColumn.AutoFit End Sub
内容的提问来源于stack exchange,提问作者Automation Monkey
相关产品推荐
相关产品推荐

