使用 VBA 代码复制带方括号 [ ] 的公式和动态单元格引用

问题描述 投票:0回答:1

我目前正在尝试基本上复制一个带有单元格引用的公式,该单元格引用应该是动态的,但它不起作用。我尝试了很多事情,但我只是想介绍一下自己,并说我过去 5 天一直在编写 vba 代码,所以我不是专家,如果我的代码没有优化或更好,请原谅我。如果您有更好的想法,请告诉我。

我想要跨越该范围的公式是

=IFERROR(INDEX('Request Tracker'!$K:$K,MATCH(Email.Template!E14,'Request Tracker'!$G:$G,0)),"")

我需要帮助的代码

name2.CurrentRegion.Offset(2, 4).Resize(name2.CurrentRegion.Rows.Count - 2, name2.CurrentRegion.Columns.Count - 7).Formula = [=IFERROR(INDEX('Request Tracker'!$K:$K,MATCH(Email.Template!R[]C5,'Request Tracker'!$G:$G,0)),"")]   

我的原始代码有 3 个子代码

我需要第三个子的帮助,其中粘贴了公式

1) 召唤

Sub RUN()
Call AdvancedFilter
Call AdvancedFilterQC
End Sub

2)第一张桌子

Sub AdvancedFilter()
Sheet3.Range(Sheet3.Range("B5:I20"), Sheet3.Range("B5:I20").End(xlDown)).Clear
    Dim source1 As Range
    Dim criteria1 As Range
    Dim output1 As Range
    Set source1 = Sheet1.ListObjects("RT").Range
    Set criteria1 = Sheet4.Range("A3").CurrentRegion
    Set output1 = Sheet3.Range("B3").CurrentRegion
    source1.AdvancedFilter xlFilterCopy, criteria1, output1
End Sub

3)第二张表

Sub AdvancedFilterQC()
    Dim output1 As Range
    Dim qcheader As Range
    Dim qctitle As Range
    Set output1 = Sheet3.Range("B3").CurrentRegion
    With output1
        Set qctitle = .Offset(.Rows.Count + 1).Cells(1, 1)
        Set qcheader = .Offset(.Rows.Count + 2).Cells(1, 2)
    End With
    Sheet4.Range("F18:M18").Copy qctitle
    Sheet4.Range("F19:J19").Copy qcheader
    Dim source2 As Range
    Dim criteria2 As Range
    Dim output2 As Range
    Set source2 = Sheet2.ListObjects("QCT").Range
    Set criteria2 = Sheet4.Range("A9").CurrentRegion
    Set output2 = qcheader.CurrentRegion.Offset(1, 1).Resize(qcheader.CurrentRegion.Rows.Count, _
    qcheader.CurrentRegion.Columns.Count - 3)
    source2.AdvancedFilter xlFilterCopy, criteria2, output2
    Dim name2 As Range
    Set name2 = output2
    Sheet4.Range("K19").Copy name2.Cells(1, 4)
    name2.CurrentRegion.Offset(2, 4).Resize(name2.CurrentRegion.Rows.Count, _
    name2.CurrentRegion.Columns.Count - 7).Clear
    
name2.CurrentRegion.Offset(2, 4).Resize(name2.CurrentRegion.Rows.Count - 2, name2.CurrentRegion.Columns.Count - 7).Formula = [=IFERROR(INDEX('Request Tracker'!$K:$K,MATCH(Email.Template!R[]C5,'Request Tracker'!$G:$G,0)),"")]
      
End Sub
excel vba excel-formula office365 copy-paste
1个回答
0
投票

更正后的线应如下所示:

name2.CurrentRegion.Offset(2, 4).Resize(name2.CurrentRegion.Rows.Count - 2, name2.CurrentRegion.Columns.Count - 7).FormulaR1C1 = _
    "=IFERROR(INDEX('Request Tracker'!C11,MATCH(Email.Template!RC[-4],'Request Tracker'!C7,0)),"""")"

在此更正的版本中,我使用了 FormulaR1C1 属性,它允许您使用 R1C1 样式引用设置公式。

Email.Template!RC[-4] 指“Email.Template”工作表中当前行 (R[0]) 和左侧 4 列 (C[-4]) 中的单元格。

我只需要根据我所指的单元格的实际相对位置调整-4即可。

© www.soinside.com 2019 - 2024. All rights reserved.