Trouver une partie d'un nom de feuille

J'ai donc un client qui veut que j'écris un code qui met à jour sa feuille de calcul d'une autre feuille de calcul de plusieurs façons.

Je n'ai aucun problème à faire cela, sauf que la feuille de travail du classur souhaite mettre à jour les changements de nom avec la date.

À titre d'exemple, la feuille de calcul aurait été nommée

"Hello World 6.13" le lundi
"Hello World 6.17" aujourd'hui

Donc, ma question est, puis-je écrire un code qui search le nom de la feuille qui commence par «Hello World» et ignore le code de date ?

La façon dont je voudrais aborder cela serait de parcourir les feuilles dans le classur actif et de faire la comparaison, et lorsque la feuille correcte "Hello World x.xx" est trouvée, définissez-la comme reference et utilisez cette reference pour exécuter n'importe quelle code supplémentaire.

 For Each ws In ActiveWorkbook.Sheets If Left(ws.Name, 11) = "Hello World" Then Set hwSheet = ws End If Next ws With hwSheet 'do some code eg: .Range("A1").Value = "Hi" End With 

Posté ci-dessous est une version du code d'Oliver qui traite du travail avec la feuille trouvée dans la boucle, plutôt que la dernière correspondance trouvée.

Quelques autres réglages mineurs

  • La version de string de Left$ est plus rapide que la variante Left
  • Si vous définissez un object dans une boucle, il faut le redonner à rien avant de recommencer (ce qui n'est pas évident dans le code ci-dessous, car j'ai utilisé les ws existants)

code

 Sub Updated() Dim ws As Worksheet For Each ws In ActiveWorkbook.Sheets If Left$(ws.Name, 11) = "Hello World" Then With ws 'do something End With End If Next ws End Sub 

Une autre option pour renvoyer toutes les partitions partielles sans une boucle consiste à append des noms de feuilles à Array dans Excel VBA

Cela devrait suffire:

 Sub CallTheRealThing() Call SelectSheets("Sheet") End Sub Sub SelectSheets(NameNeededinSheet As Ssortingng, Optional Looked_Workbook As Workbook) Dim WorkSheetProject As Worksheet If Looked_Workbook Is Nothing Then Set Looked_Workbook = ThisWorkbook For Each WorkSheetProject In Looked_Workbook.Worksheets If InStr(WorkSheetProject.Name, NameNeededinSheet) Then: WorkSheetProject.Select: Exit Sub Next WorkSheetProject End Sub 

Vous pouvez le modifier à une fonction au lieu de sous pour savoir si elle pourrait sélectionner la feuille ou non

Donc, la feuille de calcul que vous voulez capturer est toujours la même feuille, dans le même classur? Si j'ai ce droit, vous pouvez utiliser le nom de code de la feuille de calcul dans le classur du client, tel que Sheet1 au lieu du nom de la feuille de calcul.

 Dim wb As Workbook, ws as Worksheet Set wb = Workbooks("Client.xls") wb.Activate Set ws = Sheet1 

Vous devriez activer le classur approprié avant d'utiliser le nom de code de la feuille. Pour être sûr que cela fonctionne, il serait prudent de changer le nom de code de la feuille du client à quelque chose d'unique (si ce n'est pas déjà le cas) si cela relève de votre compétence.