检测工作表中的最后一列

时间:2015-11-26 13:59:14

标签: excel vba excel-vba

我正在尝试在Sheet M的公式中使用Sheet D中的Lastcolumn。这是我的代码:D!R[8]C " & LastColumn1 &

但看起来代码正在使用工作表M中的最后一列编号。

请您检查此代码有什么问题?

Sub misc()
  Dim LastColumn1 As Long
  LastColumn1 = ActiveWorkbook.Worksheets("D").Range("a12").End(xlToRight).Column
End Sub
Sub try()
    Sheet1.Select        
    Range("A4").Select
    ActiveCell.End(xlToRight).Offset(-2, 1).Value = counter & "Qtr"
    Do While ActiveCell.Value <> ""
        ActiveCell.End(xlToRight).Offset(0, 1).Formula = "=IFERROR(D!R[8]C " & LastColumn1 & " *(1+INDEX(A!R3C4:R418C27,MATCH(M!R2C,A!R2C4:R2C27,0))),0)"
        ActiveCell.Offset(1, 0).Select
    Loop
End Sub

2 个答案:

答案 0 :(得分:0)

你需要一个功能。

Function LastColumn() as long
  LastColumn = ThisWorkbook.Worksheets("D").Range("a12").End(xlToRight).Column
end function

然后直接从您的代码中调用该函数:

Sub try()
    Sheet1.Select        
    Range("A4").Select
    lastCol = LastColumn '## Calling the function from above
    ActiveCell.End(xlToRight).Offset(-2, 1).Value = counter & "Qtr"
    Do While ActiveCell.Value <> ""
        ActiveCell.End(xlToRight).Offset(0, 1).Formula = "=IFERROR(D!R[8]C " & lastCol & " *(1+INDEX(A!R3C4:R418C27,MATCH(M!R2C,A!R2C4:R2C27,0))),0)"
        ActiveCell.Offset(1, 0).Select
    Loop
End Sub

答案 1 :(得分:0)

  

请您检查此代码有什么问题?

您有一个名为LastColumn1的未声明/未初始化的变量,您在公式字符串中使用该变量。此变量在运行时没有值,这会导致错误。

如何解决它:

如果您只使用Option Explicit,则会收到编译错误通知。在LastColumn1过程的范围内,try()变量未声明。

由于您没有使用Option Explicit(要求声明所有变量),编译器会将未声明的变量初始化为Variant类型,其值为空/ 0 / null-string。

所以,你基本上有一个明显的错误:

ActiveCell.End(xlToRight).Offset(0, 1).Formula = _
    "=IFERROR(D!R[8]C " & EMPTY & " * _
    (1+INDEX(A!R3C4:R418C27,MATCH(M!R2C,A!R2C4:R2C27,0))),0)"

因为该连接的结果是:D!R[8]C并且这是一个无效的Range(没有列索引),所以它是未定义的/不能存在。

使用上面的@ iDevelop&#39开发的函数可能足以满足大多数普通的简单案例,但是你可能想要查看这里描述的更强大的方法:

Error in finding last used cell in VBA