【问题标题】:Restore formulas VBA code恢复公式 VBA 代码
【发布时间】:2015-05-13 09:26:28
【问题描述】:

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

它需要做的是在单元格下面中输入名为“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

【问题讨论】:

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

标签: excel vba


【解决方案1】:

这是您正在尝试的吗(未经测试)?我假设FCST_ID 在 Col 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

【讨论】:

  • 您确实需要自动填充,因为它不仅仅是被填充的 A 列。
  • 我可以借你的咖啡吗? :P
  • 现在发生的事情是我的所有标题都被下拉到第 6000 行。它应该搜索标题“FCST_ID”,然后在该标题下的一个单元格中,填写公式“=Demand!A2” .之后,必须将填写“=Demand!A2”的行拉到第6000行。谢谢!
  • 做了一个小改动。请立即测试
猜你喜欢
  • 1970-01-01
  • 2018-10-03
  • 2023-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-27
相关资源
最近更新 更多