Как записать время обновления внешнего соединения / запроса данных? - PullRequest
0 голосов
/ 12 марта 2019

У меня есть запрос внешних данных в Excel, подключенный к базе данных Microsoft Access, который я обновляю один раз в день, чтобы заполнить таблицу в Excel, и я хочу точно измерить, сколько времени требуется, чтобы обновить запрос / соединение.

Мне кажется, я близок к решению этой проблемы с использованием VBA на листе и там, где есть выбор TableUpdate? Но, похоже, не могу заставить что-либо действительно работать с этим.

К вашему сведению, я делаю это, как и в некоторых недавних обновлениях Excel, пара моих запросов начала занимать вдвое больше времени, и поэтому я хочу вернуться к старому Excels и затем измерить, сколько времени требуется для обновления, и так как это занимает до 15 минут, я не могу сидеть и наблюдать за этим, и записывать время, но я нажму кнопку «Обновить», сделаю что-нибудь еще в течение 20 минут и выясню, когда оно закончится.

1 Ответ

2 голосов
/ 12 марта 2019

Вы можете создать «пользовательскую» временную таблицу запросов, используя класс и событие потопления, например так.

Класс с именем clsTimedQueryTable со следующим кодом

Option Explicit

Private WithEvents qtTimed As QueryTable
Private tmStart As Date
Private tmEnd As Date

Public Property Get RefreshTimeTaken() As Variant
    RefreshTimeTaken = DateDiff("m", tmStart, tmEnd)
    Debug.Print RefreshTimeTaken
End Property

Public Sub INIT(qtToTime As QueryTable)
    Set qtTimed = qtToTime
End Sub
Private Sub qtTimed_AfterRefresh(ByVal Success As Boolean)
    tmEnd = Now
    Module1.TimeTaken = RefreshTimeTaken
    Debug.Print "Ended : " & tmEnd
End Sub

Private Sub qtTimed_BeforeRefresh(Cancel As Boolean)
    tmStart = Now
    Debug.Print "Started : " & tmStart
End Sub

Затем вобычный модуль имеет следующее значение

Private clsQueryTable As clsTimedQueryTable
Public TimeTaken As Double

Private Sub SetUp()
    Set clsQueryTable = New clsTimedQueryTable
    clsQueryTable.INIT ActiveSheet.ListObjects(1).QueryTable
End Sub

Обновление таблицы теперь будет обрабатывать время и передавать результат обратно в TimeTaken.Нет необходимости делать то, как я должен поместить переменную, это тоже из свойства класса.

Я бы также добавил в класс функцию .RefreshTable, чтобы управлять всем этим из классавместо того, чтобы установить класс, щелкнуть правой кнопкой мыши и т. д.

На ваше усмотрение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...