在单元格中查找导入的数据以停止导入它 VBA

Finding imported data in a cell to stop importing it VBA

我正在 excel 上制作一个从 MySQL 导入数据的宏(使用 querytables.add 并使用 OBCD),每次我 运行 宏都会创建一个新的连接及其浪费时间和 space。是否有一个函数可以知道 cell/sheet 上是否有连接,这样我就不必再次导入数据并创建新连接或代码来知道上次刷新连接的时间。

我查找了一些东西,但似乎没有类似的东西,所以也许其他方法会有用,谢谢!

代码:

Worksheets("Hoja1").Activate

Dim sqlstring As String
Const connstring As String = "ODBC;DSN=blabla;UID=blabla;PWD=blabla"

if "***Range("A1") has a connection***" then
    ActiveWorkbook.Connections("Conexión").Refresh 'actualize the connection previously made
Else 'import the table from sql server
    sqlstring = vbNullString
    sqlstring = "SELECT * FROM ExTable WHERE year > '2012'"
    With ActiveSheet.QueryTables.Add(Connection:=connstring, Destination:=Range("A1"), Sql:=sqlstring)
        .RefreshStyle = xlOverwriteCells
        .Refresh BackgroundQuery:=False
    End With

也许您可以找到连接名称?

Sub test()
Dim ItemConnection As Variant
Dim TotalConnections As Connections: Set TotalConnections = ThisWorkbook.Connections
    For Each ItemConnection In TotalConnections
    MsgBox ItemConnection.Name
    Next ItemConnection

End Sub

PS: 变体是因为我没有找到将连接声明为单个连接项的方法

我刚刚构建并测试了这个漂亮的小程序,它检查特定工作表范围是否存在连接,如果存在,则刷新它。我还留下了一个地方来添加它创建一个新的部分,如果它没有找到。

警告 - 如所写,如果工作表上列出的另一个连接超出所需范围,这可能会失败,并且它首先检查该连接,同时在所需范围内也有一个现有连接。您需要为此进行调整。

Sub RefreshMakeConnection()

Dim cnT As Connections
Set cnT = ThisWorkbook.Connections

Dim sWS As String
sWS = "Hoja1"

Dim cn As WorkbookConnection

For Each cn In cnT

    If cn.Ranges(1).Parent.Name = sWS Then

        With Worksheets(sWS)

            If Not Intersect(.Range("A1"), cn.Ranges(1)) Is Nothing Then
                cn.Refresh
            Else
                'code to create new connection
            End If

        End With

    End If

Next

End Sub