我正在运行一个宏,我使用列属性
定义lastcolumnbclastcolumnbc = ws.Cells.SpecialCells(xlCellTypeLastCell).Column
稍后,我想在R1C1中使用该属性将公式插入范围:
Set rgbe = .Range(.Cells(1, 2), .Cells(lastrow - 1, 2))
rgbe.Select
Selection.FormulaR1C1 = "=INDEX(RC[1]:RC[lastcolumnbc],MATCH(TRUE,INDEX((RC[1]:RC[lastcolumnbc]<>0),0),0))"
Selection.Columns.AutoFit
不幸的是,这会返回一个对象定义的错误。
答案 0 :(得分:1)
在不知道哪条线会抛出我现在假设的错误时,可以用与最后一列相同的方式确定lastrow。而且你的最后一个错误就是没有将变量连接到字符串之外。
始终在代码顶部使用显式选项,避免选择和使用With语句在工作表上清楚。并且要小心,因为xlCellTypeLastCell实际上可能最终会引用您没有预料到的单元格,甚至可能显示为空。
Option Explicit
Sub test()
Dim lastcolumnbc As Long
Dim ws As Worksheet
Dim rgbe As Range
Set ws = ActiveSheet
Dim lastrow As Long
lastrow = ws.Cells.SpecialCells(xlCellTypeLastCell).Row
lastcolumnbc = ws.Cells.SpecialCells(xlCellTypeLastCell).Column
With ws
If lastRow <=1 Then Exit Sub 'quit if attempt invalid
Set rgbe = .Range(.Cells(1, 2), .Cells(lastrow - 1, 2)) 'what happens if lastRow is 1 or 0?
With rgbe
.FormulaR1C1 = "=INDEX(RC[1]:RC[" & lastcolumnbc & "],MATCH(TRUE,INDEX((RC[1]:RC[" & lastcolumnbc & "]<>0),0),0))"
.Columns.AutoFit
End With
End With
End Sub
答案 1 :(得分:0)
变量的值需要放在字符串中才能使公式起作用。像这样
Selection.FormulaR1C1 = "=INDEX(RC[1]:RC[lastcolumnbc],MATCH(TRUE,INDEX((RC[1]:RC["& lastcolumnbc & "]<>0),0),0))"
答案 2 :(得分:0)
这对你有用吗?
rgbe.FormulaR1C1 = "=INDEX(RC[1]:RC[" & lastcolumnbc & "],MATCH(TRUE,INDEX((RC[1]:RC[" & lastcolumnbc & "]<>0),0),0))"