VBA运行时错误1004:_Global对象Range方法调用失败问题求助
错误核心原因
- Find方法无空值校验:如果当前工作表第一行不存在值为
International的表头,Source会被赋值为Nothing,后续调用Source.Column、Source.Address时会直接触发报错。 - 结构化引用指向不存在的对象:你手动给
Cells(1, FirstCol)赋值为FirstCol后,直接拼接了PatBase表的结构化引用作为拆分目标,但若该单元格不在PatBase超级表的覆盖范围内,这个结构化引用就是无效的,Range对象无法识别自然抛出1004错误。你后续的截断代码可以正常运行,是因为此时拆分后的列已经纳入了PatBase表的范围,结构化引用有效。 - 变量类型不匹配隐患:
SourceCol被声明为字符串类型,但Source.Column返回的是整数,虽然你当前代码未使用该变量,但后续调用也会触发类型错误。
修复方案
你完全不需要拼接结构化引用指定目标位置,因为你已经通过变量拿到了目标列的列号FirstCol,直接用单元格地址指定目标即可,同时补充Find结果的校验逻辑。
修正后的代码段
Dim CurrentCol As Integer Dim FirstCol As Integer Dim LastCol As Integer Dim ColName As String Dim BlankCol As Integer Dim Source As Range Dim SourceCol As Integer ' 修正变量类型 Dim SourceAdd As String Dim FirstColName As String BlankCol = ActiveSheet.Cells(1, Columns.Count).End(xlToLeft).Column + 1 FirstCol = BlankCol + 1 Cells(1, FirstCol).Value = "FirstCol" FirstColName = Cells(1, FirstCol).Value Cells(1, BlankCol).Value = "Unique Classes" ' 查找表头并校验结果,增加完全匹配参数避免模糊匹配 Set Source = ActiveSheet.Rows(1).Find("International", LookIn:=xlValues, LookAt:=xlWhole) If Source Is Nothing Then MsgBox "未找到International表头,请检查数据格式", vbCritical Exit Sub End If SourceCol = Source.Column SourceAdd = Source.Address ' 直接用列号指定目标位置,无需拼接结构化引用 Range(SourceAdd).EntireColumn.TextToColumns _ Destination:=Cells(1, FirstCol), _ DataType:=xlDelimited, _ Tab:=True, Other:=True, OtherChar:=Chr(10), _ 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)), _ TrailingMinusNumbers:=True
内容的提问来源于stack exchange,提问作者Victoria
相关产品推荐
相关产品推荐

