Excel vba循环遍历包含第一个字母M的所有工作表

Excel vba循环遍历包含第一个字母M的所有工作表,excel,vba,excel-formula,excel-2010,Excel,Vba,Excel Formula,Excel 2010,我一直在尝试循环一个特定的表号,我有20张表,都是从M开始的,比如M1,M2等等,直到M20,我的问题是我在循环和写作,但我不是只在M表上写,而是在所有的表上写 Sub CountWSNames() Dim I As Long Dim xCount As Integer For I = 1 To ActiveWorkbook.Sheets.Count If Mid(Sheets(I).Name, 1, 1) = "M" Th

我一直在尝试循环一个特定的表号,我有20张表,都是从M开始的,比如M1,M2等等,直到M20,我的问题是我在循环和写作,但我不是只在M表上写,而是在所有的表上写

Sub CountWSNames()
        Dim I As Long
        Dim xCount As Integer
        For I = 1 To ActiveWorkbook.Sheets.Count
            If Mid(Sheets(I).Name, 1, 1) = "M" Then xCount = xCount + 1

            ThisWorkbook.Worksheets(I).Range("A50") = "V" 'This line must write only to M sheets
        Next
        MsgBox "There are " & CStr(xCount) & " sheets that start with 'M'", vbOKOnly, "KuTools for Excel"
    End Sub
一段类似于我的代码

ThisWorkbook.Worksheets(I).Range("A50") = "V"
该行只能影响以M开头的纸张上的单元格(“A50”)。

您可以对每个单元格使用

For each sht in ActiveWorkbook.Sheets
    If Mid(sht.Name, 1, 1) = "M" Then 
        xCount = xCount +1
        sht.Range("A50") = "V" 'This line must write only to M sheets
    End if
Next

如果不关心工作表计数,只想向这些工作表写入一个值,则需要将这两个语法都包装在
中,然后可以使用:

Sub WriteToMSheets()
    Dim ws as Worksheet
    For Each ws in Thisworkbook.Worksheets
        If Ucase(Left(ws.Name,1)) = "M" Then ws.Range("A50").Value = "V"
    Next ws
End Sub

可能不是问题,但这将包括名为“我自己的工作表”的工作表,因为您将第一个字母大写。次要问题:为什么
MID(工作表(I).Name,1,1)
而不是
LEFT(工作表(I).Name,1)