Ошибка 13 VBA: почему я стал этой ошибкой, хотя она работала для других переменных в том же коде - PullRequest
0 голосов
/ 15 февраля 2019

Мне нужно отфильтровать некоторые столбцы (строки и числа).Я определил var как вариант, sArray () как строку.Я получаю тип ошибки 13 (только для sArray 4,5) здесь:

   ReDim sArray4(1 To UBound(var4))  & ReDim sArray5(1 To UBound(var5))

var4 - это строка / вариант для exp "Consulting & Supprot", но UBound (var4) выдает несоответствие, которое я не делаюпонимать, что var1, var2 и var3 также похожи на 2D вариант var4 и ReDim sArray2 (1 To UBound (var2)) ... работает отлично.

любая помощь приветствуется :)

PS: новинка на VBA, и это не мой код

Я уже видел вопросы, связанные с этой ошибкой.Я не нахожу ничего полезного

Dim Pfad1 As String
Dim Bezeichnung As Variant
Umsatzdatenbank = ActiveWorkbook.Name
Pfad1 = Workbooks(Umsatzdatenbank).Sheets("Umsatz").Cells(5, 5)
Dim range1, range2, range3, range4, range5 As Range
lastoffice = Workbooks(Umsatzdatenbank).Sheets("Filter").Range("H" & Rows.Count).End(xlUp).Row
lastbez = Workbooks(Umsatzdatenbank).Sheets("Filter").Range("B" & Rows.Count).End(xlUp).Row
lastbez2 = Workbooks(Umsatzdatenbank).Sheets("Filter").Range("C" & Rows.Count).End(xlUp).Row
lastoffice2 = Workbooks(Umsatzdatenbank).Sheets("Filter").Range("F" & Rows.Count).End(xlUp).Row
Set range1 = Workbooks(Umsatzdatenbank).Sheets("Filter").Range("B3:B" & lastbez)
Set range2 = Workbooks(Umsatzdatenbank).Sheets("Filter").Range("E3:E" & lastoffice)
Set range4 = Workbooks(Umsatzdatenbank).Sheets("Filter").Range("C3:C" & lastbez2)
Set range5 = Workbooks(Umsatzdatenbank).Sheets("Filter").Range("F3:F" & lastoffice)
Dim var1, var2, var3, var4, var5 As Variant
Dim sArray1(), sArray2(), sArray3(), sArray4(), sArray5()  As String
Dim i As Long
var1 = range1.Value
ReDim sArray1(1 To UBound(var1))
For i = 1 To (UBound(var1))
    sArray1(i) = var1(i, 1)
Next

var2 = range2.Value
ReDim sArray2(1 To UBound(var2))
For i = 1 To (UBound(var2))
    sArray2(i) = var2(i, 1)
Next
var4 = range4.Value
ReDim sArray4(1 To UBound(var4))
For i = 1 To (UBound(var4))
    sArray4(i) = var4(i, 1)
Next

var5 = range5.Value
ReDim sArray5(1 To UBound(var5))
For i = 1 To (UBound(var5))
    sArray5(i) = var5(i, 1)
Next

Workbooks.Open Pfad1
ActiveSheet.Name = ("Quelldatei")
ActiveSheet.Copy After:=ActiveSheet
ActiveSheet.Name = "FSS"
LastRow = Range("A" & Rows.Count).End(xlUp).Row

Workbooks.Open Pfad1
ActiveSheet.Name = ("Quelldatei")
ActiveSheet.Copy After:=ActiveSheet
ActiveSheet.Name = "GMS"
LastRow = Range("A" & Rows.Count).End(xlUp).Row

Range("K1").Select
Selection.AutoFilter
Worksheets("FSS").Range("$A$1:$AA$" & LastRow).AutoFilter Field:=11, Criteria1:=sArray1, Operator:=xlFilterValues
Worksheets("FSS").Range("$A$2:$AA$" & LastRow).SpecialCells(xlCellTypeVisible).EntireRow.Delete
ActiveSheet.ShowAllData
Worksheets("FSS").Range("$A$1:$AA$" & LastRow).AutoFilter Field:=13, Criteria1:=sArray2, Operator:=xlFilterValues
Worksheets("FSS").Range("$A$2:$AA$" & LastRow).SpecialCells(xlCellTypeVisible).EntireRow.Delete
ActiveSheet.ShowAllData

1 Ответ

0 голосов
/ 15 февраля 2019
ReDim sArray4(1 To UBound(var4))

Проблема в UBound(var4), потому что var4 - это двумерный вариантный массив согласно этой инструкции:

var4 = range4.Value

Поскольку range4 содержит несколько ячеекВ соответствии с этой инструкцией:

Set range4 = Workbooks(Umsatzdatenbank).Sheets("Filter").Range("C3:C" & lastbez2)

Существует два решения.

Можно было бы указать размер в UBound(var4):

ReDim sArray4(1 To UBound(var4, 1))

Другое было бы, поскольку range4 - это диапазон из одного столбца, чтобы сделать var4 одномерным массивом, используйте Application.Transpose:

var4 = Application.Transpose(range4.Value)

, где var4 является одномерным массивом, UBound(var4) будет работать должным образом - обратите внимание, что создание var4 одномерного массива устраняет необходимость явного указания нижнего индекса для 2-го измерения здесь:

sArray4(i) = var4(i, 1)

... и оставление его в нем вызовет индекс за пределами диапазона ошибка.

...