Excel VBA无需选中单元格运行宏,解决跨工作表触发1004报错问题
解决方案
核心问题在于Select方法必须要求目标工作表处于激活状态才能调用,而绝大多数VBA场景下都完全不需要使用Select/Selection,直接调用单元格对象的方法即可。
优化后代码
直接去掉Select和Selection的关联写法,将方法直接挂载到对应Range对象上即可,原有拆分逻辑完全保留:
Worksheets("Import Data").Range("A" & rownumber).TextToColumns _ Destination:=Worksheets("Import Data").Range("C" & rownumber), _ DataType:=xlDelimited, _ TextQualifier:=xlDoubleQuote, _ ConsecutiveDelimiter:=False, _ Tab:=False, _ Semicolon:=False, _ Comma:=False, _ Space:=False, _ Other:=True, _ OtherChar:="^", _ FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), _ Array(6, 1), Array(7, 1), Array(8, 1), Array(9, 1), Array(10, 1), Array(11, 1), _ Array(12, 1), Array(13, 1), Array(14, 1), Array(15, 1), Array(16, 1), Array(17, 1), _ Array(18, 1), Array(19, 1), Array(20, 1), Array(21, 1), Array(22, 1), Array(23, 1), _ Array(24, 1), Array(25, 1), Array(26, 1), Array(27, 1), Array(28, 1), Array(29, 1), _ Array(30, 1), Array(31, 1), Array(32, 1), Array(33, 1), Array(34, 1), Array(35, 1)), _ TrailingMinusNumbers:=True
额外优化建议
可以提前将工作表定义为对象,避免重复书写工作表名称,也降低拼写错误、多工作簿打开时引用错误的概率:
Dim importWs As Worksheet Set importWs = ThisWorkbook.Worksheets("Import Data") ' 后续直接使用工作表对象调用即可 importWs.Range("A" & rownumber).TextToColumns _ Destination:=importWs.Range("C" & rownumber), _ ' 剩余参数和上方保持一致即可
内容的提问来源于stack exchange,提问作者Stuart Cruickshank
相关产品推荐
相关产品推荐

