如何继续循环vba

Posted

技术标签:

【中文标题】如何继续循环vba【英文标题】:How to continue loops vba 【发布时间】: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,那么无论如何都会触发循环。 If Then 语句只是在满足条件时添加一个新工作表。 我试过这个,但在制作新工作表后出现“运行时错误'424':需要对象”错误。 当你的循环结束 If 语句正在评估它时,valuenewsheet 的值是多少?它在 Sub 中未声明,因此它要么是全局的,要么您没有在模块顶部使用 Option Explicit。如果您不使用Option Explicit,那是您的第一步——它可以防止您错误输入变量名。如果你这样做了,VBA 会“有帮助地”为你声明一个新的空变量...... 另外,1 行 If... Then... Else 语句有点难以阅读。这是一种风格的东西,VBA 允许它们都在一条线上,但它相当不常见,需要更多的精力去思考,并且需要更多的横向滚动阅读(正如您在发布的代码中所指出的那样)。 【参考方案1】:
Do
'code
Loop While filename <> 

有趣的是,当未满足 While 语句时,我遇到了 do while 循环退出的问题。将 While 语句转移到 Loop 语句之后对我有用。

【讨论】:

我也试过了,但添加新工作表后它也不起作用,出现同样的错误。这部分有什么问题吗? "Sheets.Add.[after].Name = valuenewsheet" 这种方法的唯一问题是它假定至少有一个 filename 存在,如果不存在就会在Set wb = Workbooks.Open(folderPath &amp; filename) 上炸毁。 我看不到您在哪里填充变量“valuenewsheet”,我假设这是导致错误的原因。 @TimStack that's what he said... :) 我永远不会因为别人的解决方案而获得功劳!【参考方案2】:

谢谢大家。 我最终将最后一行更改为

ActiveWorkbook.Sheets.Add After:=Worksheets(Worksheets.Count)

我认为“valuenewsheet”意味着它会计算下一个可用的工作表名称,但似乎是多余的。

【讨论】:

以上是关于如何继续循环vba的主要内容,如果未能解决你的问题,请参考以下文章

vba十万刚数据遍历怎么快

excel 运行VBA效率变低了 原来excel运行VBA程序,很快就执行完毕,现在运行相同的程序,效率变得很慢

VBA 循环遍历界面获取CheckBox 选中状态,并返回CheckBox.Text上的内容

VBA - 如何有条件地跳过for循环迭代

如何在 VBA 中结束 do while 循环

VBA如何循环?