我需要一个 Excel 宏,它可以从多个工作簿中提取特定单元格数据并更新另一个工作簿的特定单元格,并按照文件在文件夹中的顺序填写单元格。
我已经建立了一个非常简单的宏,它可以满足我的大部分需求,但是每次更新时我都会有一个新文件名,并且我必须保留该文件的所有以前的副本。
有人能帮我吗?
Sub Test_Macro()
'
' Test_Macro Macro
'
' Keyboard Shortcut: Ctrl+Shift+P
Selection.End(xlDown).Select
Selection.End(xlDown).Select
Selection.End(xlDown).Select
Selection.End(xlToRight).Select
ActiveCell.Range("A1:A33").Select
Selection.AutoFill Destination:=ActiveCell.Range("A1:B33"), Type:= _
xlFillDefault
ActiveCell.Range("A1:B33").Select
ActiveCell.Offset(1, 1).Range("A1:A32").Select
Selection.Replace What:="[36 DRD BP-04_Apr 14.xlsx]", Replacement:= _
"[37 DRD BP-04_May 14.xlsx]", LookAt:=xlPart, SearchOrder:=xlByRows, _
MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
Selection.End(xlUp).Select
Selection.End(xlUp).Select
Selection.End(xlToLeft).Select
End Sub
答案1
在 SuperUser 上,我们不会为您编写代码或为您思考,因此您需要学习如何使用 VBA 进行实际编程,而不是仅仅录制宏并希望它能为您完成所有工作。您要做的事情涉及使用一些简单的 API。由于您似乎不知道这些 API 是什么,让我为您指出它们。
- 您需要使用
FileSystemObject
目的列出包含要打开的文件的目录的内容。 - 首先获取
Folder
包含您需要处理的文件的对象;可以使用获取文件夹方法FileSystemObject
。 - 您
Folder
可以获得一个集合(可以使用For Each
) 的Files
在文件夹内。 - 您需要使用
Excel.Application
目的获取一个实例Workbook
目的对于要打开的每个文件名,使用Workbooks
集合(具体来说,Application.Workbooks.Open
)。 - 然后,您可以
Workbook
根据需要使用对每个特定对象的引用执行单元格级数据处理,并Close
在完成后对每个工作簿进行处理。 - 对于细胞层面的处理,你需要深入研究
Worksheets
您拥有的工作簿,例如,wb.Worksheets(1)
如果工作簿中只有一个工作表,并且它是您想要读取的工作表(假设您的Workbook
对象已分配给变量wb
)。 - 请记住,这
Selection
是多态的Range
;与选择要处理的每个单元格相比,处理代码要快得多,也容易得多,例如,ws.Cells(1,2).Value
获取工作表中 指向的单元格 A2 的值ws
。记住这种多态性的价值在于,您可以将现有的记录调用替换为或类似的Selection
调用ws.Cells
。只需跟踪“光标”(例如,您知道是数据开头的单元格)并使用该Offset
方法获取相对于它的单元格。
祝你好运!
授人以渔
每当您不确定任何特定对象的 API 语义时,即使您没有在 VBA 编辑器中获得代码完成菜单,您仍然可以按F2调出对象浏览器,它将显示您引用的所有对象的 API(其中包括整个 Excel COM API)。
您还可以谷歌搜索“msdn whatever excel”,其中whatever
是您要查找的对象类型或方法名称,然后您就会直接进入 MSDN 上的 API 列表。
确保使用Set
将对象类型分配给变量!:)