Excel VBA将tbl.ColumWidth保存为变量将返回错误438?

Excel VBA将tbl.ColumWidth保存为变量将返回错误438?,excel,vba,listobject,Excel,Vba,Listobject,我尝试将当前columnwidth与自动调整columnwidth进行比较,如下所示: Option Explicit Dim Tbl As Object Dim Col As Integer Dim I As Integer Dim OldColumnWidth As Integer Dim NewColumnWidth As Integer Private Sub WorkSheet_Change(ByVal Target As Range)

我尝试将当前columnwidth与自动调整columnwidth进行比较,如下所示:

Option Explicit
    Dim Tbl As Object
    Dim Col As Integer
    Dim I As Integer
    Dim OldColumnWidth As Integer
    Dim NewColumnWidth As Integer
Private Sub WorkSheet_Change(ByVal Target As Range)
    'On Error GoTo ErrHandler

    Set Tbl = ListObjects("RuimteTabel")
    Col = Tbl.DataBodyRange.Columns.Count
    For I = 1 To Col
        OldColumnWidth = Tbl.ListColumn(I).Range.ColumnWidth
        NewColumnWidth = Tbl.DataBodyRange.Column.AutoFit

        If NewColumnWidth < OldColumnWidth Then
            'Tbl.DataBodyRange = OldColumnWidth
        Else
            'Tbl.DataBodyRange = NewColumnWidth
        End If
    Next I
选项显式
作为对象的Dim Tbl
作为整数的Dim Col
作为整数的Dim I
Dim OldColumnWidth为整数
Dim NewColumnWidth为整数
私有子工作表_更改(ByVal目标作为范围)
'在出现错误时转到ErrHandler
Set Tbl=ListObjects(“ruimtTable”)
Col=Tbl.DataBodyRange.Columns.Count
对于I=1到Col
OldColumnWidth=Tbl.ListColumn(I).Range.ColumnWidth
NewColumnWidth=Tbl.DataBodyRange.Column.AutoFit
如果NewColumnWidth
但每当它位于
OldColumnWidth=Tbl.ListColumn(I).Range.ColumnWidth
行时,它就会给出错误:
对象不支持此属性或方法


我理解错误发生的原因,但我看不出我的代码有任何错误/如何修复错误

您的问题在于语法

OldColumnWidth = Tbl.ListColumns(I).Range.ColumnWidth
您在
ListColumns
的末尾缺少一个
s


我还建议将变量调暗为
Long
,而不是
Integer

,您的问题在于语法

OldColumnWidth = Tbl.ListColumns(I).Range.ColumnWidth
您在
ListColumns
的末尾缺少一个
s


我还建议将变量调暗为
Long
而不是
Integer

谢谢,愚蠢的是我没有看到这一点。另外,整数不比长整数占用更少的空间吗?在我的工作表中,我的单元格中永远不会超过30个字符,所以我将其设置为整数以提高性能。@Nemoko当你看它太久时,很容易忽略最简单的字符things@Nemoko-请参阅,了解为什么
Long
Integer
更可取。基本上没有性能优势,事实上可能有一点劣势。谢谢,愚蠢的是我没有看到这一点。另外,整数不比长整数占用更少的空间吗?在我的工作表中,我的单元格中永远不会超过30个字符,所以我将其设置为整数以提高性能。@Nemoko当你看它太久时,很容易忽略最简单的字符things@Nemoko-请参阅,了解为什么
Long
Integer
更可取。基本上没有性能优势,实际上可能有一点劣势。