gpt4 book ai didi

excel - 条件 `if()` 在嵌套循环中不起作用

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

我在两个工作簿中循环工作表。如果两本书中都有匹配的工作表,我将一定范围从一本书转移到另一本书。 (这在下面被注释掉了。)

我还在跟踪哪张工作表出现在一本书中,而不是另一本书(导致没有转移),这是我遇到问题的地方。我只对包含“-”的工作表感兴趣,并将我的收藏放在有条件的范围内,但仍会添加不包含“-”的工作表。

我认为问题出在外循环?它不会在内部添加,但是当外部再次出现时,它会触发 .add ?所以也许一个更好的问题是,循环测试匹配工作表的逻辑是什么?

For Each ws In lastWB.Worksheets

Set lastWS = ws
lastName = lastWS.Name

For Each s In ThisWorkbook.Worksheets

If InStr(1, s.Name, "-") Then
If s.Name = lastName And s.Range("C3").Value <> "5860" Then
Debug.Print lastName
's.Range("C14:O48").Value = lastWS.Range("C14:O48").Value
Else
skippedAct.Add lastName 'still adding sheets that do not contain "-"
End If
End If

Next

Next

最佳答案

您的嵌套循环可能令人困惑,我认为这是您的问题的根源,如 OP 评论中所述:您正在添加 lastName收藏 Instr返回 False ,但是因为您正在检查 lastWB 中的每张纸针对ThisWorkbook 中的每张纸,你会得到意想不到的结果。

这将是使用自定义函数的好地方:

Function SheetExists(sName as String, wb as Workbook)
'Function which will check the presence of a sheet in a given workbook
Dim ret
On Error Resume Next
Set ret = wb.Worksheets(sName)

SheetExists = (Err.Number = 0)
End Function

摆脱嵌套循环,只需执行 For each s in ThisWOrkbook.Worksheets ,像这样:
   For Each s In ThisWorkbook.Worksheets

If InStr(1, s.Name, "-") Then
If SheetExists(s.Name, lastWB) And s.Range("C3").Value <> "5860" Then
s.Range("C14:O48").Value = lastWB.Worksheets(s.Name).Range("C14:O48").Value
Else
skippedAct.Add s.Name 'still adding sheets that do not contain "-"
End If
End If

Next

关于excel - 条件 `if()` 在嵌套循环中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32379252/

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