如何通过宏应用公式过滤器-过滤器-偏移量

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

我的任务是在工作簿 1 中创建一个宏,该宏可以从工作簿 2 中提取数据。要求是我在 VBA 中创建一个公式,其中包括应用工作簿 1 中的过滤器/过滤器/偏移公式,该公式可以提取工作簿 2 中的数据。来自工作簿 2 的数据。当然,两个工作簿都有相关的特定范围。

我可以在 Workbook1 中成功编写宏,以允许用户“引导”至 Workbook2 中的源数据并提取特定列和行的数据。但问题比这更复杂。特别需要过滤器/过滤器/偏移。

我可以在Workbook1的单元格“A7”中手动编写公式,以100%成功地从Workbook2中提取数据范围。

=FILTER(FILTER(OFFSET('[Glass Order Form Template.xlsm]Glass Schedule'!$C$8,0,0,3001,16),'[Glass Order Form Template.xlsm]Glass Schedule'!$D$8:$D$3008<>""),{1,1,1,1,0,0,1,1,0,0,0,0,0,0,1,1})

如果源数据位于同一工作簿中,我想我完成任务不会有任何问题。然而,由于源数据位于 Workbook2 中,我遇到了困难。我只是不知道如何在 VBA 中编写公式,以便在公式中引用 Workbook2 时从 Workbook2 中提取数据。我尝试分配一个变量并用变量名称代替 workbook2/工作表名称,但我搞砸了。如果有人有任何想法,我将不胜感激这堂课。

数据源工作簿2的文件名:玻璃订单模板.xlsm

数据源工作表的表名称:Glass Schedule

提前致谢。这是我的代码:

Sub ImportData()
    Dim dataFilePath As String
    Dim dataWorkbook As Workbook
    Dim targetWorkbook As Workbook
    Dim AnswerYes As String
    Dim AnswerNo As String
    
    Dim lastRow As Long


    ' Prompt user to select data file
    dataFilePath = Application.GetOpenFilename("Excel Files (*.xlsm), *.XLSM")
    If dataFilePath = "False" Then Exit Sub ' User canceled the selection

    ' Open the data workbook
    Set dataWorkbook = Workbooks.Open(dataFilePath)

    ' Data is in "Glass Schedule" worksheet, and range is non-contiguous columns
    
    'Define worksheet variables
    Dim sourceSheet As Worksheet    'Glass Take Off Sheet
    Dim targetSheet As Worksheet    'Glass QC Sheet
    
    'Define Range variable
    Dim destination As Range
    
    ' Set Source and Target worksheets
    Set sourceSheet = dataWorkbook.Worksheets("Glass Schedule")
    Set targetSheet = ThisWorkbook.Worksheets("QC")
    
    '---------------------------------------------------------------------------
    'Copy from Glass Take Off workwheet and paste to QC Worksheet
    '---------------------------------------------------------------------------
    
    sourceSheet.Range("D1").Copy                        'Job Number
        targetSheet.Range("B2").PasteSpecial xlValues

    targetSheet.Range("B3").UnMerge                     'Unmerge Job Name field, if merged.

    sourceSheet.Range("D2").Copy                        'Job Name
        targetSheet.Range("B3").PasteSpecial xlValues
        
    With targetSheet
    
    .Range("A7").Formula = "=FILTER(FILTER(OFFSET('[Glass Order Form Template.xlsm]Glass Schedule'!$C$8,0,0,3001,16),'[Glass Order Form Template.xlsm]Glass Schedule'!$D$8:$D$3008<>""),{1,1,1,1,0,0,1,1,0,0,0,0,0,0,1,1})"
    
    End With

    ' --------------------------------------------------------------------------
    ' Dialogue Box and User Input
    ' --------------------------------------------------------------------------
 AnswerYes = MsgBox("Close Glass Take Off Sheet?", vbQuestion + vbYesNo, "User Repsonse")
 If AnswerYes = vbYes Then
        dataWorkbook.Close
    Else
        Exit Sub
 End If

End Sub
excel vba
1个回答
0
投票

以下代码行解决了该问题。请注意公式中额外的一组引号

.Range("A7").Formula2 = "=FILTER(FILTER(OFFSET('[Glass Order Form Template.xlsm]Glass Schedule'!$C$8,0,0,3001,16),'[Glass Order Form Template.xlsm]Glass Schedule'!$D$8:$D$3008<>""""),{1,1,1,1,0,0,1,1,0,0,0,0,0,0,1,1})"
© www.soinside.com 2019 - 2024. All rights reserved.