2015-05-13 100 views
1

所以我有这个问题与在Excel中恢复所有公式的按钮。公式都是基于这一个单元格,目前是A26 (=Demand!A2)。但由于行号将在未来发生变化,因此该代码目前不够健壮。恢复公式VBA代码

它所需要做的是输入到单元下面的“头”命名为“FCST_ID”下面的公式:=Demand!A2。 (记住它不是一个表)后,它会选择该整行,充满了基于该=Demand!A2细胞许多公式,并把它完全放下,直到行6000

它工作时,我尝试使用宏并选择单元格A26,但是,例如,如果此单元格将更改为A25,则不会使模型足够健壮。所以我现在试图做的是记录一个宏,查找'头'FCST_ID,然后去一个单元格较低,填入公式,然后拉下该行的所有公式,直到行6000.

会高度感谢任何帮助!

Cells.Find(What:="FCST_ID", After:=ActiveCell, LookIn:=xlFormulas, _ 
    LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ 
    MatchCase:=False, SearchFormat:=False).Activate .Offset(1, 0).Select 
ActiveCell.FormulaR1C1 = "=Demand!R[-24]C" 
Range("A26").Select 
Range(Selection, Selection.End(xlToRight)).Select 
Range("A26:EU26").Select 
ActiveWindow.SmallScroll ToRight:=2 
Selection.AutoFill Destination:=Range("A26:EU6000"), Type:=xlFillDefault 
Range("A26:EU6000").Select 
+0

录制的宏带来了几个无用的行(如最后几个向上滚动)。你介意清理一下你的代码吗? –

+0

确定没问题! – Wolfschmitt

回答

1

这是你正在尝试(未经测试)?我假设FCST_ID是在A区。

Sub Sample() 
    Dim ws As Worksheet 
    Dim lRow As Long 
    Dim aCell As Range 

    Set ws = ThisWorkbook.Sheets("Sheet1") 

    With ws 
     If Application.WorksheetFunction.CountA(.Cells) <> 0 Then 
      lRow = .Cells.Find(What:="*", _ 
          After:=.Range("A1"), _ 
          Lookat:=xlPart, _ 
          LookIn:=xlFormulas, _ 
          SearchOrder:=xlByRows, _ 
          SearchDirection:=xlPrevious, _ 
          MatchCase:=False).Row 

      Set aCell = .Cells.Find(What:="FCST_ID", LookIn:=xlValues, _ 
         Lookat:=xlWhole, SearchOrder:=xlByRows, _ 
         SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False) 

      If Not aCell Is Nothing Then 
       aCell.Offset(1).Formula = "=Demand!A2" 

       .Range("A" & (aCell.Row+1) & ":EU" & (aCell.Row+1)).AutoFill _ 
       Destination:=.Range("A" & (aCell.Row+1) & ":EU" & lRow), Type:=xlFillDefault 
      End If 
     End If 

    End With 
End Sub 
+0

您确实需要自动填充,因为它不仅仅是列A的填充​​。 – Rory

+0

我可以借用你的咖啡吗? :P –

+0

现在发生的事情是,我的所有标题都被拉下直到第6000行。它应该搜索标题'FCST_ID',然后搜索该标题下的一个单元格,填入公式“= Demand!A2”。 之后,填入“= Demand!A2”的行必须向下拉直至行6000. 谢谢! – Wolfschmitt