【发布时间】:2022-10-06 17:34:20
【问题描述】:
嗨 Stack Overflow VBA 社区
截至上周初,我对 VBA 完全陌生,只使用过录制的宏,只编辑过录制的代码,因此从未深入开发者模式。我曾提议为工作创建一个用户表单,但我想我可能咬得比我能咀嚼的更多,因为我不断收到这个错误,但我不确定为什么。
我正在尝试遵循 TheDataLabs 教程,因为通过他的 5 个视频,他将其带到了我想要达到的最后一点,但我正在尝试调整他的代码以使其拥有 21 列和数千行数据,并且似乎卡住了某处
就视频而言,我停留在他解释的区域是 32 分钟标记或单击此处-https://youtu.be/BdEMj4NNXAE?t=1921
请问有人可以用下面的代码sn-p帮助我吗? 我已经放置了特定的行和子
shData.Range(\"A1:U\" & iDataRow).AutoFilter Field:=iColumn, Criteria1:=\"*\" & sValue & \"*\"
Sub SearchData()
Application.ScreenUpdating = False
Dim shData As Worksheet \' Data sheet
Dim shSearchData As Worksheet \'SearchData sheet
Dim iColumn As Integer \'To hold the selected column number in database sheet
Dim iDataRow As Long \'To store the last non-blank row number available in Data sheet
Dim iSearchRow As Long \'To hold the last non-blank row number availble in Search Data sheet
Dim sColumn As String \'To store the column selection
Dim sValue As String \'To store the search text value
Set shData = ThisWorkbook.Sheets(\"Data\")
Set shSearchData = ThisWorkbook.Sheets(\"SearchData\")
iDataRow = ThisWorkbook.Sheets(\"Data\").Range(\"A\" & Application.Rows.count).End(xlUp).Row
sColumn = frmForm.cmbSearchColumn.value
sValue = frmForm.txtSearch.value
iColumn = Application.WorksheetFunction.Match(sColumn, shData.Range(\"A1:U1\"), 0)
\'Remove filter fom data worksheet
If shData.FilterMode = True Then
shData.AutoFilterMode = False
End If
\'apply filter on Data worksheet
If frmForm.cmbSearchColumn.value = \"Case code\" Then
shData.Range(\"A1:U\" & iDataRow).AutoFilter Field:=iColumn, Criteria1:=sValue
Else
shData.Range(\"A1:U\" & iDataRow).AutoFilter Field:=iColumn, Criteria1:=\"*\" & sValue & \"*\"
End If
If Application.WorksheetFunction.Subtotal(3, shData.Range(\"C:C\")) >= 2 Then
\'Code to remove the previous data from SearchData worksheet
shSearchData.Cells.Clear
shData.AutoFilter.Range.Copy.shSearchData.Range (\"A1\")
Application.CutCopyMode = False
iSearchRow = shSearchData.Range(\"A\" & Application.Rows.count).End(xlUp).Row
frmForm.lstDatabase.ColumnCount = 21
frmForm.lstDatabase.ColumnWidths = \"30,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70\"
If iSearchRow >= 1 Then
frmForm.lstDatabase.RowSource = \"SearchData!A2:U\" & iSearchRow
End If
Else
MsgBox \"No record found.\"
End If
shData.AutoFilterMode = False
Application.ScreenUpdating = True
End Sub
我尝试过多次浏览视频,甚至下载他的文件并粘贴相关代码的某些 sn-ps 等。
我已经查看了一些关于相同错误的 Stack Overflow 问题,但无法发现任何类似的代码,所以根据我的经验,我不确定出了什么问题
非常感谢所有帮助和指导。
提前致谢。
-
在尝试应用过滤器之前检查
iColumn的值。您可以通过插入行MsgBox iColumn来做到这一点。我的猜测是它要么是 0,要么根本不包含数字而是一个错误——这可能表明与sColumn的值完全匹配不存在于表的标题中。 -
感谢 CLR 我已经完成了上述操作,并且 iColumn 是 \'2\' 的值,我认为这是对的吗?
-
也许检查
iDataRow和sValue然后 - 并且工作表没有受到保护? -
嗨 CLR,感谢您的所有帮助