从另一个工作簿的关闭文件中提取数据是大多数excel用户的常见要求。他们想从关闭的文件中提取或合并数据;但是,这是不可能的。有一种解决方法可以帮助解决此问题。解决方案是使用宏代码。

问题:我每天都花时间将数据从一个文件复制到另一个文件。有两个文件“ Open.xls”和“ Closed.xls”,我想通过VBA代码将数据从“ Closed.xls”复制到“ Open.xls”。

===

要了解的关键事项:

首先,我们应该知道关闭的工作簿的“ Usedrange”,即打开的工作簿中的“ Closed.xls”,例如“ Open.xls”我们可以在“ Open.xls”工作簿的“ Closed.xls”工作簿的Usedrange中使用IF函数,它将从“ Closed.xls”工作簿中提取数据*如果引用单元格为空白,则#N / A已放置到位。然后,使用specialcells方法,可以删除所有#N / A错误并将公式更改为值。首先,我们将保存两个Excel文件1)Open.xls 2)Closed.xls在路径“ D:\ Test”中文件夹”,下面是“ Closed.xls”工作簿的快照:

img1

要将数据从“ Closed.xls”文件自动保存到“ Open.xls”文件,我们需要按照以下步骤启动VB编辑器:单击“开发人员”选项卡。在“代码”组中,选择“ Visual Basic”。 *将以下代码复制到ThisWorkbook中(Closed.xls)

img2

  • 要提取“ Open.xls”中的数据,请在标准模块中复制以下代码

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, _

Cancel As Boolean)

'Put in the UsedRange Address of Sheet1 Closed.xls (this workbook)' --- Comment

Sheet2.Cells(1, 1) = Sheet1.UsedRange.Address

End Sub

img3

  • 在ThisWorkbook(Open.xls)中复制以下代码

Sub Importdata()

Dim AreaAddress As String

Sheet1.UsedRange.Clear

Sheet1.Cells(1, 1) = "= 'D:\Test Folder\" & "[Closed.xls]Sheet2'!RC"

AreaAddress = Sheet1.Cells(1, 1)

With Sheet1.Range(AreaAddress)

.FormulaR1C1 = "=IF('D:\Test Folder\" & "[Closed.xls]Sheet1'!RC="""",NA(),'D:\Test Folder\" & _

"[Closed.xls]Sheet1'!RC)"

On Error Resume Next

.SpecialCells(xlCellTypeFormulas, xlErrors).Clear

On Error GoTo 0

.Value = .Value

End With

End Sub

img4

现在,所有VBA代码都已设置好;我们需要做的就是打开文件名“ Open.xls”。以下是“ Open.xls”文件的快照:

Private Sub Workbook_Open()

Run "Importdata"

End Sub

img5

该代码不限于从A1.usedrange复制单元;该代码将选择起始范围,并且可以正常运行。这些文件可供下载,我们建议您去尝试一下。

img6

===

结论:使用VBA代码,我们可以自动执行数据提取任务,而无需打开目标工作簿,并且可以避免进行手动复制和粘贴。

如果您喜欢我们的博客,请在Facebook上与您的朋友分享。您也可以在Twitter和Facebook上关注我们。

rar icon

我们很高兴收到您的来信,请让我们知道我们如何改进,补充或创新我们的工作,并为您做得更好。写信给我们[email protected]