2016-11-25 3 views
1

Я хочу, чтобы на листе рабочих листов в рабочей книге был пропущен первый лист, а также некоторое форматирование, но я хочу, чтобы этот код vba пропускал первый рабочий лист (имя может отличаться, но всегда будет первым). Таким образом, вопрос в том, как я должен это делать?Пропустить первый рабочий лист книги в VBA

Sub ex2() 
    Dim kl As Worksheet 
    Dim Ws_Count As Integer 
    Dim a As Integer 
    Ws_Count = ActiveWorkbook.Worksheets.Count 
    For a = 2 To Ws_Count 

     With Rows("2:2") 
      .RowHeight = 20 
      .Interior.Color = RGB(150, 250, 230) 
     End With 
     With Range("B2") 
      .Value = "Sheet Number" & " " & a 
      .Font.Size = 12 
      .Font.Bold = True 
      .Font.Underline = True 
     End With 
    Next a 
End Sub 
+0

проверить мой код мой ответ ниже - это 95% ваш –

ответ

1

Ваш код был хорошим, вы только пропустить одну строку, проверяя текущий лист kl.Index.

код

Option Explicit 

Sub ex2() 

    Dim kl As Worksheet 

    For Each kl In Worksheets 
     ' not the first worksheet 
     If kl.Index > 1 Then 

      With kl.rows("2:2") 
       .RowHeight = 20 
       .Interior.Color = RGB(150, 250, 230) 
      End With 
      With kl.Range("B2") 
       .Value = "Sheet Number" & " " & kl.Index - 1 
       .Font.Size = 12 
       .Font.Bold = True 
       .Font.Underline = True 
      End With 
     End If 
    Next kl 

End Sub 
+0

Большое спасибо! – Mroweczka

+0

@ Mroweczka приветствую :) –

1

Попробуйте это:

Sub ex2() 

Dim Ws_Count As Integer 
Dim a As Integer 


Ws_Count = ActiveWorkbook.Worksheets.Count 

For a = 2 To Ws_Count 
    With Worksheets(a) 
    'rest of your code 
    End With 
Next a 
End Sub 

С отправленного кода, конечный результат будет:

Sub ex2() 
    Dim Ws_Count As Integer 
    Dim a As Integer  


    Ws_Count = ActiveWorkbook.Worksheets.Count 

    For a = 2 To Ws_Count 
     With Worksheets(a) 

     Worksheets(a).Activate 
     With Rows("2:2") 
      .RowHeight = 20 
      .Interior.Color = RGB(150, 250, 230) 
     End With 
     With Range("B2") 
      .Value = "Sheet Number" & " " & worksheets(a).Index - 1 
      .Font.Size = 12 
      .Font.Bold = True 
      .Font.Underline = True 
     End With 
    Next a 
End Sub 
+0

Не работает номер с первого. С не сильно меняется. – Mroweczka

+0

Что он делает? – Pomul

+0

То же самое, но первая таблица со списком 2 – Mroweczka

0

Loop через ваши рабочие листы, как это, и проверить свойство индекса (который хранит местоположение рабочих листов), чтобы убедиться, что это не первый.

Public Sub test() 
For Each ws In Worksheets 
    If ws.Index > 1 Then 
     'Formatting goes here 
    End If 
Next 
End Sub 
1

вы были почти там, так как вы только пропустили рабочий лист specification

вы можете либо добавить либо добавить Worksheets(a).Activate заявление сразу после For a = 2 To Ws_Count одного или, что гораздо лучше, оберните форматирования кода в With Worksheets(a) ... End With блока, добавляя точки (.) перед каждой range ссылки и они относятся к текущему ссылочному листу, следующий

Sub ex2() 
    Dim a As Integer 

    For a = 2 To Worksheets.Count 
     With Worksheets(a) '<--| reference current index worksheet 
      With .Rows("2:2") '<--| reference current worksheet row 2 
       .RowHeight = 20 
       .Interior.Color = RGB(150, 250, 230) 
      End With 
      With .Range("B2") '<--| reference current worksheet cell "B2" 
       .Value = "Sheet Number" & " " & a 
       .Font.Size = 12 
       .Font.Bold = True 
       .Font.Underline = True 
      End With 
     End With 
    Next a 
End Sub 

Таким образом, нет необходимости в каком-либо If заявлении, что бы работал только один раз, хотя это не влияет на производительность существенно в данном случае это было бы очень неэффективна с чисто кодированием точки зрения

Смежные вопросы