2016-04-12 17 views
2

Ich benutze die folgenden, um den Blatt Codename, aber ich möchte nur den Index dieses Codenamen bekommen. Können sagen, der Codename ist „Sheet4“ Ich mag nur die Nummer 4. bekommen würde, wenn es ich möchte nur den 12.VBA - Wie bekomme ich den Codenamen Index

ActiveSheet.CodeName 

Dank „Sheet12“ ist!

+0

für das allgemeine Problem Blick in regexm Sie so etwas wie dieses suchen: reg.Pattern = "[^ \ d] +" Debug.Print reg.Replace (Yourstring, "") Aber für diesen speziellen Frage die Antwort von Mrig wird wahrscheinlich tun –

+0

Hallo @DoktorOSwaldo Ich weiß nicht, wie Sie Ihren Vorschlag anwenden. Kannst du bitte helfen? Die Antwort von Mrig antwortet auf ein anderes Problem, nicht das, wonach ich suche. – peetman

Antwort

1

Okay, die Zahlen eines String sie sind grundsätzlich zwei Möglichkeiten, zu extrahieren. Zunächst könnten Sie eine Funktion schreiben, die alle nummerische Zeichen aus der Zeichenfolge extrahieren:

Function removeBadChars(sInput As String) As String 
Dim i As Integer 
Dim sResult As String 
Dim sChr As String 

For i = 1 To Len(sInput) 
    sChr = Mid(sInput, i, 1) 
    If IsNumeric(sChr) Then 
     sResult = sResult & sChr 
    End If 
Next 

removeBadChars = sResult 
End Function 

Dies funktioniert gut für Sie Fall sind. Der elegantere Weg wäre die Verwendung eines Regex. Dies benötigt den Verweis auf "Microsoft VBScript Regular Expressions 5.5". Der Vorteil ist, dass Sie grundsätzlich alles mit Regex abgleichen können. In Ihrem Fall wäre es wie folgt aussehen:

Dim regEx As New RegExp 
regEx.Pattern = "[^\d]+" 
Debug.Print regEx.Replace(ActiveSheet.CodeName, "") 
2

Es ist ganz einfach:

ActiveSheet.Index 
+1

Das gibt nicht den Index des Codenamens, aber den Index des Blattes. – peetman

+0

Soll die Nummer Teil des Codenamens sein? Wenn ja, beginnt der Codename der Arbeitsblätter mit "Blatt" wie: Blatt1, Blatt2, Blatt3, ..., Blatt11, Blatt12, ... und so weiter? – Mrig

+0

Das passiert jetzt. Die Sache ist, dass ich eine For-Schleife in einigen Blättern basierend auf ihrem Codenamen-Index (der Nummer Teil des Codenamens, wie Sie sagten) ausführen möchten. – peetman

0

ich eine Funktion erhalten verwaltet, die mir das auf dem Codenamen basiert Blatt gibt.

Function GetSheetWithCodename(ByVal worksheetCodename As String, Optional wb As Workbook) As Worksheet 
    Dim iSheet As Long 
    If wb Is Nothing Then Set wb = ThisWorkbook ' mimics the default behaviour 
    For iSheet = 1 To wb.Worksheets.Count 
     If wb.Worksheets(iSheet).CodeName = worksheetCodename Then 
      Set GetSheetWithCodename = wb.Worksheets(iSheet) 
      Exit Function 
     End If 
    Next iSheet 
End Function 
Verwandte Themen