有没有办法改善执行时间?
There is a way to improve the execution time?
我正在开发一个 VBA 代码,负责在 excel 文件中搜索单元格(序列号)的值及其生产开始日期。之后,它在 Access 数据库中搜索相同的序列号,并在指定的列中写入日期。
问题是它需要几个小时才能结束,因为 excel 和数据库有超过 10000 行......
问题是:有一种方法可以将我的代码改进到 运行 更快?
Private Sub Comando9_Click()
Set db = CurrentDb.OpenRecordset("ConsultaNSerie", dbOpenDynaset)
Set appExcel = CreateObject("Excel.Application")
'appExcel.Visible = True
appExcel.Application.Workbooks.Open "K:\EM HP - Comum\Planejamento de
Produção HP\CB\Planejamento de Produção_CB_FY19-20\Planejamento de
Produção_CB_FY19-20.xlsm"
Dim Inicio_planejado As Variant
Dim Numero_serie As String
Dim SAP As String
i = 9
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Dim Fileout As Object
Set Fileout = fso.CreateTextFile("K:\EM HP - Engenharia-Aplicação-
Controle de Projetos\Nserie_NoMatch.txt", True, True)
Do
SAP = appExcel.Sheets("Disjuntores").Columns("I").Rows(i).Value
Numero_serie = appExcel.Sheets("Disjuntores").Columns("L").Rows(i).Value
'MsgBox (Numero_serie)
Inicio_planejado =
appExcel.Sheets("Disjuntores").Columns("T").Rows(i).Value
If Inicio_planejado <> "" Then
'MsgBox (Inicio_planejado)
'quando for vazio, desconsiderar a celula
'ThisWorkbook.Reg.FindFirst "[OF] = '" + cb_OF.Value + " '"
db.FindNext "[NUMERO_SERIE] = '" + Numero_serie + " '"
If db.NoMatch Then
db.FindPrevious "[NUMERO_SERIE] = '" + Numero_serie + " '"
ElseIf db.NoMatch Then
Fileout.Write Numero_serie & " "
'MsgBox ("Número de série " + Numero_serie + " não encontrado")
Else
'Adicionar o valor de "Inicio_planejado" aos campos na coluna
"INICIO_FBR"
db.Edit
db![INICIO_FBR] = Inicio_planejado
db.Update
db.MoveNext
End If
End If
i = i + 1
Loop Until appExcel.Sheets("Disjuntores").cells(i, 7) = ""
Fileout.Close
appExcel.Quit
End Sub
1) 不要使用具有相同搜索条件的 db.FindNext
和 db.FindPrevious
。这对你的情况没有意义。
仅使用 FindFirst
,去掉 db.MoveNext
:
db.FindFirst "[NUMERO_SERIE] = '" + Numero_serie + " '"
If db.NoMatch Then
Fileout.Write Numero_serie & " "
Else
db.Edit
db![INICIO_FBR] = Inicio_planejado
db.Update
' Remove this, is is of no use:
'--- db.MoveNext
End If
2) 在 Access 中,编辑 table ConsultaNSerie
并在 NUMERO_SERIE
.
上添加 index
我正在开发一个 VBA 代码,负责在 excel 文件中搜索单元格(序列号)的值及其生产开始日期。之后,它在 Access 数据库中搜索相同的序列号,并在指定的列中写入日期。 问题是它需要几个小时才能结束,因为 excel 和数据库有超过 10000 行...... 问题是:有一种方法可以将我的代码改进到 运行 更快?
Private Sub Comando9_Click()
Set db = CurrentDb.OpenRecordset("ConsultaNSerie", dbOpenDynaset)
Set appExcel = CreateObject("Excel.Application")
'appExcel.Visible = True
appExcel.Application.Workbooks.Open "K:\EM HP - Comum\Planejamento de
Produção HP\CB\Planejamento de Produção_CB_FY19-20\Planejamento de
Produção_CB_FY19-20.xlsm"
Dim Inicio_planejado As Variant
Dim Numero_serie As String
Dim SAP As String
i = 9
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Dim Fileout As Object
Set Fileout = fso.CreateTextFile("K:\EM HP - Engenharia-Aplicação-
Controle de Projetos\Nserie_NoMatch.txt", True, True)
Do
SAP = appExcel.Sheets("Disjuntores").Columns("I").Rows(i).Value
Numero_serie = appExcel.Sheets("Disjuntores").Columns("L").Rows(i).Value
'MsgBox (Numero_serie)
Inicio_planejado =
appExcel.Sheets("Disjuntores").Columns("T").Rows(i).Value
If Inicio_planejado <> "" Then
'MsgBox (Inicio_planejado)
'quando for vazio, desconsiderar a celula
'ThisWorkbook.Reg.FindFirst "[OF] = '" + cb_OF.Value + " '"
db.FindNext "[NUMERO_SERIE] = '" + Numero_serie + " '"
If db.NoMatch Then
db.FindPrevious "[NUMERO_SERIE] = '" + Numero_serie + " '"
ElseIf db.NoMatch Then
Fileout.Write Numero_serie & " "
'MsgBox ("Número de série " + Numero_serie + " não encontrado")
Else
'Adicionar o valor de "Inicio_planejado" aos campos na coluna
"INICIO_FBR"
db.Edit
db![INICIO_FBR] = Inicio_planejado
db.Update
db.MoveNext
End If
End If
i = i + 1
Loop Until appExcel.Sheets("Disjuntores").cells(i, 7) = ""
Fileout.Close
appExcel.Quit
End Sub
1) 不要使用具有相同搜索条件的 db.FindNext
和 db.FindPrevious
。这对你的情况没有意义。
仅使用 FindFirst
,去掉 db.MoveNext
:
db.FindFirst "[NUMERO_SERIE] = '" + Numero_serie + " '"
If db.NoMatch Then
Fileout.Write Numero_serie & " "
Else
db.Edit
db![INICIO_FBR] = Inicio_planejado
db.Update
' Remove this, is is of no use:
'--- db.MoveNext
End If
2) 在 Access 中,编辑 table ConsultaNSerie
并在 NUMERO_SERIE
.