【问题标题】:excel vba code to find value in a column are slow, how do i make it faster?excel vba代码在列中查找值很慢,我如何让它更快?
【发布时间】:2015-07-26 16:09:19
【问题描述】:

下面是我的vba代码,如何更快? (obs:我有 +- 33000 行值) 我搜索从产品到我公司的代码,我需要帮助才能更快地完成。

Private Sub TextBox1_Enter()
Dim FindString As String
Dim Rng As Range
FindString = TextBox1.Text
If Trim(FindString) <> "" And Len(TextBox1.Text) = 6 Then
   With Sheets("CADMAT").Range("B:B") 'searches all of column B
        Set Rng = .Find(What:=FindString, _
                    After:=.Cells(.Cells.Count), _
                    LookIn:=xlValues, _
                    LookAt:=xlWhole, _
                    SearchOrder:=xlByRows, _
                    SearchDirection:=xlNext, _
                    MatchCase:=False)
    If Not Rng Is Nothing Then
        Dim ultimalinha As Object
        Set ultimalinha = Plan3.Range("A35565").End(xlUp)
        ultimalinha.Offset(1, 0).Value = TextBox1.Text
        ultimalinha.Offset(1, 1).Value = TextBox2.Text
        TextBox1.Text = ""
        TextBox2.Text = ""
        TextBox1.SetFocus
    Else
        MsgBox "Produto não existe na tabela!" 'value not found
        TextBox1.Text = ""
        TextBox2.Text = ""
        TextBox1.SetFocus
    End If
End With
End If
End Sub

【问题讨论】:

  • 一般suggestionsspeed 向上code 来自快速Google
  • 特别是对于您的代码,为什么这很慢并不明显。您似乎正在执行最多 2 次更新的单个操作 (Find)。您对.SetFocus 的呼叫可能无法很好地配合TextBox1_Enter 上的活动。尽管您的If 在第一次绕过后会发现这个问题,所以这应该不会太糟糕。您在After:= 中使用.Cells(.Cells.Count) 的任何原因?似乎这与从 B1 开始是一样的,因为它一直到列的末尾。
  • 事实上,我加入了一个要盘点的产品列表,如果产品存在于表'CADMAT'中,他将产品插入到此列表中,如果它告诉 msgbox 产品不存在存在,但是此返回“不存在”花费了太长时间,并且似乎该表“没有响应”。我可以帮帮我吗?如果找不到该项目,如何改进搜索?

标签: excel vba find range offset


【解决方案1】:

选项显式

私有子 TextBox1_Enter()

Application.ScreenUpdating = False

代码在这里...

Application.ScreenUpdating = True

结束子

【讨论】:

    猜你喜欢
    • 2021-02-10
    • 2017-08-23
    • 2020-12-27
    • 1970-01-01
    • 2013-02-02
    • 2023-02-16
    • 2021-09-25
    • 1970-01-01
    • 2020-12-15
    相关资源
    最近更新 更多