Excel VBA错误13:为什么我会变成这个错误,尽管它在同一代码中适用于其他变量

Excel VBA错误13:为什么我会变成这个错误,尽管它在同一代码中适用于其他变量,excel,vba,types,mismatch,Excel,Vba,Types,Mismatch,我需要过滤一些列(字符串和数字)。我将var定义为variant,将sArray()定义为String。 我在这里变成了错误类型13(仅适用于sArray 4,5): var4是exp“Consulting&Supprot”的字符串/变体,但UBound(var4)提供了一个错误匹配 我不明白var1、var2和var3也像var42dvariant和redimsarray2(1到UBound(var2))。。。很好 感谢您的帮助:) 附:VBA的新代码&它不是我的代码 我已经看到了与此错误相关

我需要过滤一些列(字符串和数字)。我将var定义为variant,将sArray()定义为String。 我在这里变成了错误类型13(仅适用于sArray 4,5):

var4是exp“Consulting&Supprot”的字符串/变体,但UBound(var4)提供了一个错误匹配 我不明白var1、var2和var3也像var42dvariant和redimsarray2(1到UBound(var2))。。。很好

感谢您的帮助:)

附: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
问题是
UBound(var4)
,因为
var4
是一个二维变量数组,按照以下说明:

var4 = range4.Value
Set range4 = Workbooks(Umsatzdatenbank).Sheets("Filter").Range("C3:C" & lastbez2)
因为
range4
包含多个单元格,根据本说明:

var4 = range4.Value
Set range4 = Workbooks(Umsatzdatenbank).Sheets("Filter").Range("C3:C" & lastbez2)
有两种解决办法

一种是在
UBound(var4)
中指定维度:

另一种方法是,由于
range4
是一个单列范围,使用
Application.Transpose
var4
变成一个一维数组:

var4 = Application.Transpose(range4.Value)
由于
var4
是一个一维数组,
UBound(var4)
将按预期工作-请注意,将
var4
作为一个一维数组,无需在此处明确指定第二维的下标:

sArray4(i) = var4(i, 1)
…保留它将导致下标超出范围错误

问题是
UBound(var4)
,因为
var4
是一个二维变量数组,按照以下说明:

var4 = range4.Value
Set range4 = Workbooks(Umsatzdatenbank).Sheets("Filter").Range("C3:C" & lastbez2)
因为
range4
包含多个单元格,根据本说明:

var4 = range4.Value
Set range4 = Workbooks(Umsatzdatenbank).Sheets("Filter").Range("C3:C" & lastbez2)
有两种解决办法

一种是在
UBound(var4)
中指定维度:

另一种方法是,由于
range4
是一个单列范围,使用
Application.Transpose
var4
变成一个一维数组:

var4 = Application.Transpose(range4.Value)
由于
var4
是一个一维数组,
UBound(var4)
将按预期工作-请注意,将
var4
作为一个一维数组,无需在此处明确指定第二维的下标:

sArray4(i) = var4(i, 1)

…保留它将导致下标超出范围错误。

将sArray1()、sArray2()、sArray3()、sArray4()、sArray5()作为字符串声明无效。它仅将sArray5()声明为字符串,其余声明为变量。您应该编写为:
Dim sArray1()作为字符串,sArray2()作为字符串….
要添加到@Luuklag的注释中,
Dim range1、range2、range3、range4、range5作为范围
仅声明
range5
作为
范围。所有其他都是
变体
。声明类型时必须明确:
Dim range1为Range,range2为Range,…
@Luuklag不完全正确
sArray1…5()
所有数组仍然是唯一的,它们是
Variant
数组,除了
sArray5()
这是一个
字符串
数组。修复该问题可以使意图更加明确,这很好,但不会导致类型不匹配,例如,
sArray1(i)=var1(i,1)
Dim sArray1()、sArray2()、sArray3()、sArray4()、sArray5()作为字符串
无效。它只将sArray5()声明为字符串,其余声明为变量。您应该编写为:
Dim sArray1()作为字符串,sArray2()作为字符串….
要添加到@Luuklag的注释中,
Dim range1、range2、range3、range4、range5作为范围
仅声明
range5
作为
范围。所有其他都是
变体
。声明类型时必须明确:
Dim range1为Range,range2为Range,…
@Luuklag不完全正确
sArray1…5()
所有数组仍然是唯一的,它们是
Variant
数组,除了
sArray5()
这是一个
字符串
数组。修复该问题会使意图更加明确,这很好,但不会导致类型不匹配,例如,
sArray1(i)=var1(i,1)
,不幸的是,它不起作用。我不理解var1,var2和var3也像var42dvariant和redimsarray2(1到UBound(var2))。。。很好,可惜没用。我不理解var1,var2和var3也像var42dvariant和redimsarray2(1到UBound(var2))。。。很好