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

时间:2016-06-22 15:59:37

标签: vba excel-vba import connection excel

我在excel上创建一个从MySQL导入数据的宏(使用querytables.add并使用OBCD),每次运行宏时,它都会创建一个新的连接,浪费时间和空间。是否有一个函数来知道单元格/表单上是否有连接,所以我不必再次导入数据并创建新连接或代码以了解最后一次刷新连接的时间。

我抬头看东西,但似乎没有什么比这更好的了,所以也许另外做这件事的方式会很有用,谢谢!

代码:

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

2 个答案:

答案 0 :(得分:0)

也许您可能会找到连接名称?

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:Variant是因为我没有找到将连接声明为单个连接项

的方法

答案 1 :(得分:0)

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

警告 - 如果已写入,如果工作表上列出的所有连接超出所需范围,则可能会失败,并且在所需范围内还存在现有连接时,它会先检查该连接。您需要对此进行调整。

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