1

ODBCを介してOracleから「データ」シートにデータをロードしているExcelシートがあります。次に、Excel SQLを適用して一部のデータをフィルタリングします

注: サーバー マシンで作業しているため、コード全体を貼り付けることができません。しかし、私が何を入れても100%正しいです。

'Load Data Sheet
Sql = Select * from oracleTable
. . . 
set rs1 = commandData.Execute() 'record set
'Then code to store rs1 values in to Data Sheet...
.
.
'Apply filter in Excel 
query = select col1,col2,col3 from [Data$A1:IV100] where col1='10'
set rs = commandData.Execute() 'record set

書き込みモードで開いたときに適切な結果を返します。ただし、ユーザーがシートのコンテンツを保護するためにシートを読み取り専用モードにすると。オラクルからデータをロードするように機能し、行でフィルターエクセルSQLを実行するとエラーが表示されます。

   set rs = commandData.Execute() ' Error at this line when opened in read only mode

エラー:

[Microsoft][ODBC Excel Driver] パラメータが少なすぎます。予想 1

Excel を読み取り専用で開いたときに一時ディレクトリで開くようなものなので、Excel クエリの実行中に、SQL を適用する正しいシートを見つけるのに苦労していますか?

4

2 に答える 2

1

.Execute() 関数を正しく使用していません。

行を返さない構文:

commandobject.Execute RecordsAffected, Parameters, Options 

行を返す構文:

Set recordsetobject = commandobject.Execute (RecordsAffected, Parameters, Options) 

詳細については、次のリンクを参照してください: http://www.devguru.com/technologies/ado/quickref/command_execute.html

于 2012-08-01T17:55:06.267 に答える
0

私自身、このエラーによく遭遇します。ハングアップした場合は、次のことを試してください。

  1. VBA エディタを開く
  2. Ctrl + G を押します (イミディエイト ウィンドウが開きます)。
  3. クエリを変数に割り当てた直後にコードにブレークポイントを設定します (この場合は直後の行)query =
  4. ブレークポイントでコードが壊れたら?query、イミディエイト ウィンドウに入力して Enter キーを押します。
  5. これにより、SQL ステートメントがイミディエイト ウィンドウに書き込まれます。
  6. エラーがないか SQL ステートメントを確認します (引用符の欠落など)。

イミディエイト ウィンドウから SQL ステートメントをデータベースに貼り付けて、クエリを実行することもできます。データベースがより具体的なエラー メッセージをスローする場合があり、それに応じて VBA コードを修正できます。

于 2012-08-01T18:22:06.423 に答える