Vba 创建将搜索工作簿并执行if-then-else的宏
我一直在努力做一个我就是弄不到的宏 我希望宏在使用if-then代码时搜索工作簿中的所有工作表 我希望if-then在C8范围内搜索一个值“no”,如果为true,我希望它返回工作表的名称 这是我现在拥有的,但它不起作用Vba 创建将搜索工作簿并执行if-then-else的宏,vba,excel,macros,Vba,Excel,Macros,我一直在努力做一个我就是弄不到的宏 我希望宏在使用if-then代码时搜索工作簿中的所有工作表 我希望if-then在C8范围内搜索一个值“no”,如果为true,我希望它返回工作表的名称 这是我现在拥有的,但它不起作用 使用Dave的代码进行更新: Sub NeedVolunteer() Set wsAddPatient = ThisWorkbook.Worksheets("Add Patient") With wsAddPatient For
使用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
也许吧
这将返回在中找到的工作表“否”的名称。为了简单起见,我只是在Sheet1的B8单元格中返回了它,如果您想在找到“否”的工作表上返回名称,请使用:Worksheets(wsnumber).range(“B8”)=wsnumber
而不是Worksheets(“Sheet1”).range(“B8”)=wsnumber
已添加
For Each ws In ActiveWorkbook.Worksheets
If ws.Range("C8") = "no" Then
ws.Range("B8") = ws.Name
End If
Next
也许吧
这将返回在中找到的工作表“否”的名称。为了简单起见,我只是在Sheet1的B8单元格中返回了它,如果您想在找到“否”的工作表上返回名称,请使用:Worksheets(wsnumber).range(“B8”)=wsnumber
而不是Worksheets(“Sheet1”).range(“B8”)=wsnumber
已添加
For Each ws In ActiveWorkbook.Worksheets
If ws.Range("C8") = "no" Then
ws.Range("B8") = ws.Name
End If
Next
你很接近,只是缺少一些代码。尝试一下:
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
你很接近,只是缺少一些代码。尝试一下:
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
如果未将范围(“C8”)
指定为属于工作表,则将使用activesheet
——因为您似乎没有更改工作表,这意味着您总是检查同一位置。这将为您排序问题,并将C8中任何“否”工作表的名称放入wsAddPatient.Cells(8,2)
请记住,如果有多张图纸具有此值,您将覆盖以前的任何结果。考虑改变
.Cells(8,2).Value = ws.Name
到
这将在单元格中留下一个尾随分号,但会留下一个与工作簿中的条件匹配的工作表名称的完整列表
如果未将范围(“C8”)
指定为属于工作表,则将使用activesheet
——因为您似乎没有更改工作表,这意味着您总是检查同一位置。这将为您排序问题,并将C8中任何“否”工作表的名称放入wsAddPatient.Cells(8,2)
请记住,如果有多张图纸具有此值,您将覆盖以前的任何结果。考虑改变
.Cells(8,2).Value = ws.Name
到
这将在单元格中留下一个尾随分号,但会留下一个与工作簿中的条件匹配的工作表名称的完整列表。hmm不接受代码wsaddpatient.cells(8,2),因为您在原始问题的
with
语句中有它,我想你在某个地方有一句话在读Set wsAddPatient=ThisWorkbook.Worksheets(“WhateVersheetyoumeans”)
?如果你有这个设置,你会得到什么错误?这就是我现在所有的代码:Sub-need志愿者()设置wsAddPatient=ThisWorkbook.Worksheets(“添加患者”),为ActiveWorkbook中的每个ws设置wsAddPatient.Worksheets(“添加患者”)。如果ws.Visible=xlSheetVisible和wsAddPatient.Cells(8,2)=“否”,则为。Cells(8,2).Value=.Cells(8,2).Value&ws.Name&“;”如果下一个End带有End Sub,则结束,但现在它没有执行任务。您是否尝试过使用F8
键单步执行进程本身?代码在我看来还可以,但是如果你把它作为对主要问题的编辑而不是评论发布,它会有所帮助:)我在主要评论中发布了它!感谢您完成此工作。它不接受代码wsaddpatient.cells(8,2),因为您在原始问题中的With
语句中有此代码,我假定您在某个地方有一个语句正在阅读Set wsaddpatient=ThisWorkbook.Worksheets(“Whateversheetyoumeans”)
?如果你有这个设置,你会得到什么错误?这就是我现在所有的代码:Sub-need志愿者()设置wsAddPatient=ThisWorkbook.Worksheets(“添加患者”),为ActiveWorkbook中的每个ws设置wsAddPatient.Worksheets(“添加患者”)。如果ws.Visible=xlSheetVisible和wsAddPatient.Cells(8,2)=“否”,则为。Cells(8,2).Value=.Cells(8,2).Value&ws.Name&“;”如果下一个End带有End Sub,则结束,但现在它没有执行任务。您是否尝试过使用F8
键单步执行进程本身?代码在我看来还可以,但是如果你把它作为对主要问题的编辑而不是评论发布,它会有所帮助:)我在主要评论中发布了它!感谢您完成此工作工作簿中的工作表如何命名?如果它们不被称为Sheet1、Sheet2,那么它就不起作用了……它们都标有名称。例如,史密斯。约翰,这改变了一切:看看我添加的代码。它应该会帮助您它不会返回错误,但不会给出任何结果。它会在工作表的B8单元格中显示结果。如果您希望在其他位置获得结果,请将ws.Range(“B8”)=ws.name
更改为其他内容。示例:MsgBox(“找到时间:”&ws.Name)
工作簿中的工作表是如何调用的?如果它们不被称为Sheet1、Sheet2,那么它就不起作用了……它们都标有名称。例如,史密斯。约翰,这改变了一切:看看我添加的代码。它应该会帮助您它不会返回错误,但不会给出任何结果。它会在工作表的B8单元格中显示结果。如果您希望在其他位置获得结果,请将ws.Range(“B8”)=ws.name
更改为其他内容。示例:MsgBox(“在:&ws.Name上找到)
.Cells(8,2).Value = .Cells(8,2).Value & ws.Name & ";"