Код VBA Работает не так быстро, как раньше ( этот код никогда не требовал времени для запуска, но теперь я не знаю, что произошло)

#excel #vba #performance

Вопрос:

Это код, который я использовал для извлечения данных с листа в главный файл всех зарплат. Выполнение кода занимает много времени, и до недавнего времени такого никогда не случалось. Я надеюсь, что кто-нибудь сможет помочь мне разобраться в этом вопросе.

 Sub UpdateDataFromMaster()

Dim filepath As String
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim fullpath As String
Dim filename As String
Dim filedirectorypath As String
Dim varRecords As Variant
Dim pos As Integer
Dim fso As Object
Set fso = VBA.CreateObject("Scripting.FileSystemObject")

On Error Resume Next

filepath = ThisWorkbook.ActiveSheet.Cells(1, 38)
gettempfolder = Environ("Temp")

fullpath = ThisWorkbook.FullName
filename = ThisWorkbook.Name
filedirectorypath = Left(fullpath, Len(fullpath) - Len(filename) - 1)
pos = InStrRev(filedirectorypath, "")
rootdirectorypath = Left(filedirectorypath, pos - 1)
filepath = rootdirectorypath amp; "" amp; "All Salaries Master File.xlsm"
destpath = gettempfolder amp; "" amp; "All Salaries Master File.xlsm"

If Len(Dir$(destpath)) > 0 Then
     Kill destpath
End If

Call fso.CopyFile(filepath, destpath)

Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
''Using Query function to fetch data
strSQL = "SELECT * FROM [All sheet$]"
connstr = "Provider=Microsoft.ACE.OLEDB.12.0;Data source=" amp; destpath amp; ";Extended Properties=""Excel 12.0; HDR=YES; IMEX=1""; Mode=Read;"
cn.Open connstr
Set rs = cn.Execute(CommandText:=strSQL)
ThisWorkbook.Sheets("Source").Range("A1").CopyFromRecordset rs
rs.Close
cn.Close

If Len(Dir$(destpath)) > 0 Then
    Kill destpath
End If

Set cn = Nothing
Set rs = Nothing

On Error GoTo 0
    
Application.StatusBar = "Data Updated"
        
End Sub
 

Комментарии:

1. Какой бит отнимает время?

2. Попробуйте выполнить пошаговое выполнение кода и проверьте, какая строка занимает много времени

3. Бит для быстрой выборки данных. Когда я запускаю код запуска, выполнение занимает около 2=3 минут

Ответ №1:

Я бы проверил следующее:

  • Возможно, ваш главный файл всех зарплат.xlsm стал больше. Когда Excel пытается обработать тысячи строк, все идет медленно.
  • Возможно, ваша рабочая книга VBA стала больше (т. Е. Эта рабочая книга с исходным листом). Когда книги становятся размером в несколько МБ, они могут замедляться.
  • Возможно, на вашем диске недостаточно свободного места. Проверьте пространство на диске, представленное вашей папкой gettemp, и любые другие задействованные диски.

Комментарии:

1. Здравствуйте, дорогой, я перепробовал все вышесказанное, но все равно этот код требует времени для запуска, даже когда я воссоздал мастер-файл и его размер уменьшился с 8 МБ до 3 Мб

2. — Похоже, что все ваши пути (источник/пункт назначения/время) находятся на одном диске, поэтому это должно быть быстро. Однако, если какой-либо из ваших путей находится на сетевых дисках, это может быть сетевой проблемой. — Если одна из ваших папок (например, destpath ) содержит много файлов, это может замедлить доступ. — У вас может быть запланированная задача Windows или служба Windows, которая постоянно пытается получить доступ к одному из этих файлов. — У вас может быть антивирусное программное обеспечение (например, Защитник Windows ), которое постоянно сканирует один из этих файлов.