2016-07-23 4 views
0

Ich versuche, Blätter durchlaufen und wenn Blatt Name Muster gefunden, möchte ich es umbenennen.Excel VBA + Schleifen durch Blätter und wenn Blatt Name wie Muster, benennen Sie das Blatt

Unten ist der Code, aber es wird nicht umbenannt. Das Saitenmuster funktionierte jedoch nicht. Ich habe auch versucht, es über den genauen Namen des Blattes zu tun, und immer noch macht es geht nicht in die Select Case-Anweisung

Beachten Sie, dass „* Consol BE“ ist in der Tat die Räume unter Berücksichtigung

For myforecastSheetsIndex = LBound(myforecastSheetsArray) To UBound(myforecastSheetsArray) 

Select Case myforecastSheetsIndex 
    Case Is = 1 

     For Each wsBEIndex In Workbooks(desWBtoModify).Worksheets 

      Select Case wsBEIndex.Name 
       Case wsBEIndex.Name Like "* BE Consol" 
        wsBEIndex.Name = BEInputAns & " BE Consol" 
       Case wsBEIndex.Name Like "* BE" 
        wsBEIndex.Name = BEInputAns & " BE" 
       Case wsBEIndex.Name Like "* BE input tab" 
        wsBEIndex.Name = BEInputAns & " BE input tab" 
       Case wsBEIndex.Name Like "Forecast* BE*" 
        wsBEIndex.Name = "Forecast " & BEInputAns & " BE" 
      End Select 

     Next wsBEIndex 

    Case 2 To sheetsNeeded 

     'More codes here 
    Case Else 'Delete Sheets 
     'Codes to delete sheets 
End Select 

Next myforecastSheetsIndex 

Antwort

1

Ihre Select Case-Anweisung ist die äquivalente Else-Anweisung folgende If Then

 If wsBEIndex.Name = (wsBEIndex.Name Like "* BE Consol") Then 
      wsBEIndex.Name = BEInputAns & " BE Consol" 
     ElseIf wsBEIndex.Name = (wsBEIndex.Name Like "* BE") Then 
      wsBEIndex.Name = BEInputAns & " BE" 
     ElseIf wsBEIndex.Name = (wsBEIndex.Name Like "* BE input tab") Then 
      wsBEIndex.Name = BEInputAns & " BE input tab" 
     ElseIf wsBEIndex.Name = (wsBEIndex.Name Like "Forecast* BE*") Then 
      wsBEIndex.Name = "Forecast " & BEInputAns & " BE" 
     End If 

Wenn Sie zu dieser Aussage können Sie sehen, dass Sie wsBEIndex.Name für die Gleichstellung mit einem Wahr/Falsch-Wert testen, und ein Arbeitsblatt name ist nie (oder nicht gewöhnlich?) nur ein Wert von True oder Falsch.

Die Aussage, die Sie tatsächlich nach sind, ist

 If wsBEIndex.Name Like "* BE Consol" Then 
      wsBEIndex.Name = BEInputAns & " BE Consol" 
     ElseIf wsBEIndex.Name Like "* BE" Then 
      wsBEIndex.Name = BEInputAns & " BE" 
     ElseIf wsBEIndex.Name Like "* BE input tab" Then 
      wsBEIndex.Name = BEInputAns & " BE input tab" 
     ElseIf wsBEIndex.Name Like "Forecast* BE*" Then 
      wsBEIndex.Name = "Forecast " & BEInputAns & " BE" 
     End If 

oder als Select Case-Anweisung

 Select Case True 
      Case wsbeindex.Name Like "* BE Consol" 
       wsbeindex.Name = BEInputAns & " BE Consol" 
      Case wsbeindex.Name Like "* BE" 
       wsbeindex.Name = BEInputAns & " BE" 
      Case wsbeindex.Name Like "* BE input tab" 
       wsbeindex.Name = BEInputAns & " BE input tab" 
      Case wsbeindex.Name Like "Forecast* BE*" 
       wsbeindex.Name = "Forecast " & BEInputAns & " BE" 
     End Select 
+0

So schlagen Sie vor, dass ich IF-Anweisung anstelle von Select-Anweisung werden sollte? –

+0

Ich habe die Problemumgehung gefunden, damit Sie ** eine Case-Anweisung verwenden können - siehe letzte Änderung – YowE3K

+0

Danke YowE3K. Obwohl ich die Select Case-Anweisung nicht getestet habe, aber die IF-Anweisung verwendet habe, konnte ich das Ergebnis erhalten. Ich bin zuversichtlich, dass die von Ihnen angegebene Select Cast-Anweisung ebenfalls funktionieren wird. Reps zu dir! –

Verwandte Themen