Ich versuche, Arbeitsblätter aus einer Arbeitsmappe in eine Zielarbeitsmappe zu kopieren, aber die Arbeitsblätter, die ich kopiere, sind abhängig davon, ob der Wert in rngCurrent im Arbeitsblattnamen vorhanden ist. Aus irgendeinem Grund bekomme ich in der letzten Zeile immer einen Indexfehler oder Bereichsfehler. Kann mir jemand helfen zu verstehen, was vor sich geht?Das Kopieren von dynamischem Array führt zu einem außerhalb des Bereichs liegenden Fehler
Sub test2()
Dim wb As Workbook
Dim master As Workbook
Dim wbCurrent As Workbook
Dim wbAdjustments As Workbook
Dim wsName As Worksheet
Dim rngEntityList As Range
Dim rngCurrentEntity As Range
Dim rngCurrent As Range
Dim arrWorksheets As Variant
Dim i As Integer
Dim wsCount As Integer
Set master = ThisWorkbook
Set rngCurrentEntity = master.Sheets("File Info").Range("rng_Entity") 'named range of single entity
Set rngEntityList = master.Sheets("Global").Range("rng_EntityList") 'list or entities
Set rngCurrent = rngEntityList.Find(rngCurrentEntity.Value, LookIn:=xlValues) ' find single entity in the list
If rngCurrent.Offset(, 4).Value = "FRP" Then 'find if it's FRP
Set wb = Application.Workbooks("Foreign.xlsx")
Else
Set wb = Application.Workbooks("Domestic.xlsx")
End If
Dim ws() As String ' declare string array
ReDim ws(wb.Worksheets.Count) As String ' set size dynamically
Dim counter As Long ' running counter for ws array
counter = 1
For i = 1 To wb.Worksheets.Count
If InStr(1, wb.Worksheets(i).Name, rngCurrent.Value) <> 0 Then
ws(counter) = wb.Worksheets(i).Name
counter = counter + 1
End If
Next
ReDim Preserve ws(counter) As String ' Get rid of empty array entries
wb.Worksheets(ws).Copy After:=master.Worksheets(master.Worksheets.Count)
End Sub
EDIT Der Grund ich brauche, ist es auf diese Weise zu tun, weil ich nicht die externen Links auf die Quelle Notebook möchten.
welche Zeile Sie Ihre Fehler zu bekommen? –
Standardmäßig ist die untere Grenze eines Arrays Null, nicht eins. Ihr Fehler liegt darin, dass auf dem 0. Platz in Ihrem Array kein Inhalt vorhanden ist. Probieren Sie 'ReDim ws (1 bis wb.Worksheets.Count)' aus (geben Sie die obere und untere Grenze an, ohne 'As String') –
@Shairado Ich erhalte den Fehler in der Zeile wb.Worksheets (ws) .Copy –