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