为什么Excel 2007 pt-PT Trim所有单元格都会出错?

Why does Excel 2007 pt-PT Trim all cells results in error?

我正在使用 excel 2007 - pt-PT,我正在尝试使用 vba 脚本 trim 我工作表中的所有单元格 (compactar)。 以下脚本 returns 这个错误 - "Object does not support this property or method" 我不明白为什么。

Sub TrimAllCells()
    Dim cell As Range
    For Each cell In ActiveSheet.UsedRange.SpecialCells(xlCellTypeConstants)
    cell = WorksheetFunction.Compactar(cell)
    Next cell
End Sub

我做错了什么?

虽然 Excel 函数是本地化的,但对象模型库中的相应方法不是 - 每个本地化具有不同的成员意味着每个可能的本地化都有不同的构建版本,然后支持和调试将是深不可测的混乱的。更不用说,某些语言环境使用非 ANSI 字符,VBE 可能很难正确显示这些字符。

Application.WorksheetFunction 是早期绑定的——这意味着编译器知道它在看什么,所以当你在 WorksheetFunction. 中键入点时,你会得到该对象所有成员的列表; Compactar(或任何其他本地化工作表函数名称)不在该列表中 - 因此 "object does not support this property or method" 编译错误。

根据经验,当您针对早期绑定对象进行编码时,您在键入 . 取消引用运算符时获得的成员列表是您可以对该对象合法执行的所有操作的列表.在 种情况下,有时成员会被隐藏(您可以使它们在对象浏览器中可见;F2 并右键单击任意位置,select "show hidden members"),以及某些情况其中后期绑定成员在 运行 时添加到可扩展 COM 接口上,但一般来说,如果它不在成员列表中,则它不是可调用的合法成员。

如果您使用后期绑定等效项,您的代码 编译 - 并在 运行 时爆炸并出现错误 438(后期绑定 / 运行-你得到的编译时错误的等效时间):

cell = Application.Compactar(cell) '<~ error 438 at run-time

您正在寻找 Trim 工作表函数...但请注意 VBA 有其自己的 Trim 函数,因此您甚至不需要获取 WorksheetFunction 参与其中。

请注意,您是此处 Range class 中的 implicitly assigning to the default member。更明确的代码是这样的:

cell.Value = Trim(cell.Value) ' fully-qualified: VBA.Strings.Trim

但是,这假设没有工作表错误 - 如果任何 cell 包含例如#VALUE!#REF!,那么这将引发 类型不匹配 错误。在将单元格值视为 StringDate 或任何 Double 或其他数值之前,始终验证单元格值的类型 - IsError 函数可用于避免使用 Variant/Error 值并意外地将其强制转换为 String:

If Not IsError(cell.Value) Then cell.Value = Trim(cell.Value)