【发布时间】:2014-03-28 04:13:55
【问题描述】:
我有一个文件夹,里面有许多格式相同的 excel 文件。我修改了以下代码来确定日期并重新格式化,其中“i”根据第 2 列的最后一行确定范围内的单元格数。
Sub Test()
Dim i As Long
i = Sheet1.Cells(Rows.Count, 2).End(xlUp).Row
With Range("K3:K" & i)
.Formula = "=DATE(A3,G3,H3)"
.NumberFormat = "ddmmmyyyy"
End With
End Sub
我想对我文件夹中的所有工作簿执行此代码。我在stackoverflow上发现了以下问题:
Code for looping through all excel files in a specified folder, and pulling data from specific cells
它不会循环遍历我的所有文件,仅适用于我打开的第一个 excel 文件。 如何在文件夹中的所有工作簿中循环这段代码?以下是我目前所拥有的。
Sub Test()
Dim lCount As Long
Dim wbResults As Workbook
Dim wbCodeBook As Workbook
Dim i As Long
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Application.EnableEvents = False
On Error Resume Next
Set wbCodeBook = ThisWorkbook
With Application.FileSearch
.NewSearch
.LookIn = "C:\Test"
.FileType = msoFileTypeExcelWorkbooks
If .Execute > 0 Then
For lCount = 1 To .FoundFiles.Count
Set wbResults = Workbooks.Open(Filename:=.FoundFiles(lCount), UpdateLinks:=0)
i = wbResults.Worksheets("Sheet1").Cells(wbResults.Worksheets("Sheet1").Rows.Count, 2).End(xlUp).Row
With wbResults.Worksheets("Sheet1").Range("K3:K" & i)
.Formula = "=DATE(A3,G3,H3)"
.NumberFormat = "ddmmmyyyy"
End With
wbResults.Close SaveChanges:=False
Next lCount
End If
End With
On Error GoTo 0
Application.ScreenUpdating = True
Application.DisplayAlerts = True
Application.EnableEvents = True
End Sub
【问题讨论】:
-
从您的链接中,您可以看到这一行:
Set wbResults = Workbooks.Open(...。接下来你的步骤是i = wbResults.Worksheets("Sheet1").Cells(wbResults.Worksheets("Sheet1").Rows.Count, 2).End(xlUp).Row和With wbResults.Worksheets("Sheet1").Range("K3:K" & i) -
我已尝试进行更改,但它确实对我的工作簿进行了任何更改。工作簿的文件名作为工作表名称,我将其中 3 个更改为 sheet1 以查看是否是问题所在,但它仍然不起作用。我已附上我在主要问题中输入的代码。
-
可能是因为
wbResults.Close SaveChanges:=False- 你关闭了工作簿而不保存更改:) -
这是有道理的。它似乎根本没有运行代码。我打开了其中一个工作簿,运行时没有发生任何更改。顺便感谢您的帮助。
-
尝试删除
On Error Resume Next声明。你会得到一些错误吗?