我一直在努力研究一个我无法得到的宏。
我希望宏在使用if then代码时搜索工作簿中的所有工作表。
我希望if然后在范围C8中搜索值“no”,如果为true,我希望它返回工作表的名称。
这就是我现在所拥有的,但它不起作用。
With wsAddPatient
For Each ws In Active.Workbook.Worksheets
If ws.Visible = xlSheetVisible And Range("C8") = "No" Then
.Cells(8, 2).Value = ws.Name
End If
使用Dave的代码进行更新:
Sub NeedVolunteer()
Set wsAddPatient = ThisWorkbook.Worksheets("Add Patient")
With wsAddPatient
For Each ws In ActiveWorkbook.Worksheets
If ws.range("C8").Value = "No" Then
.Cells(8, 2).Value = .Cells(8, 2).Value & ws.Name & ";"
End If
Next
End With
End Sub
这有效!
决赛:
Sub NeedVolunteer()
Set wsAddPatient = ThisWorkbook.Worksheets("Add Patient")
Dim ws As Worksheet
Dim lRow As Long
iRow = 8
With wsAddPatient
For Each ws In ActiveWorkbook.Worksheets
If ws.Range("C8").Value = "No" Then
.Cells(iRow, 2).Value = ws.Name
iRow = iRow + 1
End If
Next
End With
End Sub
答案 0 :(得分:0)
也许
Dim wsNumber as String
Dim i as Integer
For i = 1 to 10 'change 10 to the Number of Sheets you want to check
wsNumber = "Sheet" & i
If Worksheets(wsNumber).Range("C8") = "no" then
Worksheets("Sheet1").Range("B8") = wsNumber
End If
Next i
这将返回工作表的名称" no"已经找到了。为了保持简单,我只是在Sheet1的单元格B8中返回它,如果你想在Sheet上返回名称" no"已被发现使用:Worksheets(wsnumber).range("B8") = wsNumber
代替Worksheets("Sheet1").Range("B8") = wsNumber
。
<强> ADDED 强>
For Each ws In ActiveWorkbook.Worksheets
If ws.Range("C8") = "no" Then
ws.Range("B8") = ws.Name
End If
Next
答案 1 :(得分:0)
你关闭了,只是遗漏了一些代码。试一试:
For Each ws In ActiveWorkbook.Worksheets
If ws.Visible = xlSheetVisible And Range("C8") = "No" Then
ws.Cells(8, 2).Value = ws.Name
End If
Next ws
答案 2 :(得分:0)
With wsAddPatient
For Each ws In ActiveWorkbook.Worksheets
If ws.Visible = xlSheetVisible And ws.Range("C8") = "No" Then
.Cells(8, 2).Value = ws.Name
End If
Next
End With
如果您未指定range("C8")
属于工作表,则会使用activesheet
- 因为您似乎没有更改工作表,这意味着您始终在检查同一个地方。这应该为您排序问题,并将C8中任何带有“否”的工作表的名称放入wsAddPatient.Cells(8,2)
请记住,如果有多个具有此值的工作表,您将覆盖以前的任何结果。考虑改变
.Cells(8,2).Value = ws.Name
到
.Cells(8,2).Value = .Cells(8,2).Value & ws.Name & ";"
这将在单元格中留下一个尾随的分号,但是在工作簿中符合您条件的工作表名称的完整列表。