J'ai un sous qui ouvre Excel, crée une connexion à ma feuille Google, puis utilise une instruction d'insertion pour ajouter les données à ma base de données Access.
Cela fonctionne, mais est incroyablement lent (prend ~ 30sec pour obtenir 6 disques)Lents téléchargements à l'aide de MS Access
Private Sub ImportFromGoogleSheet()
On Error GoTo ErrHandler
Dim appXL As Object 'Excel.Application
Dim wbk As Object 'Excel.Workbook
Dim wst As Object 'Excel.Worksheet
Dim Timer As Integer
Set appXL = CreateObject("Excel.Application")
appXL.Visible = True 'If you want to see the excel sheet - enable this row (good for debugging)
Set wbk = appXL.Workbooks.Add
Set wst = wbk.Worksheets(1)
With wst
.QueryTables.Add Connection:= _
"URL;https://connection to site here ", Destination:=.Range("$A$1")
.Name = "Worksheet1"
.QueryTables(1).Refresh
End With
'Wait for google-doc data to be downloaded.
Timer = 0
Do While Left(wst.cells(1, 1), 12) = "ExternalData" And Timer < 40
'Sleep 250 ' Wait 0.25 sec before re-checking data
'Timer = Timer + 1
Loop
Dim rownum As Integer
rownum = 4
wst.cells(rownum, 2).Select
Do While (wst.cells(rownum, 2).Value <> "")
Dim sqlStr As String
Dim ts, dol As Date
Dim sn, lt As String
Dim nod As Integer
ts = wst.cells(rownum, 2).Value
dol = wst.cells(rownum, 5).Value
sn = wst.cells(rownum, 3).Value
lt = wst.cells(rownum, 4).Value
nod = wst.cells(rownum, 6).Value
sqlStr = "INSERT INTO table VALUES"
DoCmd.SetWarnings False
DoCmd.RunSQL sqlStr
DoCmd.SetWarnings True
rownum = rownum + 1
Loop
wbk.Close SaveChanges:=False 'Don't save excel sheet
appXL.Quit
Exit Sub
ErrHandler:
If (Err.Number = 3022) Then
Debug.Print "Record Already Exists"
Resume
End If
Debug.Print Err.Description & Err.Number
wbk.Close SaveChanges:=False 'Don't save excel sheet
appXL.Quit
End Sub
J'ai essayé d'enlever la première boucle while mais rien importé
Y at-il quelque chose dans le code ralentir ou est-ce juste un processus lent?
* Je sais que cela pourrait être approprié pour l'examen du code, mais je suis plus intéressé à savoir pourquoi sa lente que si son mauvais code de
** Modifier pour ajouter la sortie de débogage et de nouveau tout
Debug.Print "before wait while " & Now
'Wait for google-doc data to be downloaded.
lTimer = 0
Do While Left(wst.cells(1, 1), 12) = "ExternalData" And lTimer < 40
Debug.Print "Wait loop " & lTimer
Debug.Print "during wait while " & Now
Sleep 250 ' Wait 0.25 sec before re-checking data
DoEvents
lTimer = lTimer + 1
Loop
Debug.Print "after wait while" & Now
code fin
start time 18/07/2017 9:06:58 a.m.
before connect 18/07/2017 9:06:58 a.m.
before wait while 18/07/2017 9:07:00 a.m.
Wait loop 0
during wait while 18/07/2017 9:07:00 a.m.
Wait loop 1
during wait while 18/07/2017 9:07:00 a.m.
Wait loop 2
during wait while 18/07/2017 9:07:01 a.m.
Wait loop 3
during wait while 18/07/2017 9:07:01 a.m.
Wait loop 4
during wait while 18/07/2017 9:07:01 a.m.
Wait loop 5
during wait while 18/07/2017 9:07:01 a.m.
Wait loop 6
during wait while 18/07/2017 9:07:02 a.m.
Wait loop 7
during wait while 18/07/2017 9:07:02 a.m.
Wait loop 8
during wait while 18/07/2017 9:07:02 a.m.
Wait loop 9
during wait while 18/07/2017 9:07:02 a.m.
Wait loop 10
during wait while 18/07/2017 9:07:03 a.m.
Wait loop 11
during wait while 18/07/2017 9:07:03 a.m.
after wait while 18/07/2017 9:07:28 a.m.
Avez-vous essayé chronométrer la différentes sections? Combien de temps faut-il pour terminer le téléchargement ou effectuer l'insertion? –
Pas exactement, mais j'ai mis un point d'arrêt avant la boucle d'insertion et presque toute l'attente s'est produite avant ce point d'arrêt – Liamck27
Donc, il semble que le problème est le web fetch de Google: difficile de dire comment accélérer cela. –