2016-06-22 6 views
-1

これは、MySQLからデータをインポートするexcel上でマクロを作成しています(querytables.addとOBCDを使用しています)。マクロを実行するたびに、時間と空間のセル/シートに接続があるかどうかを知る関数があるので、データを再度インポートして、新しい接続またはコードを作成して、接続が最後に更新された時刻を知る必要はありません。インポートされたデータをセルで検索してインポートを停止するVBA

私は何かを見つけましたが、それは何もないようですので、おそらくそれを行う別の方法は便利です、ありがとう!

コード:

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 

答えて

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 
+0

これは私が探していたようですが、 "cn.Ranges(1)"を理解していますが、接続 "テーブル"のセル(1,1)の値をとっていますか?接続がテーブルにインポートされたテーブルであると仮定します。 – AEPImiranda

+0

@AEPImiranda 'cn.Ranges (1) 'は接続によって現在カバーされているセルの領域を生成します。 'cn.Ranges(1).Address'に' debug.print'を使って確認できます。それは、例えば、テーブル、またはピボットテーブルの範囲の領域を表示します。 –

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:私はちょうど建設され、接続が特定のために存在するかどうかをチェックする、この気の利いた小さな手順をテストし、接続

+0

これはハハのおかげです! – AEPImiranda

+0

シンプルな方が良いでしょうか?しかし、あなたが受け取った最高の回答の緑のマークをupvoteと/またはチェックすることを忘れないでください - 私は今かなりの有用なものを見ています:) - – Sgdva

関連する問題