如何修复 VBA 列表框过滤工作中的“语法错误”

问题描述 投票:0回答:1

我是 VBA 新手,我正在尝试创建 VBA

listbox
过滤宏。我找到了一个例子,并将我的数据转移到列表中。但我收到语法错误。我不知道原因,需要修复它。

我想我从这一行收到语法错误消息:

Sheets("liste").Range(ls.Cells(1, 1), ls.Cells(y1, x1)).AdvancedFilter Action:=xlFilterCopy

代码:

Private Sub TextBox1_Change()
Dim ls, rs As Worksheet
Set ls = Sheets("Liste")
Set rs = Sheets("Rapor")
x1 = ls.Range("1:1").End(xlToRight).Column
y1 = ls.Range("A250000").End(xlUp).Row
x2 = rs.Range("1:1").End(xlToRight).Column
y2 = rs.Range("A250000").End(xlUp).Row
rs.Range(rs.Cells(1, 1), rs.Cells(y2, x2)).Clear
rs.Range("N1") = ComboBox1
rs.Range("N2") = TextBox1
Sheets("liste").Range(ls.Cells(1, 1), ls.Cells(y1, x1)).AdvancedFilter Action:=xlFilterCopy
CriteriaRange:=rs.Range ("N1:N2"), CopyToRange:=rs.Range("A1"), Unique:=False
x2 = rs.Range("1:1").End(xlToRight).Column
y2 = rs.Range("A250000").End(lxup).Row

ListBox1.ColumnCount = x2
i = rs.Range(rs.Cells(1, 1), rs.Cells(y2, x2))
ListBox1.List = i
End Sub


Private Sub UserForm_Initialize()

q = Sheets("Liste").Range("1:1").End(xlToRight).Column
w = Sheets("Liste").Range("A250000").End(xlUp).Row
For a = 1 To q
ComboBox1.AddItem Sheets("Liste").Cells(1, a)
Next
ListBox1.ColumnCount = q
i = Sheets("Liste").Range(Sheets("Liste").Cells(1, 1), Sheets("Liste").Cells(w, q))
ListBox1.List = i

End Sub

excel vba dynamic listbox filtering
1个回答
2
投票

语法错误是因为您在提到的行末尾缺少逗号和行继续字符(空格和下划线)...需要读取该行

Sheets("liste").Range(ls.Cells(1, 1), ls.Cells(y1, x1)).AdvancedFilter Action:=xlFilterCopy, _

行继续符告诉编辑器,这两行物理行实际上是一行很长的行。另一种方法(但对代码可读性不太好)是删除换行符并让

CriteriaRange:=rs.Range ("N1:N2"), CopyToRange:=rs.Range("A1"), Unique:=False
立即继续,这样你就可以了

Sheets("liste").Range(ls.Cells(1, 1), ls.Cells(y1, x1)).AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=rs.Range ("N1:N2"), CopyToRange:=rs.Range("A1"), Unique:=False
© www.soinside.com 2019 - 2024. All rights reserved.