Я обнаружил, что если бы я использовал Select Case и ws Name вместо i и добавил «For Each ws ..» перед каждым Select Case, он работает и работает очень быстро. Возможно, не самый элегантный, но эффективный.
Sub comfor()
Dim daily As Worksheet, mon As Worksheet, per As Worksheet, surf As Worksheet
Dim ws As Worksheet, cell As Range
Set daily = Sheets("Daily")
Set per = Sheets("Personnel")
Set surf = Sheets("Testing")
Set mon = Sheets("Monthly")
For Each ws In ActiveWorkbook.Sheets
Select Case ws.Name
Case "Daily", "Monthly"
For Each cell In ws.Range(("A6"),_
ws.Range("A6").SpecialCells(xlLastCell)).Cells
If cell.Text = "" Then
cell.Value = "T"
cell.Font.Color = vbRed
cell.Value = "T"
cell.Font.Name = "Wingdings 2"
End If
Next
End Select
Next
For Each ws In ActiveWorkbook.Sheets
Select Case ws.Name
Case "Personnel", "Testing"
For Each cell In ws.Range(("A6"), ws.Range("A6").SpecialCells(xlLastCell)).Cells
If cell.Text = "" Then
cell.Value = "p"
cell.Font.Color = RGB(255, 192, 0)
cell.Value = "p"
cell.Font.Name = "Wingdings 3"
End If
Next
End Select
Next
For Each ws In ActiveWorkbook.Sheets
Select Case ws.Name
Case "Daily", "Monthly", "Personnel", "Testing"
For Each cell In ws.Range(ws.Range("A6"),_
ws.Range("A6").SpecialCells(xlLastCell)).Cells
With cell
.HorizontalAlignment = xlCenter
End With
With cell
.Borders(xlInsideVertical).Weight = xlThin
.Borders(xlInsideHorizontal).Weight = xlThin
.Borders(xlEdgeLeft).Weight = xlMedium
.Borders(xlEdgeTop).Weight = xlMedium
.Borders(xlEdgeBottom).Weight = xlMedium
.Borders(xlEdgeRight).Weight = xlMedium
End With
If cell.Text = "Incomplete" Then
cell.Font.Color = vbRed
cell.Value = "T"
cell.Font.Name = "Wingdings 2"
ElseIf cell.Text = "Not Applicable" Then
cell.Name = "Webdings"
cell.Value = "x"
cell.Font.Color = RGB(255, 192, 0)
ElseIf cell.Text = "Complete" Then
cell.Font.Color = 5287936
cell.Value = "R"
cell.Font.Name = "Wingdings 2"
End If
Next
End Select
Next
End Sub