2012-08-24 99 views
0

![数据集] [1]我有一个宏从关闭GetValues。宏工作并获取数据,但我错过了如何使其只能获取帐户P 15178中的任何数据。源数据包含5个帐户,但我只需要获取一个帐户。帐户号码列在源数据的“A”列中。GetValues从一个封闭的工作簿,满足Excel的条件VBA

这是我到目前为止有:

Sub test() 


GetValuesFromAClosedWorkbook "H:\VBA", "DNAV.xlsx", "DNAV", "A1:F250" 


End Sub 

Sub GetValuesFromAClosedWorkbook(fPath As String, _ 
fName As String, sName, cellRange As String) 

With ActiveSheet.Range(cellRange) 
    .FormulaArray = "='" & fPath & "\[" & fName & "]" _ 
    & sName & "'!" & cellRange 
    .Value = .Value 

End With 

End Sub 

数据集:

+1

如果您希望它是这样的直接公式,那么您必须知道A列中的哪些单元格包含您想要的产品,并且它们必须位于连续的行中。有几种方法可以实现这一点,但我必须先看到你的数据集。 –

+0

斯科特,我的数据集如下: – cemg

+0

没有。如果可以的话,请将您的数据集作为截图或链接发布到您的工作簿中。 –

回答

1

这里是你可以尝试什么:

Sub GetValuesFromClosedWorkbook(fpath as string, fname as String, _ 
    sname as String, cellRange as String, criteria as String) 

Activesheet.AutoFilterMode = False 

With Activesheet.Range(cellRange) 
    .FormulaArray = "='" & fpath & "\[" & fname & "]" & sname & "'!" & cellRange 
    .Value = .Value 
    .AutoFilter Field:=1, Criteria1:= "<>" & criteria 
    .Offset(1,0).SpecialCells(xlCellTypeVisible).EntireRow.Delete 
End With 

Activesheet.AutoFilterMode = False 

End Sub 

然后打电话给你的分是这样的:

GetValuesFromClosedWorkbook "H:\VBA", "DNAV.xlsx", "DNAV", "A1:F250", "P 15178" 

没有测试过,没办法在我的手机测试:)所以我把它给你。
完全基于你的屏幕截图。
编辑它以满足您的需求。

+0

糟糕,这是个老问题。但为了以防别人需要它,他们可以尝试我的建议:) – L42

2

这个答案仅仅是基于数据集的图像。如果有什么推迟,你需要调整代码。

Sub test() 


    GetValuesFromAClosedWorkbook "H:\VBA", "DNAV.xlsx", "DNAV", "A1:F7" 'since your product only goes to row 7, this should be good. If your data is not sorted this way all the time, you will need a whole other solution. 


End Sub 

Sub GetValuesFromAClosedWorkbook(fPath As String, _ 
fName As String, sName, cellRange As String) 

With ActiveSheet.Range(cellRange).Offset(6) 'offsetting by 6 rows should get the formula starting on cell A7 
    .FormulaArray = "='" & fPath & "\[" & fName & "]" _ 
    & sName & "'!" & cellRange 
    .Value = .Value 

End With 

End Sub 
+0

Scott上,数据集将有4个帐户,在这种情况下,我只想将P 15178从整个工作簿中的4个帐户中取出。我想我首先需要某种逻辑来说,只提取帐户P 15178的数据,即我卡住的地方。这就是为什么我有A1:F300的原因,它可以穿过整个数据并只提取标准P 15178 – cemg

+0

在这种情况下,您需要改变方法。您不能在直线Excel公式中使用这样的过滤器。简而言之,您需要执行以下步骤** 1)**打开已关闭的工作簿** 2)**过滤由您需要的产品设置的数据** 3)将已过滤的(可见)单元复制到工作表上你正在使用** 4)**关闭另一个工作簿。 –

+0

谢谢Scott。让我尝试一下,看看我得到了什么。除了拉取一个账户而不是所有账户之外,一切都有效。非常感谢您的帮助。 – cemg

相关问题