gpt4 book ai didi

excel - 循环遍历所有打开的工作簿时,代码在一个工作簿后退出循环

转载 作者:行者123 更新时间:2023-12-04 22:27:49 25 4
gpt4 key购买 nike

我想遍历所有打开的 Excel 工作簿,以确定要在哪个工作簿上执行操作。问题是,代码在事件工作簿之后退出 for 循环并返回“Nothing”,无论我打开了多少工作簿。

我需要每周运行此例程,以将工作时间从下载的 Excel 工作簿转移到备用工作簿中。文件名称每周更改,但始终以“时间表”开头

从一月到四月,我每周都使用这个程序,没有任何问题。我今天尝试使用它,但出现了这个问题。我已经在几台具有不同操作系统(Windows 7、Windows 10)的不同计算机上使用了该例程。

我已保存、关闭并重新打开要激活的工作簿,但无济于事。我不想每周都更改代码来访问特定的工作簿,而是使用文件名中的前 4 个字母来标识要对其执行操作的文件。

Sub cmdImportHours_Click()

Dim ThisWB As Workbook
Dim ImportWB As Workbook
Dim WB As Workbook
Dim msg1 As String
Dim msg As Variant

' more variables

msg1 = "Required file not found. Open the import file and try again."

Set ThisWB = ThisWorkbook
ThisWB.Worksheets("Hours").Activate

'The following loop exits after one iteration (the active workbook),
'regardless of how many workbooks are open

For Each WB In Workbooks
If Left(WB.Name, 4) = "Time" Then
WB.Activate
Exit For
End If
Next WB

If WB Is Nothing Then
msg = MsgBox(msg1, vbOKOnly)
Exit Sub
End If

'more code

End Sub

我希望循环查看每个打开的 Excel 工作簿的名称,但它仅在查看事件工作簿后退出 For 循环。

最佳答案

您的 For Each over all workbooks 直接返回一个可用的变量,它引用了想要的工作簿,所以你甚至可以在这里使用变量“ImportWB”。通过 Exit For 退出循环,如果您找到了所需的项目,这是一种很好的做法。

我为工作表引入了两个变量,以将它们用于复制操作。

Sub cmdImportHours_Click()
Dim ImportWB As Workbook
Dim SourceSheet As Worksheet, DestSheet As Worksheet
Dim msg1 As String
Dim msg As Variant

For Each ImportWB In Workbooks
If Left(ImportWB.Name, 4) = "Time" Then Exit For
Next ImportWB

If ImportWB Is Nothing Then
msg1 = "Required file not found. Open the import file and try again."
msg = MsgBox(msg1, vbCritical + vbOKOnly, "Workbook not open")
Exit Sub
End If

Set DestSheet = ThisWorkbook.Worksheets("Hours")
'DestSheet.Activate is typically not necessary
Set SourceSheet = ImportWB.Sheets(1)

DestSheet.Range("A2:B10").Value = SourceSheet.Range("A2:B10").Value
' more code
End Sub

ThisWorkbook总是相同的(带有您的 VBA 代码的工作簿),没有必要给它一个额外的变量,我省略了它。

如果您没有通过上述代码获得已经打开的工作簿,那么它要么在 protected View 中打开......
For i = 1 To Application.ProtectedViewWindows.Count
Debug.Print "Protected Workbook: " & _
Application.ProtectedViewWindows(i).Workbook.Name
Next i

...或在另一个 Excel 实例中。在这种情况下,您可以通过 e 引用它。 G。
Set ImportWB = GetObject("Path\Filename.xlsx")

here有关更多示例。

关于excel - 循环遍历所有打开的工作簿时,代码在一个工作簿后退出循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56214746/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com