【发布时间】:2021-01-29 22:39:02
【问题描述】:
我编写了以下代码,以便对已关闭工作簿中的指定列求和。
我的汇总表在 B 列中包含文件位置/名称,在 C 列中求和列位置,在 D 列中将列字母转换为数字,然后在 E 列中包含总金额。
我目前有大约 50 个工作簿需要从中提取数据,因此我创建了一个循环,首先测试文件是否存在(文件名每天更改并且每天在不同时间可用),如果文件存在,然后它打开工作簿并对该工作簿的指定列求和,将该总和放在摘要表 E 列中,然后关闭工作簿,然后移动到下一行。运行需要一段时间,而且由于你们中的很多人在编码方面比我要好得多,我想知道是否/如何让这个运行更优化。非常感谢任何帮助。
这是我当前的代码:
Sub GetClosedPNL2()
Application.ScreenUpdating = False
Dim wbBook1 As Workbook: Set wbBook1 = ThisWorkbook
Dim src As Workbook
Dim lCol As Integer
Dim LastRow As Long
Dim DataRange As Range
Dim Cll As Range
Dim strFileName As String
Dim strFileExists As String
LastRow = Sheets("AccountMap").Cells(Sheets("AccountMap").Rows.Count, "B").End(xlUp).Row
Set DataRange = Sheets("AccountMap").Range("B2:B" & LastRow)
For Each Cll In DataRange
strFileName = (Cll.Value)
strFileExists = Dir(strFileName)
If strFileExists = "" Then
GoTo Line2
Else
GoTo Line1
Line1:
Set src = Workbooks.Open(Cll.Value, ReadOnly:=True)
lCol = Cll.Offset(0, 2).Value
Cll.Offset(0, 3) = Application.Sum(src.Sheets(1).Columns(lCol))
src.Close False
Set src = Nothing
Line2:
Next Cll
End Sub
【问题讨论】:
-
您可以在工作表上使用
SUM公式来引用外部文件。 -
这里完全没有必要使用
GoTo。 -
从其他工作簿获取数据的最快方法是使用 ADO DB 连接,如 this thread
-
源工作簿中的工作表名称 (
src.Worksheets(1)) 是否始终相同?如果有,它的名字是什么?它是 GSerg 建议的解决方案所必需的最终成分。 -
@HackSlash:感谢您提供的链接以及在那里找到的其他链接。