在R1C1表示法中使用单元属性

时间:2018-04-16 16:32:37

标签: excel vba excel-vba

我正在运行一个宏,我使用列属性

定义lastcolumnbc
lastcolumnbc = 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

不幸的是,这会返回一个对象定义的错误。

3 个答案:

答案 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))"