首页 > 解决方案 > VBA 代码在调试模式下按预期运行,但在运行时模式下不会复制更新的数据

问题描述

我需要能够将字符串列表传递到 SQL 数据连接中,以验证数据集完全存在于数据库中。最初尝试将集合作为 SQL 代码中 IN 子句中的一个参数传递,但参数不适用于 Excel SQL 连接中的 IN 子句。这导致我将集合中的每个字符串传递给 SQL 中 LIKE 子句中的参数,该子句确实返回了我需要的数据。我面临的问题是,当我在 Excel 中返​​回我的表以及 SQL 查询的结果(通过一个参数)时,当我将其复制粘贴到另一个表以获取整个列表时,在调试模式代码按预期运行,但在运行时模式下,代码似乎复制了第一次数据连接刷新的结果。

我尝试了许多不同的 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

我希望将每个数据连接刷新的值复制粘贴到单独的表或工作表中,以便根据 FlyDocData 表中的数据列表记录所有信息。

这是我的第一篇文章,如果有任何明显的信息遗漏/误解,我们深表歉意。真的希望有人可以帮助我或提出一些我还没有想到的解决方法。令人沮丧的是看到您的代码在调试器中运行,而不是在您尝试运行它时!

标签: sqlexcelvbaoracle

解决方案


推荐阅读