【发布时间】:2019-07-09 09:59:35
【问题描述】:
我正在尝试使用 VBA 代码修剪表格的标题,因为其中一些前面的空格每个月都不同,这使得编码变得困难。
当我分解代码并逐步运行它时,它工作正常,但是当我运行整个宏时,它会删除我的一些标题并将它们替换为来自不同工作表行的信息,或者只是“第 1 列”、“列2"等。
我相信我在调用 (" & .Address & ") 选择时遗漏了一些代码参考?
它正在替换单元格处于活动状态的工作表中的标题。 (如果它是在运行宏之前单击的最后一个单元格)。
我试过只使用 Trim 函数,但是因为它是范围的数组,所以它不起作用,有人建议使用“evaluate "函数。
我也尝试将 trim 函数用作 WorksheetFunction,但它给了我一个错误“运行时错误 13”类型不匹配“。这是在以下代码中:
With wsDispoData.ListObjects("Table_DispoData").HeaderRowRange.EntireRow
.Value = WorksheetFunction.Trim(.Value)
End With
这是我正在使用的当前代码替换错误。
Trim headings
With wsDispoData.ListObjects("Table_DispoData").HeaderRowRange.EntireRow
.Value = Evaluate("IF(ISTEXT(" & .Address & "),TRIM(" & .Address & "),REPT(" & .Address & ",1))")
End With
预期的结果应该是例如:
当前标题:“SOH”和“Compo”
修剪:“SOH”和“Compo”
【问题讨论】:
-
不太确定但试试:
.Address(ColumnAbsolute:=False) -
您的代码对我有用...您确定这些实际上是空格而不是不可打印的字符吗?
-
@SiddharthRout 它们绝对是空格。如上所述,代码可以独立运行,或者如果我在中断中运行宏,但如果我运行整个长宏则不行。我已经通过更新编辑了我的问题。似乎它正在用选择的单元格和工作表替换标题。
-
在这种情况下,我需要查看完整的宏。您可能会在代码中的某处重置范围
-
@Simone Fick 是的,这是一个快速而错误的建议。认真对待:通过省略整个行的类型不匹配是正确的,因为 headerrowrange 返回一个范围,而不是一个字符串。所以你可以试试
For Each c in wsDispoData.ListObjects("Table_DispoData").HeaderRowRange: c.Value = Trim(c.Value) : Next
标签: excel vba trim tableheader