在单元格中查找导入的数据以停止导入它 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
我正在 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