4

こことグーグルで検索しましたが、まだ問題を解決できません。私の.vbsファイルでは、Excel の名前付き範囲を同等に使用しようとしています。以下はExcelのVBAで機能しますが、ファイルで機能させることはできません*.vbs

ThisWorkbook.Sheets(1).Range("A1:B" & Range("B" & Rows.Count).End(xlUp).Row).Name = "DATA"
strSql = "SELECT * FROM DATA"

そのため、名前付き範囲を参照するさまざまなバリエーションを試してみましたがDATA、うまくいきませんでした。
これは私が今持っているものです:

Set rng = ws.Range("A1:B2")
rng = "DATA"    
strSql = "SELECT * FROM DATA"

関連するいくつかの異なるバリエーション: パラメータ ByVal を取得する、DATA (文字列型) の代わりに rng を使用する、SELECT * FROM " & rng, etc..

実行時のエラー メッセージ:

Microsoft (R) Windows Script Host バージョン 5.8 Copyright (C) Microsoft Corporation. 全著作権所有。

C:\Users\admin\Desktop\UpdateSourceTbl.vbs(119, 5) Microsoft JET データベース エンジン: Microsoft Jet データベース エンジンは、オブジェクト 'DATA' を見つけることができませんでした。オブジェクトが存在すること、およびその名前とパス名のつづりが正しいことを確認してください。

どんな助けでも大歓迎です!

一時的な解決策: 行番号を含む 2 つのパラメーターを使用しましたが、最適な解決策ではない可能性がありますが、機能します! そして、私はそれが公平であるために何も悪いとは思わない

Call createAndInsertRecordSet(wb.FullName, ws.Name, i+1, j-1)
Sub CreateAndInsertRecordSet(ByVal fullname, ByVal wsName, ByVal stRow, byVal enRow )
strSql = "SELECT * FROM [" & wsName & "$B" & stRow & ":AX" & enRow & "]"
4

2 に答える 2

3

編集:行を変更してください

ws.Range("B2:AX2") = "MyRange"

activeworkbook.Names.Add Name:="myRange", RefersTo:="B2:AX2"

これで DATA という名前が適切に作成されると思います。

残念ながら、JET OLE DB プロバイダー/DB エンジンはメモリではなくディスク上のファイルで動作するため、ワークブックを保存しないと動作しない可能性があります。

ここで、必要な列を定義するためにSchema.iniファイルを動的に作成する必要があると思います。

JET は列にデータが表示されることを想定しているため、スキップする列がある場合は 、実行時にスキーマを動的に記述する必要があることを意味する場合でも、スキーマ ファイルでそれらを定義する必要があることに注意してください。

ここでのもう 1 つのポイントは、MS Excel で MS Query を使用してクエリを実行し、JET DB エンジンがDATA 範囲を認識できるかどうかを確認することで、発生しているエラーをチェック/デバッグできることです。

ADO / OLE DBを使用してExcelデータにアクセスする方法を読む必要があります

最初に、データの名前付き範囲を参照する方法を見つけるために、Excel で MS Query を開き、シートにクエリを実行します。

このサイトを参照してください: MS Query を使用して Excel をリレーショナル データ ソースとして扱う

以下のリンクを参照してください。

Excel の VB エディター内の Excel VBA で機能するものは、VBScript では同じように機能しないことを覚えておいてください。Type 宣言と Intellisense がないためです。

于 2013-04-05T16:02:11.133 に答える