我有以下工作表
原始>标题>项目1>项目2>关闭
代码跳过工作表"Raw"one_answers"Title",只需使用"if ws is not"即可。它在"项目1"one_answers"项目2"上运行得很好,但不知何故,"内部for循环和内部if"也在"关闭"上运行。
内部循环中的vlookup部分运行在"关闭"上,我的目标不是这样。我希望内部代码只在"项目1"one_answers"项目2"上运行。
请帮忙。
代码:
' some variable declations above...
' some variable declations above...
Set ws_raw = ThisWorkbook.Worksheets("Raw")
Set ws_title = ThisWorkbook.Worksheets("Title")
Set ws_closing = ThisWorkbook.Worksheets("Closing")
With ws_raw
int_last_row_of_raw = .Cells(.Rows.Count, 1).End(xlUp).Row
int_last_col_of_raw = 4
Set rng_raw = .Range("A2", .Cells(int_last_row_of_raw, int_last_col_of_raw))
End With
For Each ws In ThisWorkbook.Worksheets
If Not ws Is ws_raw _
Or Not ws Is ws_title _
Or Not ws Is ws_closing Then
project_name = ws.Range("B1").Value
int_last_row_of_ws = 13
For int_current_row_of_ws = 4 To int_last_row_of_ws
cell_value = ws.Cells(int_current_row_of_ws, 1).Value
If cell_value = "Concept Stage" Or cell_value = "Development Stage" Or cell_value = "Implementation Stage" Then
stage_name = cell_value
With rng_raw
.AutoFilter 1, project_name
.AutoFilter 2, stage_name
End With
Set rng_filtered_raw = ws_raw.Range("C3", ws_raw.Cells(int_last_row_of_raw, int_last_col_of_raw)).SpecialCells(xlCellTypeVisible)
Else
If Not rng_filtered_raw Is Nothing Then
MsgBox (project_name & ": " & cell_value)
ws.Cells(int_current_row_of_ws, 2).Value = Application.WorksheetFunction.VLookup(cell_value, rng_filtered_raw, 2, False)
End If
End If
Next int_current_row_of_ws
End If
Next ws
MsgBox ("before first autofilter toggle")
rng_raw.AutoFilter ' Toggle off AutoFilter
MsgBox ("before second autofilter toggle")
rng_raw.AutoFilter ' Toggle on AutoFilter with no criteria
您已经使用了OR
逻辑。AND
逻辑在这里更有意义,当你试图说它一定不是它们中的任何一个时。
在我看来,不看代码的其余部分,你就有两个选择:
-
如果您不打算在工作表上展开,并且只需要在"项目1"one_answers"项目2"上运行内部
For
循环,只需更改为:If ws.Name = "Project 1" Or ws.Name = "Project 2" Then
-
如果你计划继续这样处理排除的工作表,只需将
OR
更改为AND
逻辑:If Not ws Is ws_raw _ And Not ws Is ws_title_page _ 'Notice you made a typo here! And Not ws Is ws_closing Then
编辑
1(为什么OR
逻辑在您的情况下不起作用:
让我们保持这个非常基本的:如果你有一个苹果,你正在检查它是否是:
-
与梨不同(此返回
True
( -
是否与香蕉相同(此返回
True
( -
是否与苹果相同(此返回
False
,完全相同(
现在,OR
逻辑的作用是:"这三个比较中是否返回了任何True
?"如果答案是肯定的,则继续执行内部代码。
2(为什么AND
逻辑在您的情况下有效:
让我们保持这个非常基本的:如果你有一个苹果,你正在检查它是否是:
-
与梨不同(此返回
True
( -
而不是与香蕉相同(此返回
True
( -
而不是与苹果相同(此返回
False
,完全相同(
现在,AND
逻辑的作用是:">所有三个比较都返回True
吗?"如果答案是肯定的,则继续执行内部代码。