Vba 检测工作表中的最后一列

Vba 检测工作表中的最后一列,vba,excel,Vba,Excel,我试图在M表的公式中使用D表的最后一列。这是我的代码: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

我试图在M表的公式中使用D表的最后一列。这是我的代码: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

你需要一个函数

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

你需要一个函数

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
你能检查一下这个代码有什么问题吗

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
您有一个未声明/未初始化的变量LastColumn1,您正在公式字符串中使用该变量。此变量在运行时没有值,这会导致错误

如何解决这个问题:

如果您只是简单地使用了optionexplicit,您将收到编译错误的通知。LastColumn1变量在try过程的范围内未声明

由于您没有使用要求声明所有变量的Option Explicit,编译器将未声明的变量初始化为类型变量,并使用空/0/null字符串值

因此,您在以下方面存在一个明显的错误:

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,这是一个没有列索引的无效范围,它是未定义的/不可能存在

使用上面的@iDevelop函数可能足以满足大多数普通、简单的情况,但是您可能希望查看此处描述的更健壮的方法:

你能检查一下这个代码有什么问题吗

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
您有一个未声明/未初始化的变量LastColumn1,您正在公式字符串中使用该变量。此变量在运行时没有值,这会导致错误

如何解决这个问题:

如果您只是简单地使用了optionexplicit,您将收到编译错误的通知。LastColumn1变量在try过程的范围内未声明

由于您没有使用要求声明所有变量的Option Explicit,编译器将未声明的变量初始化为类型变量,并使用空/0/null字符串值

因此,您在以下方面存在一个明显的错误:

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,这是一个没有列索引的无效范围,它是未定义的/不可能存在

使用上面的@iDevelop函数可能足以满足大多数普通、简单的情况,但是您可能希望查看此处描述的更健壮的方法:


计数器变量LastColumn1的值是多少?变量LastColumn1设置在模块或全局范围内?运行Try sub时,LastColumn1变量的值是多少?请将鼠标悬停在代码的中断模式下,或者用另一种方式调试它。即使我把选项显式放置在上面,它也不起作用。Option Explicit Sub try Dim LastColumn1,只要LastColumn1=ActiveWorkbook.WorksheetsD.RangeA12.EndxlToRight.Value Sheet1。选择RangeA4。选择ActiveCell.EndxlToRight.Offset-2,1。Value=Qtr Do,而ActiveCell.Value ActiveCell.EndxlToRight.Offset0,1。公式==IFERRORD!R[8]C LastColumn1*1+INDEXA!R3C4:R418C27,MATCHM!R2C,A!R2C4:R2C27,0,0 ActiveCell.Offset1,0。选择循环结束子计数器变量LastColumn1的值设置在模块或全局范围内?运行Try sub时,LastColumn1变量的值是多少?请将鼠标悬停在代码的中断模式下,或者用另一种方式调试它。即使我把选项显式放置在上面,它也不起作用。Option Explicit Sub try Dim LastColumn1,只要LastColumn1=ActiveWorkbook.WorksheetsD.RangeA12.EndxlToRight.Value Sheet1。选择RangeA4。选择ActiveCell.EndxlToRight.Offset-2,1。Value=Qtr Do,而ActiveCell.Value ActiveCell.EndxlToRight.Offset0,1。公式==IFERRORD!R[8]C LastColumn1*1+INDEXA!R3C4:R418C27,MATCHM!R2C,A!R2C4:R2C27,0,0 ActiveCell.Offset1,0。选择循环结束子循环