Excel 如何为大数据加速宏?
这是我的代码,它从sub Userfrom_Initialize调用。它工作得很好。但是,当涉及到大量数据时,显示包含加载数据的表单所需的时间太长。有人能帮我吗Excel 如何为大数据加速宏?,excel,vba,Excel,Vba,这是我的代码,它从sub Userfrom_Initialize调用。它工作得很好。但是,当涉及到大量数据时,显示包含加载数据的表单所需的时间太长。有人能帮我吗 Sub LoadData() Dim cn As ADODB.Connection Dim sqlstr As String Dim rs As ADODB.Recordset Set rs = New ADODB.Recordset Dim rn As Range Set rn = Ac
Sub LoadData()
Dim cn As ADODB.Connection
Dim sqlstr As String
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
Dim rn As Range
Set rn = ActiveCell
Application.ScreenUpdating = False
Set cn = New ADODB.Connection
cn.Open "connection; "
If rn.Offset(0, -1).Value = "abc" Then
OptionButton2.Visible = False
TextBox3.Visible = False
sqlstr = "query"
OptionButton1.Value = True
TextBox1.Value = ActiveCell.Value
rs.Open sqlstr, cn, adOpenStatic
While Not rs.EOF
ListBox1.AddItem rs(0).Value
rs.MoveNext
Wend
End If
If rn.Offset(0, -1).Value = "xyz" Then
OptionButton1.Visible = False
TextBox1.Visible = False
sqlstr = "query"
OptionButton2.Value = True
TextBox3.Value = ActiveCell.Value
rs.Open sqlstr, cn, adOpenStatic
While Not rs.EOF
ListBox1.AddItem rs(0).Value
rs.MoveNext
Wend
End If
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing
Application.ScreenUpdating = True
End Sub
我稍微清理了一下代码,删除了
,而不是rs.EOF ListBox1.AddItem rs(0)。Value rs.MoveNext Wend
循环
Sub LoadData()
Dim cn As ADODB.Connection
Dim sqlstr As String
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
Dim rn As Range
Set rn = ActiveCell
'Application.ScreenUpdating = False ' <== not necessary
cn.Open "connection; "
sqlstr = "query"
rs.Open sqlstr, cn, adOpenForwardOnly
Dim v As Variant
v = rs.GetRows(, , rs.Fields(0).Name)
If rn.Offset(0, -1).Value = "abc" Then
OptionButton2.Visible = False
TextBox3.Visible = False
OptionButton1.Value = True
TextBox1.Value = ActiveCell.Value
ListBox1.Column = v
End If
If rn.Offset(0, -1).Value = "xyz" Then
OptionButton1.Visible = False
TextBox1.Visible = False
OptionButton2.Value = True
TextBox3.Value = ActiveCell.Value
ListBox1.Column = v
End If
rs.Close ' This will crash in the OP's version
' Set rs = Nothing ' This is not neccessary
cn.Close
' Set cn = Nothing ' not neccessary
' Application.ScreenUpdating = True ' <== also not necessary
End Sub
子加载数据()
Dim cn作为ADODB.Connection
作为字符串的Dim sqlstr
将rs设置为ADODB.Recordset
Set rs=New ADODB.Recordset
低雷诺数范围
设置rn=ActiveCell
'Application.screenUpdate=False'您根本不清楚减速的位置。有两个循环:是一个循环还是两个循环?是SQL速度慢吗?你如何定义“慢”?是几秒钟,几分钟?您执行了哪些分析?使用这种方法填充列表框可能会有所帮助。我检查过,查询并不慢。我不知道出了什么问题,这就是我发帖子的原因。你甚至都没试过,是吗?您将摆脱循环,而不是rs.EOF ListBox1.AddItem rs(0)。Value rs.MoveNext Wend
@Storax-我尝试过,但仍然需要很长时间才能解决。我正在尝试将大约4000条记录加载到列表框中。我建议您完成代码的第一步,并识别需要很长时间的行。我仍然无法解决我的问题。你能帮我一下吗?你在哪里花了很长时间才修改代码?现在,如果没有你提供的信息,请尝试使用adOpenForwardOnly
而不是adOpenStatic
,尽管我并不期望由于该更改而有多大的改进。我试着用了4000多张唱片。根本没有性能问题。那个用户表单上还有什么?你还装了什么?