2015-05-13 138 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