2016-11-25 5 views
1

Ich möchte eine Reihe von Arbeitsblättern auf jedem Arbeitsblatt in einer Arbeitsmappe haben, die erste überspringend und auch einige Formatierungen machen, aber ich möchte, dass dieser VBA-Code das erste Arbeitsblatt (Name kann abweichen, wird aber immer zuerst). Die Frage ist also, wie soll ich das machen?Überspringe das erste Arbeitsblatt der Arbeitsmappe in 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

überprüft meinen Code in meine Antwort unten - es ist 95% von dir –

Antwort

1

Der Code war gut, Sie waren nur eine einzige Zeile fehlt, die Überprüfung der aktuelles Blatt kl.Index.

-Code

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

Vielen Dank! – Mroweczka

+0

@Mroweczka du bist willkommen :) –

1

Try this:

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 

Mit dem entsandten Code würde das Endergebnis sein:

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

Funktioniert nicht von der ersten Nummer. Mit ändert sich nicht viel. – Mroweczka

+0

Was macht es? – Pomul

+0

Gleiches Denken, aber erste Tabellenkalkulation ist nummeriert mit 2 – Mroweczka

0

Schleife durch Ihre Arbeitsblätter wie diese, und überprüfen Sie die Index-Eigenschaft (die die Arbeitsblätter Lage speichert), um sicherzustellen, es ist nicht der erste.

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

Sie fast da waren, da Sie nur Arbeitsblatt verpasst specification

Sie entweder ein entweder fügen Sie eine Worksheets(a).Activate Anweisung direkt nach For a = 2 To Ws_Count ein oder, was viel besser ist, könnte hinzufügen, wickeln Sie Ihre Formatierung Code in ein With Worksheets(a) ... End With Block, das Hinzufügen Punkte (.) vor jeder range Referenz und haben sie auf die aktuell referenzierte Arbeitsblatt verweisen, wie

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 
folgt So 10

, keine Notwendigkeit für eine If Aussage, die nur einmal gearbeitet hätte: obwohl es nicht die Leistung erheblich in diesem Fall beeinflussen würde, es wäre sehr ineffizient von einer rein Codierung Sicht

Verwandte Themen