VBA宏for Excel工作不正常

时间:2014-07-08 12:51:09

标签: excel vba excel-vba

我正在处理一个宏,它执行一些数学计算并将数据导出到同一个excel工作簿中另一个工作表中的一行。 开始时,我写了一个宏,按下按钮会将一些数据导出到Excel工作表中的一行,再次单击相同的按钮,它会用新数据替换/覆盖先前导出的数据,但我试图更改宏,以便它将数据导出到下一个可用行,而不是使用以下宏

覆盖以前的数据
Sub WJArchive()
'
' WJArchive Macro

'
Dim LastCell As Range
Dim LastCellRowNumber As Long


    Set LastCell = ActiveSheet.Cells(ActiveSheet.Rows.Count, "B").End(xlUp)
    LastCellRowNumber = LastCell.Row + 1

    Sheets("WJ LOGS").Select
    Range("B" & LastCellRowNumber).Select
    ActiveCell.FormulaR1C1 = "='Price Sheet'!R4C2"
    Range("C" & LastCellRowNumber).Select
    ActiveCell.FormulaR1C1 = "='Price Sheet'!R5C2"
    Range("D" & LastCellRowNumber).Select
    ActiveCell.FormulaR1C1 = "='Price Sheet'!R6C2"
    Range("E" & LastCellRowNumber).Select
    ActiveCell.FormulaR1C1 = "='Price Sheet'!R8C2"
    Range("F" & LastCellRowNumber).Select
    ActiveCell.FormulaR1C1 = "='Price Sheet'!R9C2"
    Range("G" & LastCellRowNumber).Select
    ActiveCell.FormulaR1C1 = "='Price Sheet'!R10C2"
    Range("H" & LastCellRowNumber).Select
    ActiveCell.FormulaR1C1 = "='Price Sheet'!R11C2"
    Range("I" & LastCellRowNumber).Select
    ActiveCell.FormulaR1C1 = "='Price Sheet'!R12C2"
    Range("J" & LastCellRowNumber).Select
    ActiveCell.FormulaR1C1 = "='Price Sheet'!R13C2"
    Range("K" & LastCellRowNumber).Select
    ActiveCell.FormulaR1C1 = "='Price Sheet'!R14C2"
    Range("L" & LastCellRowNumber).Select
    ActiveCell.FormulaR1C1 = "='Price Sheet'!R17C2"
    Range("M" & LastCellRowNumber).Select
    ActiveCell.FormulaR1C1 = "='Price Sheet'!R18C2"
    Range("N" & LastCellRowNumber).Select
    ActiveCell.FormulaR1C1 = "='Price Sheet'!R19C2"
    Range("O" & LastCellRowNumber).Select
    ActiveCell.FormulaR1C1 = "='Price Sheet'!R20C2"
    Range("P" & LastCellRowNumber).Select
    ActiveCell.FormulaR1C1 = "='Price Sheet'!R21C2"
    Range("Q" & LastCellRowNumber).Select
    ActiveCell.FormulaR1C1 = "='Price Sheet'!R22C2"
    Range("R" & LastCellRowNumber).Select
    ActiveCell.FormulaR1C1 = "='Price Sheet'!R23C2"
    Range("S" & LastCellRowNumber).Select
    ActiveCell.FormulaR1C1 = "='Price Sheet'!R26C2"
    Range("T" & LastCellRowNumber).Select
    ActiveCell.FormulaR1C1 = "='Price Sheet'!R27C2"
    Range("U" & LastCellRowNumber).Select
    ActiveCell.FormulaR1C1 = "='Price Sheet'!R28C2"
    Range("V" & LastCellRowNumber).Select
    ActiveCell.FormulaR1C1 = "='Price Sheet'!R29C2"
    Range("W" & LastCellRowNumber).Select
    ActiveCell.FormulaR1C1 = "='Price Sheet'!R30C2"
    Range("X" & LastCellRowNumber).Select
    ActiveCell.FormulaR1C1 = "='Price Sheet'!R31C2"
    Range("Y" & LastCellRowNumber).Select
    ActiveCell.FormulaR1C1 = "='Price Sheet'!R32C2"
    Range("Z" & LastCellRowNumber).Select
    ActiveWindow.ScrollColumn = 4
    ActiveWindow.ScrollColumn = 3
    ActiveWindow.ScrollColumn = 2
    ActiveWindow.ScrollColumn = 1
    Range("B" & LastCellRowNumber).Select
End Sub

由于某些原因,无论最后一行是什么,上面的宏都会在点击按钮的情况下将数据导出到Excel工作表中的第33行,然后在下一个按钮上单击它只需用新的第33行替换第33行中的数据数据和奇怪的是,当我编译它并使用断点评估它时,我在开发人员模式下运行此宏时非常正常。

唯一的问题是在设计模式下将数据复制到第33行。

不确定,为什么会遇到这个问题。

2 个答案:

答案 0 :(得分:3)

尝试删除SelectActiveCell方法。并添加对工作表的引用。

,例如,替换

Range("H" & LastCellRowNumber).Select
ActiveCell.FormulaR1C1 = "='Price Sheet'!R11C2"

Sheet1.Range("H" & LastCellRowNumber).FormulaR1C1 = "='Price Sheet'!R11C2"

答案 1 :(得分:1)

您正在根据错误的工作表计算 LastCellRowNumber 。替换:

Set LastCell = ActiveSheet.Cells(ActiveSheet.Rows.Count, "B").End(xlUp)

使用:

Set LastCell = Sheets("WJ LOGS").Cells(Rows.Count, "B").End(xlUp)