更改我录制的自动填充宏以删除对activecell的引用

时间:2018-04-16 06:15:51

标签: vba excel-vba excel

我正在尝试清理录制的宏,以便在将来几个月运行它时不会出现错误(我正在尝试自动执行月度报告)。我听说过对Activecell等的引用可能很危险,所以我很想确定它。

要求概要。我正在使用多个公式从另一个工作表中获取内容,并在另一个工作表上填写所述数据的末尾。

Sub AnswesComboFill()
    Range("A2").Select
    ActiveCell.FormulaR1C1 = "=EvalTableData!RC[2]"
    Range("B2").Select
    ActiveCell.FormulaR1C1 = "=EvalTableData!RC[4]"
    Range("C2").Select
    ActiveCell.FormulaR1C1 = "=EvalTableData!RC[1]"
    Range("D2").Select
    ActiveCell.FormulaR1C1 = "=VLOOKUP(EvalTableData!RC[-3],AnswersData!C[-3]:C[2],6)"
    Range("E2").Select
    ActiveCell.FormulaR1C1 = "=VLOOKUP(EvalTableData!RC[-4],AnswersData!C[2]:C[7],6)"
    Range("F2").Select
    ActiveCell.FormulaR1C1 = "=VLOOKUP(EvalTableData!RC[-5],AnswersData!C[7]:C[12],6)"
    Range("G2").Select
    ActiveCell.FormulaR1C1 = "=VLOOKUP(EvalTableData!RC[-6],AnswersData!C[12]:C[17],6)"
    Range("H2").Select
    ActiveCell.FormulaR1C1 = "=VLOOKUP(EvalTableData!RC[-7],AnswersData!C[17]:C[22],6)"
    Range("A2:H2").Select
    Selection.AutoFill Destination:=Range("A2:H2000"), Type:=xlFillDefault
    Range("A2:H2000").Select
    Selection.NumberFormat = "General"
End Sub

问题:

我是否可以获得更改方向,以便单元格引用是静态的?

我所指的一些单元格被格式化为Text,因此格式化为General的最后一行。即使我将格式更改为常规,内容仍然保留为文本(例如,A2只会说“= EvalTableData!A2”而不是内容)。我改变格式后有没有办法刷新内容?

我希望填充范围是动态的而不是A2:H2000,就像在公式中一样。我目前在其他一个宏中有一个range.lastcell样式公式,但在这种情况下它不起作用,因为我指的是一个不同的工作表。我也可以得到一些帮助吗?

1 个答案:

答案 0 :(得分:0)

而不是

Range("A2").Select
ActiveCell.FormulaR1C1 = "=EvalTableData!RC[2]"

使用

Range("A2").FormulaR1C1 = "=EvalTableData!RC[2]"

使此范围动态

Range("A2:H2000").Select
Selection.NumberFormat = "General"

制作

Range(Range("A2"),Range("H2").end(xldown)).NumberFormat = "General"

要解决文本问题,应将公式更正为

ActiveCell.FormulaR1C1 = "='EvalTableData'!RC[2]"