2016-09-06 4 views
2

Ich habe diesen Code:Nummer in Arbeitsblatt-Namen als „jede Zahl“

Set wb2 = ActiveWorkbook 
wb2.Worksheets("-Incumbents").Range("B2:C2", Range("B2:C2").End(xlDown)).RemoveDuplicates Columns:=Array(1, 2), Header _ 
:=xlYes 
wb2.Worksheets("-Incumbents").Range("B2:C2", Range("B2:C2").End(xlDown)).Select 
Selection.Copy 

Ich mag es auf jedem Arbeitsblatt, welchen Namen arbeiten enthält Wort „-Incumbents“. Das Problem ist, dass Arbeitsblätter "1-Incumbents", "2-Incumbents", "3-Incumbents" und so weiter genannt werden ... Also ich denke, ich brauche eine Art Variable, um den Code anstelle der tatsächlichen Zahl zu setzen , aber ich kann mir nicht vorstellen, wie ich das machen soll. Bitte helfen.

+0

Schleife durch die Arbeitsblätter und prüfen, ob der Blattname ist 'Like„* -Incumbents "Wenn ja, mach deinen Code. –

+0

Dim ws As Worksheet Dim wb Wie Arbeitsmappe Dim wb2 Als Arbeitsmappe wb2 = Active For Each ws In wb2 Wenn ws.Name Like "* -Incumbents" Dann Worksheet.Activate wb2.ActiveSheet.Range ("B2 : C2 ", Bereich (" B2: C2 "). Ende (xlDown)). RemoveDuplicates Spalten: = Array (1, 2), Header _ : = xlYes wb2.ActiveSheet.Range (" B2: C2 ", Bereich ("B2: C2"). Ende (xlDown)). Wählen Sie Selection.Copy Nächste ws – Pawel

Antwort

3

versuchen, etwas wie folgt aus:

Dim ws as Worksheet 
Dim wb2 as Workbook 
Set wb2 = ActiveWorkbook 
For Each ws in wb2.worksheets 
    If ws.Name Like "*-Incumbents" Then 
     wb2.Worksheets("-Incumbents").Range("B2:C2", Range("B2:C2").End _ 
      (xlDown)).RemoveDuplicates Columns:=Array(1, 2), Header _ 
      :=xlYes 
     wb2.Worksheets("-Incumbents").Range("B2:C2", Range("B2:C2").End _ 
      (xlDown)).Select 
     Selection.Copy 
    End If 
Next 
+2

Änderung 'wb2.Worksheets (" - Incumbents ").' Zu 'ws.' –

+0

Ich habe etwas Ähnliches gefunden (wie Sie vielleicht in meinem Kommentar oben sehen - wusste nicht, wie man es als Code-Beispiel in den Kommentar einfügen :)) Aber es hat nicht funktioniert, jetzt weiß ich warum :) Vielen Dank ou – Pawel

+1

Wie in der anderen Antwort erwähnt, ist die Auswahl nicht erforderlich, gefolgt von 'Selection.Copy'. Ersetzen Sie einfach '.Select' mit' .Copy'. – Jordan

3

Als Scott Craner sagte zunächst eine Schleife durch alle Blätter. Zweitens vergleichen Sie die sheet.name mit „Incumbents“, können Sie entweder den „Like“ oder „InStr“ Funktionen:

Dim wb2 As Workbook 
Dim sht As Worksheet 

Set wb2 = ActiveWorkbook 

For Each sht In wb2.Sheets 

    ' option 1: use Like 
    If sht.Name Like "Incumbents" Then 

    ' option 2: use Instr 
    ' If InStr(1, sht.Name, "Incumbents") > 0 Then 
     sht.Range("B2:C2", sht.Range("B2:C2").End(xlDown)).RemoveDuplicates Columns:=Array(1, 2), Header _ 
     :=xlYes 
     sht.Range("B2:C2", sht.Range("B2:C2").End(xlDown)).Copy 
    End If 

Next sht 
+2

Es gibt auch keine Notwendigkeit für das 'Select' gefolgt von' Selection.Copy'. Ersetzen Sie einfach '.Select' mit' .Copy'. – Jordan

+0

@ Jordan du hast Recht +1 –

+0

Works perfekt. Danke an alle – Pawel

Verwandte Themen