Код VBA работает должным образом в режиме отладки, однако не копирует обновленные данные в режиме выполнения - PullRequest
0 голосов
/ 25 июня 2019

Мне требуется возможность передать список строк в соединение данных SQL, чтобы убедиться, что набор данных полностью существует в базе данных. Первоначально пытался передать набор как один параметр в предложении IN в коде SQL, однако параметры не работают для предложений IN в соединениях Excel SQL. Это заставило меня пройти через каждую строку в наборе в параметр в предложении LIKE в SQL, который возвращает нужные мне данные. Проблема, с которой я сталкиваюсь, заключается в том, что когда я возвращаю свою таблицу в Excel с результатами запроса SQL (с одним пропущенным параметром), когда я перехожу к copy_paste из другой таблицы, чтобы получить полный список, в отладке В этом режиме код выполняется должным образом, однако в режиме выполнения код, похоже, копирует и вставляет результаты самого первого обновления подключения к данным.

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

Public Sub GetTechLog()
    Dim Comp As Worksheet
    Dim TempDC As Worksheet

    Set Comp = Sheets("Comparison")
    Set TempDC = Sheets("Temp")

    Dim FlyDocData As ListObject
    Dim TRAXData As ListObject
    Dim TempData As ListObject

    Set FlyDocData = Comp.ListObjects("FlyDocs") 'Data to validate exists in TRAX
    Set TRAXData = Comp.ListObjects("TRAX") 'Table to hold CopyPaste data from TRAX
    Set TempData = TempDC.ListObjects("Table_TempFlyDocs") 'Data Connection to the database (TRAX)

    Dim i As Integer

    For i = 1 To FlyDocData.DataBodyRange.Rows.Count
        TempDC.Range("A10").Value = FlyDocData.DataBodyRange(i, 1).Value 'This is the parameter passed into the SQL data connection

        ActiveWorkbook.RefreshAll 'Refresh the SQL Data Connection and Table_TempFlyDocs

        Application.Wait (Now + TimeValue("00:00:05")) 'My attempt at adding Wait function to ensure the right data is copy pasted
        TempData.DataBodyRange.Copy 'Copy the newest refresh of the SQL data connection
        Application.Wait (Now + TimeValue("00:00:05"))
        Comp.Range("C" & i + 1).PasteSpecial xlPasteValuesAndNumberFormats 'Paste this information just into a cell in a different sheet
        Application.Wait (Now + TimeValue("00:00:01"))
    Next i
End Sub

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

Это мой первый пост, поэтому прошу прощения, если есть какие-либо вопиющие упущения информации / недоразумений. Очень надеюсь, что кто-то может мне помочь или предложить какой-то обходной путь, о котором я еще не думал. Расстраивает, что ваш код работает в отладчике, а не когда вы пытаетесь его запустить!

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