在Excel刷新上提前单元格引用

时间:2014-03-17 12:35:16

标签: excel vba

我想知道你是否可以帮助我。

我有一张带有两张纸的excel文件,'数据'和'输出'。我正在使用单元格引用=data!A1。但我希望它能推进十行,例如=data!A11每次excel刷新(刷新我的意思是,每次运行公式时都会=rand

需要像这样运行的原因是单元格需要为每页打印提前10个空格。

如果您需要更多信息,请与我们联系。

编辑:对不起,如果我一开始并不清楚,我需要一个宏或公式来推进“单元格参考”'十行,在excel刷新。上面的例子。

3 个答案:

答案 0 :(得分:1)

您可以在此处使用此公式。

=OFFSET(<Starting_Cell>,(ROW()-<Current_Row>)*<Inc>,0)

更具体地说,这里应该有效。

=OFFSET($A$1,(ROW()-1)*10,0)

答案 1 :(得分:1)

您可以捕获各种各样的事件,但我认为它们中的任何一个都不能满足您的确切需求。

您可以将其添加到ThisWorkbook模块:

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

End Sub
只要工作簿中的某些内容发生更改,就会运行此子代码中的

代码。但根据你对你的要求的解释,我认为这是不合适的,原因有两个:

  • 任何任何单元格值更改时都会触发,这可能不是您想要的
  • 您表示您正在尝试捕获打印操作,但在我的测试(Excel 2010)中,打印工作簿时未触发此操作(我也未在=Rand()的单元格中看到更改

您可以在ThisWorkbook

中使用此代码
Private Sub Workbook_BeforePrint(Cancel As Boolean)

End Sub

顾名思义,它将在任何打印操作之前运行。每个工作簿会触发一次;在工作表级别没有等价物(尽管简单地遍历每个工作表很容易)。此外,它发生之前打印;我假设您希望公式随后增加。

我认为最好的选择是创建一个执行整个操作的宏:

  1. 打印:致电ThisWorkbook.PrintOut,或遍历每张表并致电sheet.PrintOut
  2. 在每个工作表上增加单个单元格
  3. 使用OFFSET函数(请参阅BigRabbit的答案)来引用递增的单元格。

答案 2 :(得分:0)

这个,内置于其他答案似乎是解决方案。谢谢大家的帮助。

 Sub Auto_Open()   
    Dim currentRow As String   
    Dim sTemp As String   

        sTemp = Range("C18").Formula   

        Do While (IsNumeric(Right(sTemp, 1)))   

            currentRow = Right(sTemp, 1) & currentRow   
            sTemp = Mid(sTemp, 1, Len(sTemp) - 1)   

        Loop   

        currentRow = CLng(currentRow) + 11   

        Range("C18").Formula = sTemp & currentRow   

    End Sub