Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 创建将搜索工作簿并执行if-then-else的宏_Vba_Excel_Macros - Fatal编程技术网

Vba 创建将搜索工作簿并执行if-then-else的宏

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

我一直在努力做一个我就是弄不到的宏

我希望宏在使用if-then代码时搜索工作簿中的所有工作表

我希望if-then在C8范围内搜索一个值“no”,如果为true,我希望它返回工作表的名称

这是我现在拥有的,但它不起作用


使用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 & ";"