0

Windows と Mac の両方に対応する必要がある Excel ベースのツールを作成しています。このツールは、SQL Server からデータをプルしたり、SQL Server にデータをプッシュしたりする必要があります。ここで説明されているように、Windowsで機能し、Macでも機能するはずの方法を作成してテストしました(ただし、そのリンクはExcel 2011に関連しています)。

On Error GoTo err1
Dim connstring As String
Dim sqlstring As String
Dim dArr As Variant
Dim qt As QueryTable
Dim sht As Worksheet
Set sht = ThisWorkbook.Sheets(1)
connstring = "ODBC;DRIVER={SQL Server};SERVER=SERVERNAME;DATABASE=master;Trusted_Connection=yes"
sqlstring = "SELECT 1"

Set qt = sht.QueryTables.Add(Connection:=connstring, Destination:=sht.Range("A1"), Sql:=sqlstring)

With qt
  .BackgroundQuery = False
  .RowNumbers = False
  .Refresh
End With

このアプローチは、Excel 2016 for Mac では機能しません。実際、Mac で接続を追加するプロセスを記録すると、QueryTables.Add メソッドは接続または SQL 引数さえ表示しません...

プログラムでテーブルを作成する代わりに、テーブルを手動で作成し、必要に応じてプログラムでテーブルの CommandText を変更することが回避策になると考えました (さまざまなパラメーターなど)。しかし、QueryTable オブジェクトの CommandText プロパティにアクセスしようとすると、Mac VBEditor からメンバーが見つからないというメッセージが表示されます。

Excel 2016 for Mac でプログラムによって ODBC QueryTables を正常に作成した人はいますか、それとも Excel 2016 のもう 1 つの欠点ですか?

4

1 に答える 1

0

あなたの質問に出くわしたとき、誰かがそれに答えてくれたらいいのにと思いました。今日、回避策を発見しました。私の問題はあなたの問題に似ているように見えるので、私の解決策があなたを助けるかもしれません:

VBA で QueryTables.Add または CommandText を使用できませんでしたが、テーブルを手動で作成し、Excel シートのデータをパラメーターとして使用することができました。
[New Database Query] > [From Database] の順にクリックして、ODBC 接続を手動で作成しました。おそらく、その方法はご存じでしょう。SQL を Microsoft Query ウィンドウに次のように入力しました。

    SELECT DISTINCT WIN
  FROM RETAIL.OFFER
  WHERE WIN LIKE 'XS%'
  AND WIN NOT LIKE 'XS92500' 
  AND WIN NOT LIKE 'XS%a'
  AND TITLE = 'The Binge'

私はSQLが初めてなので、きれいではないかもしれませんが、うまくいきました。ただし、毎回 SQL を入力して手動で更新するのではなく、タイトルをスプレッドシートのセルから取得したパラメーターにする必要がありました。Connections>Properties>Definition>Edit Query に移動し、SQL を次のように変更することで、これを行うことができました。

    SELECT DISTINCT WIN
  FROM RETAIL.OFFER
  WHERE WIN LIKE 'XS%'
  AND WIN NOT LIKE 'XS92500' 
  AND WIN NOT LIKE 'XS%a'
  AND TITLE = ?

注: [クエリの編集] ボタンを実際に押したときにのみ機能し、[定義] ウィンドウで編集すると、すべての ' が曲線のアポストロフィに変更されました。次に、Excel は、? を置き換えるパラメーターを選択するように求めました。SQLで。スプレッドシートでセルを選択するか、パラメータに他の文字列を入力できます。接続に戻って、必要に応じてパラメーターを編集することもできます。
ここで、VBA マクロを使用してすべての接続を更新し、セルのデータをクエリに渡します。これは私のユースケースで機能します。この方法でパラメーターを作成することをすでに知っていて、VBAを使用する必要がある場合は申し訳ありません。VBA は PC では完全に動作しましたが、Mac でも動作しませんでした。うまくいけば、これはそこにいる誰かに役立つでしょう!

于 2016-05-19T04:35:38.127 に答える