2017-09-23 1 views
-1

Ich habe diesen folgenden Code, der die Gesamtzahl der spezifischen Arbeitsblätter in einer Arbeitsmappe zählt. Ich habe den VbTextCompare-Operator (Vergleichsoperator) verwendet, um den Namen des Arbeitsblatts zu ermitteln. Wenn es dort ist, würde es die Anzahl der Blätter zählen. Aber leider stimmt das nicht mit der Zeichenfolge überein. irgendeine Hilfe? die Arbeitsblätter Namen sind in der folgenden Reihenfolge BQ1, BQ2, BQ3 ..... und so weiter ..Vergleichen des Arbeitsblatts Name in der Arbeitsmappe, um die Gesamtzahl der übereinstimmenden Arbeitsblätter zu erhalten

Dim tSheets As Long 
Dim WS As Worksheet 

i = 1 
For Each WS In ThisWorkbook.Worksheets 
    If StrComp(Left(WS.Name, 1), "BQ" & i, vbTextCompare) = 0 Then 
     tSheets = tSheets + 1 
     MsgBox WS.Name 
      i = i + 1 
    End If 

Next WS 

Antwort

0

Hier Refactoring ich Ihren Code mit Left, Right und Len.

Ich denke, eine Sammlung zu verwenden, um die Namen zu sammeln wäre nützlicher.

Sub Test_getWSPrefixList() 
    Dim list As Object 
    Set list = getWSPrefixList(ThisWorkbook, "BQ") 

    Debug.Print Join(list.ToArray, ",") 

End Sub 

Function getWSPrefixList(wb As Workbook, WSPrefix As String) As Object 
    Dim list As Object 
    Dim ws As Worksheet 
    Set list = CreateObject("System.Collections.ArrayList") 

    For Each ws In ThisWorkbook.Worksheets 
     If Left(UCase(ws.Name), Len(WSPrefix)) = WSPrefix Then 
      If IsNumeric(Right(ws.Name, Len(ws.Name) - Len(WSPrefix))) Then 
       list.Add ws.Name 
      End If 
     End If 
    Next ws 
    Set getWSPrefixList = list 
End Function 

BQ20,BQ19,BQ18,BQ17,BQ16,BQ15,BQ14,BQ13,BQ12,BQ11,BQ10,BQ9,BQ8,BQ7,BQ6,BQ5,BQ4,BQ3,BQ2,BQ1 
0

Zwei Probleme mit Ihrem Code ...

  1. Sie vergleichen die erste Buchstabe des Blattnamens mit der Zeichenfolgenvariable "BQ" & i. Also wird es auf keinen Fall passen.
  2. Die zweite Frage ist, Sie erhöhen die ich an der falschen Stelle. Es sollte außerhalb des IF-Blocks liegen.

versuchen, etwas so ...

Dim tSheets As Long 
Dim WS As Worksheet 
Dim i As Integer 
i = 1 
For Each WS In ThisWorkbook.Worksheets 
    If StrComp(WS.Name, "BQ" & i, vbTextCompare) = 0 Then 
     tSheets = tSheets + 1 
     MsgBox WS.Name 
    End If 
    i = i + 1 
Next WS 
+0

Absichtlich i innen setzen, wenn Block. so dass es nur inkrementieren sollte, nachdem der gefundene String gefunden wurde. BTW, ich habe die Lösung gefunden .. Ich habe 1 Buchstabe des Blattnamens verglichen, anstatt 1 sollte es 3 – Hola

+0

@Hola In diesem Fall sollten Sie verwenden, um Variable, eine mit dynamisch erstellen Sie den Blattnamen und eine andere zu verwenden um das Vorkommen von gefundenen Blättern zu zählen, wobei Sie nur eine Zählervariable verwendet haben. Ja, das habe ich darauf hingewiesen, dass Sie nur den ersten Buchstaben von Blattnamen verglichen haben. Wenn Ihre Frage gelöst ist, nehmen Sie sich bitte einen Moment Zeit, um die Antwort zu akzeptieren, um Ihre Frage als Gelöst zu markieren. – sktneer

Verwandte Themen