【发布时间】:2018-12-03 12:51:16
【问题描述】:
抱歉,如果这已经发布了 - 我找不到特定于 Excel 的内容(同样对于我糟糕的代码,我对 VBA 的经验很差)。
我正在尝试将多个文件整理到一个工作簿中,在不同的工作表下。其中大部分都在工作 - 但在 If Else 语句中,如果满足条件,则循环中断,而不是继续处理文件夹中的其余文件。 Else 部分确实循环。我认为Do While filename <> "" 会覆盖 if/then 语句。
仅仅添加“And Loop”(我猜这不是有效的代码)对我不起作用,所以我不知道应该添加什么,或者我是否应该以另一种方式解决这个问题。
感谢您的帮助!
Sub AllFiles()
Dim folderPath As String
Dim filename As String
Dim wb As Workbook
Dim master As Workbook
Set master = ThisWorkbook
folderPath = "C:\Users\Charmaine\Documents\Excel Files"
master.Activate
If Right(folderPath, 1) <> "\" Then folderPath = folderPath + "\"
filename = Dir(folderPath & "*.xlsm")
Do While filename <> ""
Application.ScreenUpdating = False
Set wb = Workbooks.Open(folderPath & filename)
Set wb = ActiveWorkbook
ActiveSheet.Range("F1:G242").Select
Selection.Copy
master.Activate
ActiveSheet.Paste
ActiveCell.Offset(0, 2).Select
wb.Activate
ActiveWorkbook.Saved = True
Application.CutCopyMode = False
ActiveWindow.Close
filename = Dir
If ActiveSheet.Range("R1") = "C3" Then Sheets.Add.[after].Name = valuenewsheet Else
Loop
Application.ScreenUpdating = True
End Sub
【问题讨论】:
-
... valuenewsheet Else最后应该没有那个Else。 -
是的,如果您删除
Else,那么无论如何都会触发循环。IfThen语句只是在满足条件时添加一个新工作表。 -
我试过这个,但在制作新工作表后出现“运行时错误'424':需要对象”错误。
-
当你的循环结束
If语句正在评估它时,valuenewsheet的值是多少?它在Sub中未声明,因此它要么是全局的,要么您没有在模块顶部使用Option Explicit。如果您不使用Option Explicit,那是您的第一步——它可以防止您错误输入变量名。如果你这样做了,VBA 会“有帮助地”为你声明一个新的空变量...... -
另外,1 行
If... Then... Else语句有点难以阅读。这是一种风格的东西,VBA 允许它们都在一条线上,但它相当不常见,需要更多的精力去思考,并且需要更多的横向滚动阅读(正如您在发布的代码中所指出的那样)。