Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


454 / 2272 ツリー ←次へ | 前へ→

【11644】AccessでのExcelシート操作で教えて下さい。 t_h_ben 10/4/29(木) 22:28 質問[未読]
【11645】Re:AccessでのExcelシート操作で教えて下さ... 超初心者 10/4/29(木) 23:04 発言[未読]
【11647】Re:AccessでのExcelシート操作で教えて下さ... 小僧 10/4/30(金) 18:30 発言[未読]
【11649】Re:AccessでのExcelシート操作で教えて下さ... t_h_ben 10/4/30(金) 23:02 お礼[未読]
【11648】Re:AccessでのExcelシート操作で教えて下さ... t_h_ben 10/4/30(金) 22:56 お礼[未読]

【11644】AccessでのExcelシート操作で教えて下さ...
質問  t_h_ben  - 10/4/29(木) 22:28 -

引用なし
パスワード
   Access VBAで教えて下さい。AccessのクエリのデータをExcelシートに貼り付けるコードを書きましたが、「RangeクラスのPasteSpecialメソッドが失敗しました。」のエラーが出ます。
Excelからのデータは一旦Temp.xlsに吐き出し、2行目のデータをコピーし、別のワークブックのシートに「値貼り付け」をしたいのです。
コピーするタイミングなどいろいろとコードを書き換えて試してみましたがうまくいきません。
ご教授宜しくお願いします。
(Windows XP/Access 2003/Excel 2003)

以下コードです。
=============================================================================

Private Sub コマンド91_Click()

On Error GoTo Err_コマンド91_Click

Dim xlApp As Object
Dim Fn As String
Dim xlFn As String
Fn = "c:\Temp\temp.xls" 'テンポラリブック
xlFn = "C:Sales.xls"

 DoCmd.OutputTo acOutputQuery,"Q_Sales_Vol",acFormatXLS,Fn,True, ""
 Set xlApp = GetObject(, "Excel.Application")
xlApp.Visible = True

With xlApp
  .ScreenUpdating = False
  .workbooks("temp.xls").Activate
  .Worksheets(1).Activate
  .Range("A2").Select
  .Range("A2:AL2").Select
  .selection.copy
  .workbooks.Open xlFn
  .Worksheets("Data").Activate
  .Range("A2").Select
  .selection.PasteSpecial Paste:=xlPasteValues '←ここでエラーが発生
  .activeworkbook.Worksheets("Sales_GR").Activate
  .range("A1").select
  .ScreenUpdating = True
  .activeworkbook.Close True
  .UserControl = True
Exit_コマンド91_Click:
On Error Resume Next
.DisplayAlerts = False
.Quit
.DisplayAlerts = True
Kill Fn
End With
Set xlApp = Nothing
Exit Sub
Err_コマンド91_Click:
MsgBox Err.Description
Resume Exit_コマンド91_Click

End Sub
=============================================================================

【11645】Re:AccessでのExcelシート操作で教えて下...
発言  超初心者  - 10/4/29(木) 23:04 -

引用なし
パスワード
   ▼t_h_ben さん:

コードを良く見てないですが、エラーの部分だけ^^;;

> .selection.PasteSpecial Paste:=xlPasteValues '←ここでエラーが発生
 .selection.PasteSpecial Paste:=-4163

としてみて下さい。
(エクセルのイミディエイトウィンドウで ?xlPasteValuesを
確認した数値です)

記憶があいまいですが、xlPasteValuesなどのエクセルの定数を
アクセスで使用するには、エクセルへの参照設定が必要だったかと。


違ったらゴメンなさい^^;

【11647】Re:AccessでのExcelシート操作で教えて下...
発言  小僧  - 10/4/30(金) 18:30 -

引用なし
パスワード
   ▼t_h_ben さん、超初心者 さん:
こんにちは。

> Excelからのデータは一旦Temp.xlsに吐き出し、
> 2行目のデータをコピーし、
> 別のワークブックのシートに「値貼り付け」をしたいのです。

目的とその方法論の問題になるのですが、
そもそも一旦Temp.xlsに吐き出す必要はあるのでしょうか?
中間Excelファイルも必要だという場合は
見当外れになりますがご容赦下さい。

該当クエリの2行目だけExcelに張り付けたいのであれば

SELECT TOP 1 T1.*
FROM (SELECT Top 2 * FROM Q_Sales_Vol ORDER BY ソート順フィールド名 ASC) AS T1
ORDER BY ソート順フィールド名 DESC;


の様なクエリを作成すれば
Access側で2行目だけのレコードを抜き出す事が可能です。

このクエリを出力すれば
Excelでのオートメーション操作は不要になるかと思われます。

【11648】Re:AccessでのExcelシート操作で教えて下...
お礼  t_h_ben  - 10/4/30(金) 22:56 -

引用なし
パスワード
   ▼超初心者 さん:

問題なく動作しました。
基本的なことのようで申し訳ありませんでした。
ご回答有難うございました。

>▼t_h_ben さん:
>
>コードを良く見てないですが、エラーの部分だけ^^;;
>
>> .selection.PasteSpecial Paste:=xlPasteValues '←ここでエラーが発生
> .selection.PasteSpecial Paste:=-4163
>
>としてみて下さい。
>(エクセルのイミディエイトウィンドウで ?xlPasteValuesを
>確認した数値です)
>
>記憶があいまいですが、xlPasteValuesなどのエクセルの定数を
>アクセスで使用するには、エクセルへの参照設定が必要だったかと。
>
>
>違ったらゴメンなさい^^;

【11649】Re:AccessでのExcelシート操作で教えて下...
お礼  t_h_ben  - 10/4/30(金) 23:02 -

引用なし
パスワード
   ▼小僧 さん:

一旦Temp.xlsへのコピーは、以前にそのような方法があると教えて頂いたことがあり使っているもので、大きな意味はありません。
お教え頂いたSQLは不勉強で、どのように仕込めばいいのかわかりませんので、勉強してTryしたいと思います。
有難うございました。

>▼t_h_ben さん、超初心者 さん:
>こんにちは。
>
>> Excelからのデータは一旦Temp.xlsに吐き出し、
>> 2行目のデータをコピーし、
>> 別のワークブックのシートに「値貼り付け」をしたいのです。
>
>目的とその方法論の問題になるのですが、
>そもそも一旦Temp.xlsに吐き出す必要はあるのでしょうか?
>中間Excelファイルも必要だという場合は
>見当外れになりますがご容赦下さい。
>
>該当クエリの2行目だけExcelに張り付けたいのであれば
>
>SELECT TOP 1 T1.*
>FROM (SELECT Top 2 * FROM Q_Sales_Vol ORDER BY ソート順フィールド名 ASC) AS T1
>ORDER BY ソート順フィールド名 DESC;
>
>
>の様なクエリを作成すれば
>Access側で2行目だけのレコードを抜き出す事が可能です。
>
>このクエリを出力すれば
>Excelでのオートメーション操作は不要になるかと思われます。

454 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078193
(SS)C-BOARD v3.8 is Free