ワークブックの「データ」と呼ばれるワークシートのいくつかの Excel テーブルにデータ (VBA および ADO を介して SqlServer ストアド プロシージャによって返される) をインポートする Excel 2007/2010 ワークブックを開発しました。次に、ADO (ワークブック自体を指す接続) を使用して、他のワークシートのデータを取得します。私がこの ADO レイヤーを気に入っているのは、データ アクセス レイヤー (データ ワークシート) とアプリケーション (他のすべてのワークシート) を明確に分離できるからです。取得したデータにいくつかの数式を追加する必要があるため、私の場合はピボット テーブルはオプションではありません。これは、ワークブックの接続文字列をセットアップする方法です
Private Function GetThisWorkbookCN() As String
Dim fileFullPath As String
fileFullPath = ThisWorkbook.FullName
GetThisWorkbookCN = "DSN=Excel Files;DBQ=" & fileFullPath
End Function
私の問題は、ワークブックが読み取り専用でない限り、すべてが正常に機能することです。この場合、接続は、開いているファイルではなく、保存されたワークブックを指します。開いたファイルからデータを取得するために接続を設定することは可能だと思いますか? 現在、ワークブックの各バージョンをローカルに保存するようにすべてのユーザーに強制していますが、これは避けたいと思います。
編集: Remou は、回避策として、データをローカル ファイル (csv またはその他の形式) に保存し、ワークブック自体ではなく、そのファイルに ADO を使用することを提案しました。これにより、メイン ファイルを読み取り専用モードで開くことができるため、メンテナンスの問題が回避されます。