2017-03-29 3 views
1

Ich versuche, an einem Arbeitsblatt zu arbeiten, dessen Name eine Variable ist.Excel VBA - Index außerhalb des Bereichs - Blattname als Variable

Ich habe ein Hauptblatt, genannt "Daten", wo ich gehe, um eine Liste der Namen der vorhandenen Blätter zu fangen.

Mein Code ist wie folgt:

Dim data as Worksheet 
dim sheet_name as String 
Dim i as Integer 
Set data = ThisWorkbook.Sheets("Data") 

For i = 2 to 10 
    sheet_name = data.Range("A"&i).Value 
    With ThisWorkbook.Sheets(sheet_name) 
     'Operations on the worksheet 
    End With 
Next i 

Der Fehler aufgefordert ist "Runtime Error 9: Subscript Out of Range" für die spezifische Linie:

With This Workbook.Sheets(sheet_name) 

Es ist, als ob die Objektblätter habe die Zeichenfolge Blattname nicht verstanden. Das Blatt "Blattname" existiert sicher, ich habe es überprüft.

Leider kann ich das Blatt nicht mit seinem Namen aufrufen, da ich zu viele Blätter zum Bearbeiten habe, deshalb wollte ich eine Schleife machen.

Ich habe versucht, nicht mit der „Mit“ Klausel arbeiten, aber mit „ThisWorkbook.Sheets zu jedem Objekt der Blätter nur mit Bezug (SHEET_NAME) vor, sondern funktioniert auch nicht.

Wissen Sie, wenn es sich um() möglich, ein String-Variable innerhalb eines Sheets zu nennen?

vielen Dank für Ihre Hilfe!

mit freundlichen Grüßen

+1

Es ist möglich, zu tun, was Sie wollen - es sieht aus wie kein Blatt gibt es jedoch den Wert von 'sheet_name' entsprechen. –

+0

Sollte es 'Mit Blattname ... Ende mit' sein? – 0m3r

+3

Ihr Code funktioniert definitiv _provided_ die Liste der Namen auf Blatt 'Data' _exactly_ passen die Blattnamen (sie sind case insensitive). Suchen Sie nach zusätzlichen Leerzeichen am Anfang oder Ende der Namen (sowohl in "Daten" als auch in tatsächlichen Blattnamen). Alle Leerzeichen in 'Data! A2: A10' verursachen ebenfalls diesen Fehler. –

Antwort

1

Der Grund für Fehler gegeben wurde in den Kommentaren oben @ Chris neilsen

Sie könnten den Code verwenden, die unten angegeben sind, diese Art von Fehlern zu überprüfen oder zu vermeiden:

Option Explicit 

Sub CheckShtExists() 

Dim data As Worksheet 
Dim sheet_name As String 

Set data = ThisWorkbook.Sheets("Data") 

Dim ws As Worksheet 
Dim ShtNamesArr() As String 
Dim i As Long 

ReDim ShtNamesArr(0 To ThisWorkbook.Worksheets.Count - 1) ' resize array to number of worksheets in This Workbook 

' loop thourgh all worksheets and store their names in array 
For Each ws In ThisWorkbook.Worksheets 
    ShtNamesArr(i) = ws.Name 
    i = i + 1 
Next ws 

For i = 2 To 10 
    If data.Range("A" & i).Value <> "" Then ' ignore blank cells 
     sheet_name = data.Range("A" & i).Value 
     If Not IsError(Application.Match(sheet_name, ShtNamesArr, 0)) Then ' use Application.Match to see there is a sheet with this name 
      With ThisWorkbook.Sheets(sheet_name) 
       'Operations on the worksheet 
      End With 
     Else ' No Match 
      MsgBox sheet_name & " doesn't exists in your workbook" 
     End If 
    End If 
Next i 

End Sub 
Verwandte Themen