Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.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
Excel 使用VBA循环浏览具有特定名称的图纸_Excel_Vba_Worksheet - Fatal编程技术网

Excel 使用VBA循环浏览具有特定名称的图纸

Excel 使用VBA循环浏览具有特定名称的图纸,excel,vba,worksheet,Excel,Vba,Worksheet,我试图构建一个宏来运行一个文件,并为每个名为“file-n”的工作表打开一个userform,其中n是一个整数。我尝试过此代码,但不起作用: Dim WS As Worksheet Dim indx As Integer For Each WS In ThisWorkbook.Worksheets WS.Activate If WS.Name = "File-" & indx Then WS.Select userform1.show

我试图构建一个宏来运行一个文件,并为每个名为“file-n”的工作表打开一个userform,其中n是一个整数。我尝试过此代码,但不起作用:

Dim WS As Worksheet
Dim indx As Integer

For Each WS In ThisWorkbook.Worksheets
    WS.Activate

    If WS.Name = "File-" & indx Then
        WS.Select
        userform1.show
    End If

Next WS
此宏无法识别任何图纸。下面的代码是有效的,但我希望如果可能的话能把它清理干净。我不喜欢列出多达30张的潜在数量

If WS.Name = "File-0" or WS.Name = "File-1" or WS.Name = "File-2" or ... Then

为indx再添加一个循环

Dim WS As Worksheet
Dim indx As Integer
For i = 1 to 30
    indx  = i
For Each WS In ThisWorkbook.Worksheets
    WS.Activate
    If WS.Name = "File-" & i Then
       userform1.show
    End If
Next WS
Next i

为indx再添加一个循环

Dim WS As Worksheet
Dim indx As Integer
For i = 1 to 30
    indx  = i
For Each WS In ThisWorkbook.Worksheets
    WS.Activate
    If WS.Name = "File-" & i Then
       userform1.show
    End If
Next WS
Next i

您可以像@BigBen在评论中提到的那样使用
Like
,也可以像下面那样使用
Instr

Option Explicit
Sub test()

Dim WS As Worksheet
Dim indx As Integer

For Each WS In ThisWorkbook.Worksheets
    WS.Activate

    If InStr(1, LCase(WS.Name), "file") Then
        WS.Select
        UserForm1.Show
    End If

Next WS

End Sub

您可以像@BigBen在评论中提到的那样使用
Like
,也可以像下面那样使用
Instr

Option Explicit
Sub test()

Dim WS As Worksheet
Dim indx As Integer

For Each WS In ThisWorkbook.Worksheets
    WS.Activate

    If InStr(1, LCase(WS.Name), "file") Then
        WS.Select
        UserForm1.Show
    End If

Next WS

End Sub

看看下面的代码是否有用

Dim WS As Worksheet

For Each WS In ThisWorkbook.Worksheets
    WS.Activate
    If WS.Name Like "File-*" Then
        WS.Select
        userform1.show
    End If
Next WS

看看下面的代码是否有用

Dim WS As Worksheet

For Each WS In ThisWorkbook.Worksheets
    WS.Activate
    If WS.Name Like "File-*" Then
        WS.Select
        userform1.show
    End If
Next WS

可能是一个更容易的方法-你有任何一个名字从“代码>文件”开始的文件“< /代码>,你不想考虑吗?@ BigBo.No,所有的文件名为“文件”在这种情况下都是相关的,然后只使用<代码> ISTR < /代码>(见张贴的答案),“或代码< >左< /代码>。尽量避免<代码>。激活< <代码> >代码>如果用户不明确需要,请选择< /代码> -C.F可能是一个更容易的方法-是否有任何以“代码>开始”的文件-“< <代码> >,您不想考虑?@ BigBo.No,所有名为“文件”的表。在这种情况下是相关的。然后只需使用
InStr
(参见张贴的答案)或
Left
偶数。尽量避免
。激活
。如果用户通信没有明确需要,请选择
-c.f。这会将每个工作表与增量indx编号进行比较,所以我怀疑它会像预期的那样工作…@Xabier谢谢你指出这一点。我知道错在哪里了!我已经更正了代码。这会将每个工作表与增量indx编号进行比较,因此我怀疑它是否会像预期的那样工作…@Xabier感谢您指出这一点。我知道错在哪里了!我已经更正了代码。如果要执行此方法,则外部循环应该是工作表循环,内部循环应该是
I
。但是它的效率非常低,而且还有更好的方法。如果你采用这种方法,那么外部循环应该是工作表循环,而内部循环应该是
i
。但是这是非常低效的,还有更好的方法。