在备用工作表中运行VBA代码会触发错误的结果 - 尽管引用?

时间:2016-02-25 21:28:29

标签: excel vba excel-vba

以下代码旨在从“输入”中的单元格中提取值。工作表,然后将其显示在'输出'片。然后显示记录的最后一个值之间的差异,并以百分比表示该数字。

当我在“输出”工作表处于活动状态时运行此代码时,它可以工作但是,当我从输出表运行它时,它没有。相反,它在输入表中的F列中显示我希望复制的值,并在输出表中显示错误单元格中的差异和百分比差异。

它看起来正确地引用了我,但显然不是。关于如何纠正的思考?

我很欣赏代码可能更整洁 - 我对此非常陌生。

Sub Button1_Click()

Dim LastRow As Long
Dim RecentRow As Long

    With Sheets("Output")

         LastRow = .Cells(.Rows.Count, "F").End(xlUp).Row
         RecentRow = .Cells(.Rows.Count, "F").End(xlUp).Offset(1, 0).Row

         Range("F" & LastRow).Select
         ActiveCell.Offset(1, 0).Formula = "=Input!B4"
         ActiveCell.Offset(1, 0).Copy
         ActiveCell.Offset(1, 0).PasteSpecial (xlValues)

    End With

       ActiveCell.Offset(0, 1).Formula = "=(F" & RecentRow & "-F" & LastRow & ")"
       ActiveCell.Offset(0, 2).Formula = "=((F" & RecentRow & "/F" & LastRow & ")-1)"

End Sub

感谢。

1 个答案:

答案 0 :(得分:1)

以下代码应解决您的问题 - 因为您的范围(" F"& LastRow).Select在Range之前没有句号。

Sub Button1_Click()

Dim LastRow As Long
Dim RecentRow As Long

    With Sheets("Output")

         LastRow = .Cells(.Rows.Count, "F").End(xlUp).Row
         RecentRow = .Cells(.Rows.Count, "F").End(xlUp).Offset(1, 0).Row

         With .Range("F" & LastRow)
             .Offset(1, 0).Formula = "=Input!B4"
             .Offset(1, 0).Copy
             .Offset(1, 0).PasteSpecial (xlValues)
             .Offset(0, 1).Formula = "=(F" & RecentRow & "-F" & LastRow & ")"
             .Offset(0, 2).Formula = "=((F" & RecentRow & "/F" & LastRow & ")-1)"
         End With

    End With

End Sub

此外,您可以使用以下代码提高代码效率:

Sub Button1_Click()

Dim LastRow As Long

    With ThisWorkbook.Sheets("Output") 'Allow for code to work even if in another workbook.

         LastRow = .Cells(.Rows.Count, "F").End(xlUp).Row

         With .Range("F" & LastRow)
             .Offset(1, 0).Value2 = ThisWorkbook.Sheets("Input").Range("B4").Value2
             .Offset(0, 1).Formula = "=(F" & LastRow + 1 & "-F" & LastRow & ")"
             .Offset(0, 2).Formula = "=((F" & LastRow + 1 & "/F" & LastRow & ")-1)"
         End With

    End With

End Sub