Access VBA質問箱 IV

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

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


95 / 500 ページ ←次へ | 前へ→

【11395】Re:フォームで抽出したデータをExcel出力
回答  VBA初心者  - 10/1/19(火) 13:42 -

引用なし
パスワード
   小僧 さん
 質問の仕方が抽象的でした。
申し訳ございません。

>For i = 0 To RS.Fields.Count - 1
>  .Range("A1").Offset(0, i).Value = RS.Fields(i).Name
>  Debug.Print RS.Fields(i).Name
>Next i

とフォームプロシージャに記載して、「イミディエイト」に
「? RS.Fields(i).Name」と記述してEnterを押すと
「実行時エラー'424'オブジェクトが必要です。」と表示され
てしまい、構文中での変数のイミディエイトウィンドウ
の使い方がわかりません。
 フォームプロシージャだから利用できないのでしょうか?
ただ、「? acSpreadsheetTypeExcel8」のように定数を調べる
場合は「8」と表示されます。
 

お手数ですが、ご教授をよろしくお願いします。

>▼小僧 さん:
> こんにちわ。
>VBA初心者です。
>いろいろご教授有難うございます。
>
>>For i = 0 To RS.Fields.Count - 1
>>  .Range("A1").Offset(0, i).Value = RS.Fields(i).Name
>>  Debug.Print RS.Fields(i).Name
>>Next i
>>
>>の様に記述してあげる事で
>>変数の中身などをイミディエイトウィンドウに書き出す事ができます。 
>
>を試したのですが、何も起こりません。手順としては、「Debug.Print RS.Fields(i).Name」
>のiに0や1や2を入力してみたのですが何も起こりません。 
> やり方が間違っているように思われるのですが、何が間違っているのかがわかりません。
>
>ご面倒をお掛けして申し訳ございません。
>お時間のあるときご教授をお願いします。
>
>
>>▼VBA初心者 さん:
>>こんにちは。
>>
>>> 「xlsWkb.SaveAs xlsFileName, FileFormat:=56」としたら問題なくできました。
>>
>>まずは解決されまして何よりです。
>>
>>
>>> また、下記のコードの意味が曖昧です。
>>
>>Excel の CopyFromRecordset メソッドは
>>データ行のみの書き出しで見出し行がつきません。
>>
>>>> .Range("A2").CopyFromRecordset RS
>>
>>という事でデータは
>>セル:A2を始点として書き出しております。
>>
>>
>>>>> strSQL = strSQL & " SELECT 登録日 "
>>>>> strSQL = strSQL & "   , QH_COMM AS 事業所 "
>>>>> strSQL = strSQL & "   , NEW_HOSTNAME AS 新PC名 "
>>>>> strSQL = strSQL & "   , QH_IPADR AS IPアドレス "
>>>>> strSQL = strSQL & "   , MEMO2 AS メモ1 "
>>>>> strSQL = strSQL & "   , MEMO3 AS メモ2 "
>>>>> strSQL = strSQL & "   , MEMO4 As メモ3 "
>>>>> strSQL = strSQL & "   , MEMO5 As 事項 "
>>>>> strSQL = strSQL & " FROM " & Me.RecordSource & " "
>>>>> strSQL = strSQL & " WHERE " & strWhere
>>
>>>> For i = 0 To RS.Fields.Count - 1
>>>> .Range("A1").Offset(0, i).Value = RS.Fields(i).Name
>>>> Next i
>>
>>上記コードは
>>Recordset オブジェクトに格納されたデータの項目を総なめして
>>セル:A1を基準にColumn方向にずらしながら
>>見出し行の書き出しを行っています。
>>
>>RS.Fields(0).Name = 登録日
>>RS.Fields(1).Name = 事業所
>>RS.Fields(2).Name = 新PC名
>>・
>>・
>>という感じですね。
>>
>>
>>> 表示だけはしていたのですが、使いこなせてなく宝の持ち腐れでした。
>>
>>プログラムが完成してしまえば必要ないのですが、
>>開発中は何かと頼りになるウィンドウですね。
>>
>>For i = 0 To RS.Fields.Count - 1
>>  .Range("A1").Offset(0, i).Value = RS.Fields(i).Name
>>  Debug.Print RS.Fields(i).Name
>>Next i
>>
>>の様に記述してあげる事で
>>変数の中身などをイミディエイトウィンドウに書き出す事ができます。
>>
>>ExcelVBAの例ですが
>>以下のサイトが参考になるかもしれません。
>>
>>Excelでお仕事
>>デバッグトレースの開始方法
>>h tp://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub04_030.html
・ツリー全体表示

【11394】Re:Access→Excel Export時の書式指定
お礼  cocoa  - 10/1/18(月) 15:30 -

引用なし
パスワード
   ▼小僧様
こんにちわ。

>フィールドの「フィールド6」を Format([フィールド6],"h:nn") にすると
>プログラムはそのまま行けそうですね
Accessはh:nnなんですね。大変勉強になりました。

VBAでした(汗)
ご指摘ありがとうございます。

ありがとうございました。解決致しました。
・ツリー全体表示

【11393】Excelの出力について
質問  坂井  - 10/1/18(月) 10:41 -

引用なし
パスワード
   クエリ(Table_003)を既存のExcel003.xlsに出力するため、以下のコードを
実行し、ずっと使ってましたが、急に動きがおかしくなりました。
その原因を調べましたが、知識不足で、わかりません。
教えていただきたいです。
よろしくお願いします。

・環境
 OS:WindowsXP
 ACCESS:2003
 EXCEL:2003
現象:Excel003.xlsへの出力結果は、
   一行しか出力されていない、その以外のデータは全く出力されていない。

Private Sub コマンド4_Click()

Const csXlPath As String = "C:\Excel003.xls"
Dim i As Long
Dim xlsApp As Object
Dim xlsWkb As Object
Dim rs As DAO.Recordset
  Set rs = CurrentDb.OpenRecordset("Table_003", dbOpenSnapshot)
  Set xlsApp = CreateObject("Excel.Application")
  Set xlsWkb = xlsApp.Workbooks.Open(csXlPath)
 
  With xlsWkb.Sheets("shiharaimeisai")
    .Range("A1:R60000").ClearContents
    For i = 1 To rs.Fields.Count
      .Cells(1, i).Value = rs(i - 1).Name
    Next
    .Range("A2").CopyFromRecordset rs
  End With
  xlsWkb.Close True: Set xlsWkb = Nothing
  xlsApp.Quit: Set xlsApp = Nothing

End Sub
・ツリー全体表示

【11392】Re:フォームで抽出したデータをExcel出力
回答  VBA初心者  - 10/1/15(金) 18:31 -

引用なし
パスワード
   ▼小僧 さん:
 こんにちわ。
VBA初心者です。
いろいろご教授有難うございます。

>For i = 0 To RS.Fields.Count - 1
>  .Range("A1").Offset(0, i).Value = RS.Fields(i).Name
>  Debug.Print RS.Fields(i).Name
>Next i
>
>の様に記述してあげる事で
>変数の中身などをイミディエイトウィンドウに書き出す事ができます。 

を試したのですが、何も起こりません。手順としては、「Debug.Print RS.Fields(i).Name」
のiに0や1や2を入力してみたのですが何も起こりません。 
 やり方が間違っているように思われるのですが、何が間違っているのかがわかりません。

ご面倒をお掛けして申し訳ございません。
お時間のあるときご教授をお願いします。


>▼VBA初心者 さん:
>こんにちは。
>
>> 「xlsWkb.SaveAs xlsFileName, FileFormat:=56」としたら問題なくできました。
>
>まずは解決されまして何よりです。
>
>
>> また、下記のコードの意味が曖昧です。
>
>Excel の CopyFromRecordset メソッドは
>データ行のみの書き出しで見出し行がつきません。
>
>>> .Range("A2").CopyFromRecordset RS
>
>という事でデータは
>セル:A2を始点として書き出しております。
>
>
>>>> strSQL = strSQL & " SELECT 登録日 "
>>>> strSQL = strSQL & "   , QH_COMM AS 事業所 "
>>>> strSQL = strSQL & "   , NEW_HOSTNAME AS 新PC名 "
>>>> strSQL = strSQL & "   , QH_IPADR AS IPアドレス "
>>>> strSQL = strSQL & "   , MEMO2 AS メモ1 "
>>>> strSQL = strSQL & "   , MEMO3 AS メモ2 "
>>>> strSQL = strSQL & "   , MEMO4 As メモ3 "
>>>> strSQL = strSQL & "   , MEMO5 As 事項 "
>>>> strSQL = strSQL & " FROM " & Me.RecordSource & " "
>>>> strSQL = strSQL & " WHERE " & strWhere
>
>>> For i = 0 To RS.Fields.Count - 1
>>> .Range("A1").Offset(0, i).Value = RS.Fields(i).Name
>>> Next i
>
>上記コードは
>Recordset オブジェクトに格納されたデータの項目を総なめして
>セル:A1を基準にColumn方向にずらしながら
>見出し行の書き出しを行っています。
>
>RS.Fields(0).Name = 登録日
>RS.Fields(1).Name = 事業所
>RS.Fields(2).Name = 新PC名
>・
>・
>という感じですね。
>
>
>> 表示だけはしていたのですが、使いこなせてなく宝の持ち腐れでした。
>
>プログラムが完成してしまえば必要ないのですが、
>開発中は何かと頼りになるウィンドウですね。
>
>For i = 0 To RS.Fields.Count - 1
>  .Range("A1").Offset(0, i).Value = RS.Fields(i).Name
>  Debug.Print RS.Fields(i).Name
>Next i
>
>の様に記述してあげる事で
>変数の中身などをイミディエイトウィンドウに書き出す事ができます。
>
>ExcelVBAの例ですが
>以下のサイトが参考になるかもしれません。
>
>Excelでお仕事
>デバッグトレースの開始方法
>h tp://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub04_030.html
・ツリー全体表示

【11391】Re:トランザクションにまつわる質問
お礼  TOMONORI E-MAIL  - 10/1/15(金) 18:26 -

引用なし
パスワード
   報告が遅れてすみません。
GetRowsでうまくいきました。
小僧さんありがとうございました。

開発のほうはいったんコミットしてから後でテーブルを削除する
仕様で提出してしまったのですが、GetRowsの存在は今まで知らなかったので
大変参考になりました。

いつか回答者の側で来られるように精進します。
ありがとうございました。
・ツリー全体表示

【11390】Re:フォームで抽出したデータをExcel出力
回答  小僧  - 10/1/15(金) 18:11 -

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

> 「xlsWkb.SaveAs xlsFileName, FileFormat:=56」としたら問題なくできました。

まずは解決されまして何よりです。


> また、下記のコードの意味が曖昧です。

Excel の CopyFromRecordset メソッドは
データ行のみの書き出しで見出し行がつきません。

>> .Range("A2").CopyFromRecordset RS

という事でデータは
セル:A2を始点として書き出しております。


>>> strSQL = strSQL & " SELECT 登録日 "
>>> strSQL = strSQL & "   , QH_COMM AS 事業所 "
>>> strSQL = strSQL & "   , NEW_HOSTNAME AS 新PC名 "
>>> strSQL = strSQL & "   , QH_IPADR AS IPアドレス "
>>> strSQL = strSQL & "   , MEMO2 AS メモ1 "
>>> strSQL = strSQL & "   , MEMO3 AS メモ2 "
>>> strSQL = strSQL & "   , MEMO4 As メモ3 "
>>> strSQL = strSQL & "   , MEMO5 As 事項 "
>>> strSQL = strSQL & " FROM " & Me.RecordSource & " "
>>> strSQL = strSQL & " WHERE " & strWhere

>> For i = 0 To RS.Fields.Count - 1
>> .Range("A1").Offset(0, i).Value = RS.Fields(i).Name
>> Next i

上記コードは
Recordset オブジェクトに格納されたデータの項目を総なめして
セル:A1を基準にColumn方向にずらしながら
見出し行の書き出しを行っています。

RS.Fields(0).Name = 登録日
RS.Fields(1).Name = 事業所
RS.Fields(2).Name = 新PC名


という感じですね。


> 表示だけはしていたのですが、使いこなせてなく宝の持ち腐れでした。

プログラムが完成してしまえば必要ないのですが、
開発中は何かと頼りになるウィンドウですね。

For i = 0 To RS.Fields.Count - 1
  .Range("A1").Offset(0, i).Value = RS.Fields(i).Name
  Debug.Print RS.Fields(i).Name
Next i

の様に記述してあげる事で
変数の中身などをイミディエイトウィンドウに書き出す事ができます。

ExcelVBAの例ですが
以下のサイトが参考になるかもしれません。

Excelでお仕事
デバッグトレースの開始方法
h tp://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub04_030.html
・ツリー全体表示

【11389】Re:フォームで抽出したデータをExcel出力
回答  VBA初心者  - 10/1/15(金) 17:33 -

引用なし
パスワード
   ▼小僧 さん:
 こんにちは。
>不必要な引用は避ける用にしましょう。
 申し訳ございません。不必要な引用は今後気をつけます。

>>クエリ式'登録日 'の構文エラー:演算子がありません。」というメッセージ
>>が表示されます。  
 strSQL = strSQL & " , QH_COMM AS 事業所 "
の「& " ,」の間を半角スペース一つにしたらできました。

>VBA初心者さんの環境で Excel2007 を使われていないでしょうか?
申し遅れました。Excel2007を使っています。
「xlsWkb.SaveAs xlsFileName, FileFormat:=56」としたら問題なくできました。

>Ctrl + G キーを押しイミディエイトウィンドウを出現させ、
>そこに
>? acSpreadsheetTypeExcel8  
 イミディエイトウィンドウで見て納得できました。
表示だけはしていたのですが、使いこなせてなく宝の持ち腐れでした。
ありがとうございます。

また、下記のコードの意味が曖昧です。お時間のあるときご教授を
お願いします。


> Set xlsApp = CreateObject("Excel.Application")
>    xlsApp.Visible = True
    エクセルのアプリケーションをセットする。
 
>  Set xlsWkb = xlsApp.workbooks.Add
>    With xlsWkb.Sheets("Sheet1")
    sheet1を作業領域にする
  
>    For i = 0 To RS.Fields.Count - 1
>      .Range("A1").Offset(0, i).Value = RS.Fields(i).Name
>    Next i
     A1セルをフィールドにする...みたいな記述と考えましたが
     よくわかりません。ご教授をお願いします。
    
>    .Range("A2").CopyFromRecordset RS
     A2セルからレコードデータをセットする。
>    .Columns("A:K").AutoFit
     A〜Kセルを自動的にデータをシート内にフィットさせる。
>    End With
  
>  xlsWkb.SaveAs xlsFileName, FileFormat:=56
   Excel2000形式で保存する。
>  xlsWkb.Close: Set xlsWkb = Nothing
    クローズ
>  xlsApp.Quit: Set xlsApp = Nothing
    処理を抜ける。

以上、お手数ですが、よろしくお願い致します。


>▼VBA初心者 さん:
>こんにちは。
>
>メールのやりとりだと問題ないのですが
>無料で貸して使わせて頂いている掲示版ですので
>不必要な引用は避ける用にしましょう。
>
>> いろいろなサイトから探してみました。
>
>先に提示させて頂いたURLに
>
>> h tp://msdn.microsoft.com/en-us/library/bb225982.aspx
>
>Value 8 がMicrosoft Excel 97 format、Microsoft Excel 2000 format
>となっていますね。
>
>>クエリ式'登録日 'の構文エラー:演算子がありません。」というメッセージ
>>が表示されます。
>
>こちらの掲示板の仕様で
>半角スペースが続くと全角スペースに
>置換されてしまう場合がある模様です。
>
>VBエディタにペーストしたタイミングで
>全角スペースがあるようでしたら
>半角スペースに置き換えて下さい。
>
>> エラーメッセージが表示されてしまいます。
>
>こちらで再現しなかったので
>色々Webを調べてみたのですが…。
>
>VBA初心者さんの環境で Excel2007 を使われていないでしょうか?
>その場合は通常開くExcelの拡張子が xlsx になる筈ですので
>
>xlsFileName = "C:\" & Format(Date, "yyyy_mm_dd") & "ホストデータ.xlsx"
>
>にすればエラーが出なくなるかと思われます。
>
>
>また、拡張子 xls で保存されたいのであれば
>
>xlsWkb.SaveAs xlsFileName, FileFormat:=56
>
>の様に記述してみて下さい。
>
>
>以下補足です-------------------------------------------------------------
>
>以前に提示させて頂いた回答で
>
>> DoCmd.TransferSpreadsheet acExport, 8, "Q_Rireki", xlsFileName, True
>
>とありましたが、
>
>DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel8, "Q_Rireki", xlsFileName, True
>
>の様にAccessの定数を使うのが一般的かと思われます。
>
>Ctrl + G キーを押しイミディエイトウィンドウを出現させ、
>そこに
>? acSpreadsheetTypeExcel8
>
>と入力し、Enterキーを押してみて下さい。
>
>8 という結果が返って来たかと思われます。
>
>acSpreadsheetTypeExcel8 という定数を AccessVBAにおいて
>数値に変換すると 8 という値になるという意味です。
>次に
>
>? xlExcel8
>
>と入力するとどうなるでしょうか。
>通常は何も値を返さないかと思われます。
>
>今度は Excelを起動し、VBエディタのウィンドウにイミディエイトウィンドウを表示させ
>(Excel2007の場合は開発タブをリボンに表示させる必要があった気がします)
>
>? xlExcel8
>
>と入力すると 56 という値が返ります。
>
>先のコードにある
>
>> FileFormat:=56
>
>はこの数値を指します。
>
>
>Excelへの参照設定を行うと
>AccessからExcelの定数を使う事も可能です。
>(Excel 参照設定 でWeb検索するとやり方等も探せるかと思われます。)
>
>ただし、Ac2007、Ex2007 で作ったプログラムを
>Ac2003、Ex2003 の環境で実行するとエラーが出る事がありますので
>注意して下さい。
・ツリー全体表示

【11388】Re:Access→Excel Export時の書式指定
回答  小僧  - 10/1/15(金) 15:28 -

引用なし
パスワード
   ▼cocoa さん:
こんにちは。

>このクエリで作ったtimeTableの時刻をh:mmの書式で表せないでしょうか?

テーブルをデザインビューを開いて書式を変更するのではなく、
クエリをデザインビューで開いて
フィールドの「フィールド6」を Format([フィールド6],"h:nn") にすると
プログラムはそのまま行けそうですね。

※ h:mm でも可能です

>上記vbsを用いて

VBAのタイプミスで大丈夫でしょうか?
VBScript という言語が VBS と略され
同じ様にプログラムできますので…。
・ツリー全体表示

【11387】Re:フォームで抽出したデータをExcel出力
回答  小僧  - 10/1/15(金) 15:04 -

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

メールのやりとりだと問題ないのですが
無料で貸して使わせて頂いている掲示版ですので
不必要な引用は避ける用にしましょう。

> いろいろなサイトから探してみました。

先に提示させて頂いたURLに

> h tp://msdn.microsoft.com/en-us/library/bb225982.aspx

Value 8 がMicrosoft Excel 97 format、Microsoft Excel 2000 format
となっていますね。

>クエリ式'登録日 'の構文エラー:演算子がありません。」というメッセージ
>が表示されます。

こちらの掲示板の仕様で
半角スペースが続くと全角スペースに
置換されてしまう場合がある模様です。

VBエディタにペーストしたタイミングで
全角スペースがあるようでしたら
半角スペースに置き換えて下さい。

> エラーメッセージが表示されてしまいます。

こちらで再現しなかったので
色々Webを調べてみたのですが…。

VBA初心者さんの環境で Excel2007 を使われていないでしょうか?
その場合は通常開くExcelの拡張子が xlsx になる筈ですので

xlsFileName = "C:\" & Format(Date, "yyyy_mm_dd") & "ホストデータ.xlsx"

にすればエラーが出なくなるかと思われます。


また、拡張子 xls で保存されたいのであれば

xlsWkb.SaveAs xlsFileName, FileFormat:=56

の様に記述してみて下さい。


以下補足です-------------------------------------------------------------

以前に提示させて頂いた回答で

> DoCmd.TransferSpreadsheet acExport, 8, "Q_Rireki", xlsFileName, True

とありましたが、

DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel8, "Q_Rireki", xlsFileName, True

の様にAccessの定数を使うのが一般的かと思われます。

Ctrl + G キーを押しイミディエイトウィンドウを出現させ、
そこに
? acSpreadsheetTypeExcel8

と入力し、Enterキーを押してみて下さい。

8 という結果が返って来たかと思われます。

acSpreadsheetTypeExcel8 という定数を AccessVBAにおいて
数値に変換すると 8 という値になるという意味です。
次に

? xlExcel8

と入力するとどうなるでしょうか。
通常は何も値を返さないかと思われます。

今度は Excelを起動し、VBエディタのウィンドウにイミディエイトウィンドウを表示させ
(Excel2007の場合は開発タブをリボンに表示させる必要があった気がします)

? xlExcel8

と入力すると 56 という値が返ります。

先のコードにある

> FileFormat:=56

はこの数値を指します。


Excelへの参照設定を行うと
AccessからExcelの定数を使う事も可能です。
(Excel 参照設定 でWeb検索するとやり方等も探せるかと思われます。)

ただし、Ac2007、Ex2007 で作ったプログラムを
Ac2003、Ex2003 の環境で実行するとエラーが出る事がありますので
注意して下さい。
・ツリー全体表示

【11386】Re:フォームで抽出したデータをExcel出力
回答  VBA初心者  - 10/1/15(金) 14:19 -

引用なし
パスワード
   ▼小僧 さん:
 こんにちは。
VBA初心者です。
>TransferSpreadsheet のヘルプはご覧になられましたか?
>(Accessのヘルプではなく、VBAのヘルプですね)
 いろいろなサイトから探してみました。その結果、
「acExport, 8,」の部分はexcel2000と97形式みたいなことが
書かれてました。自信がないので教えてくだされば幸いです。

>オートメーションを使う必要がありそうですね。
参考記述例を書いて頂きありがとうございます。
かなりの勉強になります。

>strSQL = ""
>strSQL = strSQL & " SELECT 登録日 "
>strSQL = strSQL & "   , QH_COMM AS 事業所 "
>strSQL = strSQL & "   , NEW_HOSTNAME AS 新PC名 "
>strSQL = strSQL & "   , QH_IPADR AS IPアドレス "
>strSQL = strSQL & "   , MEMO2 AS メモ1 "
>strSQL = strSQL & "   , MEMO3 AS メモ2 "
>strSQL = strSQL & "   , MEMO4 As メモ3 "
>strSQL = strSQL & "   , MEMO5 As 事項 "
>strSQL = strSQL & " FROM " & Me.RecordSource & " "
>strSQL = strSQL & " WHERE " & strWhere
の形式で記述すると、 
 「実行時エラー'3075'
クエリ式'登録日 'の構文エラー:演算子がありません。」というメッセージ
が表示されます。

strSQL = "SELECT 登録日,QH_COMM AS 事業所,NEW_HOSTNAME AS 新PC名,QH_IPADR AS IPアドレス,NEW_USERNAME AS 新ユーザ名,NEW_DOMAIN AS 新ドメイン名,Office判定,ソフト1,ソフト2,ソフト3,特記事項 FROM " & Me.RecordSource _
      & " WHERE " & Me.Filter
の形式にしたらエラーメッセージが表示されないで処理されます。
書き方の違いだと思うのですが、どこが違うのかが判別できません。


また、出力したエクセルファイルを開こうとすると、
「ファイル各k銚子が示す形式と異なります。このファイルが破損していなこと、信頼できる
発行元からのファイルであることを確認して下さい。ファイルを今すぐ開きますか?」 
 のエラーメッセージが表示されてしまいます。
エクセルファイルを保存するときに「,FileFormat:=XlFileFormat.xlExcel8」の記述を入れたいのですが、どのタイミングで挿入すべきかわかりません。

どうかお時間のあるときご教授願います。 
 

>▼VBA初心者 さん:
>こんにちは。
>
>>「acExport, 8,」の部分が解釈できません。
>
>TransferSpreadsheet のヘルプはご覧になられましたか?
>(Accessのヘルプではなく、VBAのヘルプですね)
>
>英語のページしか見つかりませんでしたが
>MSの
>
>h tp://msdn.microsoft.com/en-us/library/bb225982.aspx
>MSのサイトにもありますね。
>
>
>> エクセルのセル内に綺麗に収まり画面にデータが出力されます。
>> TransferSpreadsheetを使っても同じように出力できますでしょうか。
>
>Output To メソッド も TransferSpreadsheet も
>お手軽にExcelへの出力を行ってくれる半面
>今回の様に細かく書式やセルの大きさを設定できない
>欠点もあります。
>
>以前に
>
>>> Output To メソッドを使った後に書式を変更する事も可能ですが
>>> ExcelVBAとオートメーションの知識が必要となってきます。
>
>と回答させて頂きましたが、
>オートメーションを使う必要がありそうですね。
>
>Private Sub コマンド35_Click()
>Dim DB As DAO.Database
>Dim RS As DAO.Recordset
>Dim strSQL As String
>Dim strWhere As String
>Dim xlsApp As Object
>Dim xlsWkb As Object
>Dim xlsFileName As String
>Dim i As Long
>
>  'フィルタを掛けた時点で Hitするものがなかったような場合は
>  'メッセージを出して処理を中止します。
>  If Me.Recordset.EOF Then
>    MsgBox Prompt:="出力するデータがありませぬ" _
>       , Buttons:=vbExclamation
>    Exit Sub
>  End If
>
>  Set DB = CurrentDb
>  xlsFileName = "C:\" & Format(Date, "yyyy_mm_dd") & "ホストデータ.xls"
>  
>  'もし Filterプロパティになにも記述されていなかったら
>  'フォームに表示されている全データを出力するようにします。
>  
>  If Me.Filter = "" Then
>    strWhere = True
>  Else
>    strWhere = Me.Filter
>  End If
>
>  
>  '変数に SQL文を代入します。
>  'Filter プロパティに記述されているものを抽出条件とします。
>  
>  strSQL = ""
>  strSQL = strSQL & " SELECT 登録日 "
>  strSQL = strSQL & "   , QH_COMM AS 事業所 "
>  strSQL = strSQL & "   , NEW_HOSTNAME AS 新PC名 "
>  strSQL = strSQL & "   , QH_IPADR AS IPアドレス "
>  strSQL = strSQL & "   , MEMO2 AS メモ1 "
>  strSQL = strSQL & "   , MEMO3 AS メモ2 "
>  strSQL = strSQL & "   , MEMO4 As メモ3 "
>  strSQL = strSQL & "   , MEMO5 As 事項 "
>  strSQL = strSQL & " FROM " & Me.RecordSource & " "
>  strSQL = strSQL & " WHERE " & strWhere
>
>  'レコードセットに対象のデータを代入します
>  Set RS = DB.OpenRecordset(strSQL, dbOpenSnapshot)
>    
>  '以下Excelの操作------------------------------------------
>  Set xlsApp = CreateObject("Excel.Application")
>    xlsApp.Visible = True
>  
>  Set xlsWkb = xlsApp.workbooks.Add
>    With xlsWkb.Sheets("Sheet1")
>    
>    For i = 0 To RS.Fields.Count - 1
>      .Range("A1").Offset(0, i).Value = RS.Fields(i).Name
>    Next i
>    
>    .Range("A2").CopyFromRecordset RS
>    .Columns("A:H").AutoFit
>    End With
>    
>    xlsWkb.SaveAs xlsFileName
>  xlsWkb.Close: Set xlsWkb = Nothing
>  xlsApp.Quit: Set xlsApp = Nothing
>  
>  MsgBox "出力が終了しました"
>    
>End Sub
>
>
>ご参考になれば幸いです。
・ツリー全体表示

【11385】Access→Excel Export時の書式指定
質問  cocoa  - 10/1/15(金) 11:10 -

引用なし
パスワード
   いつもお世話になっております。

【環境】
Access2003
Excel2003
WindowsXP

【内容】
time.txtをテーブルのリンクでリンク(timeTable)しております。
time.txtの内容は、フィールド1〜フィールド6 まであり、
フィールド6は時刻となります。書式はh:mm:ssです。

timeTableのデザインビューでフィールド6の書式を
h:mmに変更しました。

クエリで、timeTableの集計をとる為、最大や最小を使いました。
すると、フィールド6の時刻がh:mm:ssで表示されています。

このクエリで作ったtimeTableの時刻をh:mmの書式で表せないでしょうか?

もしくは、Exportする際に書式を設定できないでしょうか?
DoCmd.OutputTo acOutputQuery, "Q_timeTable", acFormatXLS, "time.xls", False

上記vbsを用いて、Exportしております。何か書き足せば書式設定を指定して、Exportできないでしょうか?

説明がへたくそで申し訳ありませんが、宜しくお願いします。
・ツリー全体表示

【11384】Re:フォームで抽出したデータをExcel出力
回答  小僧  - 10/1/15(金) 10:20 -

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

>「acExport, 8,」の部分が解釈できません。

TransferSpreadsheet のヘルプはご覧になられましたか?
(Accessのヘルプではなく、VBAのヘルプですね)

英語のページしか見つかりませんでしたが
MSの

h tp://msdn.microsoft.com/en-us/library/bb225982.aspx
MSのサイトにもありますね。


> エクセルのセル内に綺麗に収まり画面にデータが出力されます。
> TransferSpreadsheetを使っても同じように出力できますでしょうか。

Output To メソッド も TransferSpreadsheet も
お手軽にExcelへの出力を行ってくれる半面
今回の様に細かく書式やセルの大きさを設定できない
欠点もあります。

以前に

>> Output To メソッドを使った後に書式を変更する事も可能ですが
>> ExcelVBAとオートメーションの知識が必要となってきます。

と回答させて頂きましたが、
オートメーションを使う必要がありそうですね。

Private Sub コマンド35_Click()
Dim DB As DAO.Database
Dim RS As DAO.Recordset
Dim strSQL As String
Dim strWhere As String
Dim xlsApp As Object
Dim xlsWkb As Object
Dim xlsFileName As String
Dim i As Long

  'フィルタを掛けた時点で Hitするものがなかったような場合は
  'メッセージを出して処理を中止します。
  If Me.Recordset.EOF Then
    MsgBox Prompt:="出力するデータがありませぬ" _
       , Buttons:=vbExclamation
    Exit Sub
  End If

  Set DB = CurrentDb
  xlsFileName = "C:\" & Format(Date, "yyyy_mm_dd") & "ホストデータ.xls"
  
  'もし Filterプロパティになにも記述されていなかったら
  'フォームに表示されている全データを出力するようにします。
  
  If Me.Filter = "" Then
    strWhere = True
  Else
    strWhere = Me.Filter
  End If

  
  '変数に SQL文を代入します。
  'Filter プロパティに記述されているものを抽出条件とします。
  
  strSQL = ""
  strSQL = strSQL & " SELECT 登録日 "
  strSQL = strSQL & "   , QH_COMM AS 事業所 "
  strSQL = strSQL & "   , NEW_HOSTNAME AS 新PC名 "
  strSQL = strSQL & "   , QH_IPADR AS IPアドレス "
  strSQL = strSQL & "   , MEMO2 AS メモ1 "
  strSQL = strSQL & "   , MEMO3 AS メモ2 "
  strSQL = strSQL & "   , MEMO4 As メモ3 "
  strSQL = strSQL & "   , MEMO5 As 事項 "
  strSQL = strSQL & " FROM " & Me.RecordSource & " "
  strSQL = strSQL & " WHERE " & strWhere

  'レコードセットに対象のデータを代入します
  Set RS = DB.OpenRecordset(strSQL, dbOpenSnapshot)
    
  '以下Excelの操作------------------------------------------
  Set xlsApp = CreateObject("Excel.Application")
    xlsApp.Visible = True
  
  Set xlsWkb = xlsApp.workbooks.Add
    With xlsWkb.Sheets("Sheet1")
    
    For i = 0 To RS.Fields.Count - 1
      .Range("A1").Offset(0, i).Value = RS.Fields(i).Name
    Next i
    
    .Range("A2").CopyFromRecordset RS
    .Columns("A:H").AutoFit
    End With
    
    xlsWkb.SaveAs xlsFileName
  xlsWkb.Close: Set xlsWkb = Nothing
  xlsApp.Quit: Set xlsApp = Nothing
  
  MsgBox "出力が終了しました"
    
End Sub


ご参考になれば幸いです。
・ツリー全体表示

【11383】Re:読取専用ADPの作成方法
発言  YU-TANG  - 10/1/14(木) 21:15 -

引用なし
パスワード
   こんばんは、YU-TANG です。

>以下のいずれかの理由により、hogeプロジェクト 'fuga' は読み取り専用で開かれます。
>他のユーザーにより編集がロックされているか、または、このファイルかこのファイルがあるフォルダが読み取り専用に設定されているか、または、このファイルを読み取り専用で開くように指定しました。

下記と関係ありませんか?

[ACC2003] マルチユーザー環境で Access プロジェクトまたはエクステンション ファイルを開くと "プロジェクト名は読み取り専用で開かれます" エラー メッセージが表示される
support.microsoft.com/kb/824266/ja

それでは。
・ツリー全体表示

【11382】Re:フォームでの入力
お礼  マツ  - 10/1/14(木) 12:08 -

引用なし
パスワード
   ▼hatena さん:
>新規に作成したフォームの設定を一つずつ、問題のフォームと
>同じように設定していって、入力できなくなった直前に変更した
>設定に問題があることになりますね。
>
>現状だと、地道に上記のことをするのが結局早道のように
>思います。

返事が遅くなりすみません。
上記の方法で見比べてみたのですが、変化は無くよくわからなかったので
再度同じフォームを作成したら、入力できるようになりました・・・
原因はわからずですが、いろいろありがとうございました。
・ツリー全体表示

【11381】Re:フォームで抽出したデータをExcel出力
回答  VBA初心者  - 10/1/14(木) 10:38 -

引用なし
パスワード
   ▼小僧 さん:
 こんにちは。お忙しい中ご教授ありがとうございます。

>Dim xlsFileName As String
>  xlsFileName = "D:\" & Format(Date, "yyyy_mm_dd") & "ホストデータ.xls"
>
>が正しいですね。
 ありがとうございました。解決しました。

>  DoCmd.TransferSpreadsheet acExport, 8, "Q_Rireki", xlsFileName, True
 の記載にてファイル名やデータ出力形式など思うように出力できましたが、
  DoCmd.OutputTo ObjectType:=acOutputQuery _
         , ObjectName:="Q_Rireki" _
         , OutputFormat:=acFormatXLS _
         , OutputFile:=xlsFileName _
         , AutoStart:=True
のように「OutputTo」メソッドを利用した場合はフィールド名やレコードが
エクセルのセル内に綺麗に収まり画面にデータが出力されます。
 TransferSpreadsheetを使っても同じように出力できますでしょうか。
また、DoCmd.TransferSpreadsheet acExport, 8,の記述にて参考にしている
サイトが「8」のところが「9」となっていたりしているのもあり、エクセル
のバージョンによっての記載なのでしょうか。  
「8」がexcel97、「9」がexcel2000などのようにわかれているのでしょうか。
インターネットなどで検索しても見つからず、困っております。

> DoCmd.TransferSpreadsheet acExport, 8, "Q_Rireki", xlsFileName, True
  クエリ名が「Q_Rireki」のものをxlsFileNameで、ワークシートの最初の行を
  フィールド名として使い、エクセル形式で出力する。
→ ここまでは解釈できたのですが「acExport, 8,」の部分が解釈できません。

お忙しい中恐縮ですがご教授をよろしくお願いします。


>▼VBA初心者 さん:
>こんにちは。
>
>> Const xlsFileName As String = "D:\xlsFileName"としようとしても
>> 二重定義になりエラーになります。
>
>Const句は記述を消して、Dim で宣言して下さい。
>
>>>  xlsFileName = Format(Date, "yyyy_mm_dd") & "ホストデータ.xls"
>
>申し訳ありません。ファイル名だけでパスを記述するのを忘れておりました。
>
>Dim xlsFileName As String
>  xlsFileName = "D:\" & Format(Date, "yyyy_mm_dd") & "ホストデータ.xls"
>
>が正しいですね。
>
>       
>>上手く出力できません。
>
>どの様にうまく行かないのかを記載して頂けると
>回答が付きやすくなりますよ^^
>
>上記のファイルパスの問題でうまく行っていないのであれば
>
>>> DoCmd.TransferSpreadsheet acExport, 8, "Q_Rireki", "D:\xlsFileName", True, ""
>  DoCmd.TransferSpreadsheet acExport, 8, "Q_Rireki", xlsFileName, True
>
>で良さそうですね。
・ツリー全体表示

【11380】Re:クエリ結果件数が違う
回答  小僧  - 10/1/13(水) 18:02 -

引用なし
パスワード
   ▼pon さん:
こんにちは。

>安定して動作することが出来ました
>速度もそこそこ速いです・・・・が・・・・

とりあえずは安定した動作になって何よりです。

> 実行時エラー '3131':
> FROM 句の構文エラーです。
> となってしまいました

何度かコピー&ペーストされてお気づきかと思われますが
こちらの掲示板では投稿時に半角スペースが2個並ぶと
全角スペース1個に変換されてしまう様です。

>   'strSQL = strSQL & " LEFT JOIN LT単位 "
>   'strSQL = strSQL & " LEFT JOIN LT単位"
>   'strSQL = strSQL & "LEFT JOIN LT単位"
>   strSQL = strSQL & " LEFT JOIN LT単位 "

色々試して頂いた様ですが(笑)
半角スペースが1個であれば動作するかと思われます。

(半角のスペースであれば2個以上続いてもSQL上は問題ありませんが
 全角のスペースはエラーになります)

当方の癖づけとして文字列の連結をする際、
前後どちらかのスペース挿入を忘れても動作するように
両方に半角スペースを入れております。
(せこいですよね…)
・ツリー全体表示

【11379】読取専用ADPの作成方法
質問  pon  - 10/1/13(水) 17:48 -

引用なし
パスワード
   よろしくお願い致します

アクセス何とか使用できます
ADPよくわかりません


開くときに

以下のいずれかの理由により、hogeプロジェクト 'fuga' は読み取り専用で開かれます。
他のユーザーにより編集がロックされているか、または、このファイルかこのファイルがあるフォルダが読み取り専用に設定されているか、または、このファイルを読み取り専用で開くように指定しました。

と表示されるADP と 
編集可で表示されるADPがあります


プロパティ等見てみましたが
その違いがどこにあるかわかりませんでした

読取専用で開くADPはどのように作成するのでしょうか

アドバイスよろしくお願い致します
・ツリー全体表示

【11378】Re:クエリ結果件数が違う
質問  pon  - 10/1/13(水) 17:40 -

引用なし
パスワード
   ▼小僧 さん:
ありがとうございます
大変遅くなりました

>当方もはっきりとした論拠がある訳ではありませんが、
>メモリ256MB のPC で不安定だったクエリが
>メモリを1Gに増設した所、安定した経験があります。

そうなんですか
未経験だったので勉強になります
ありがとうございました


>クエリ部分をワークテーブルに保存する様にし、
>Q03JOB仕リ を書き換えております。
>これで件数が安定する様でしたら
>計算させながらの結合の所に問題がありそうですね。
では
安定して動作することが出来ました
速度もそこそこ速いです・・・・が・・・・


ただ、下記よくわかりません
わかりにくいと思いますがよろしくお願い致します

頂いたコード実行すると
QD.SQL = strSQL   '←でstop
実行時エラー '3131':
FROM 句の構文エラーです。
となってしまいました

そこでクエリに直接SQLを貼ってみましたが同じでした

---------------------------------------------
不具合SQLは(ご提示コードで作成されるクエリ)
SELECT WT02JOBリ.*
, WT01仕様.名称
WT01仕様_1.名称
, WT01仕様_2.名称
,WT01仕様_3.名称
, WT01仕様_4.名称
,WT01仕様_5.名称
, WT01仕様_6.名称 
FROM (((((((((WT02JOBリ 
LEFT JOIN LT部位
ON WT02JOBリ.部C = LT部位.部C) 
LEFT JOIN LT名
ON (WT02JOBリ.区C = LT名.区C)       
AND (WT02JOBリ.工種3C = LT名.工種3C)       
AND (WT02JOBリ.工種2C = LT名.工種2C)       
AND (WT02JOBリ.工種1C = LT名.工種1C)) 
LEFT JOIN LT単位      
ON WT02JOBリ.単位C = LT単位.単位C) 
LEFT JOIN WT01仕様      
ON (WT02JOBリ.S1 = WT01仕様.tmp)      
AND (WT02JOBリ.工種1C = WT01仕様.工種C)) 
LEFT JOIN WT01仕様 AS WT01仕様_1   
ON (WT02JOBリ.S2 = WT01仕様_1.tmp)   
AND (WT02JOBリ.工種1C = WT01仕様_1.工種C)) 
LEFT JOIN WT01仕様 AS WT01仕様_2   
ON (WT02JOBリ.S3 = WT01仕様_2.tmp)   
AND (WT02JOBリ.工種1C = WT01仕様_2.工種C)) 
LEFT JOIN WT01仕様 AS WT01仕様_3   
ON (WT02JOBリ.S4 = WT01仕様_3.tmp)  
AND (WT02JOBリ.工種1C = WT01仕様_3.工種C)) 
LEFT JOIN WT01仕様 AS WT01仕様_4   
ON (WT02JOBリ.S5 = WT01仕様_4.tmp)   
AND (WT02JOBリ.工種1C = WT01仕様_4.工種C)) 
LEFT JOIN WT01仕様 AS WT01仕様_5   
ON (WT02JOBリ.S6 = WT01仕様_5.tmp)   
AND (WT02JOBリ.工種1C = WT01仕様_5.工種C)) 
LEFT JOIN WT01仕様 AS WT01仕様_6   
ON (WT02JOBリ.S7 = WT01仕様_6.tmp)   
AND (WT02JOBリ.工種1C = WT01仕様_6.工種C);

---------------------------------------------
動いたSQLは
SELECT WT02JOBリ.*
, WT01仕様.名称
,WT01仕様_1.名称
, WT01仕様_2.名称
,WT01仕様_3.名称
, WT01仕様_4.名称
,WT01仕様_5.名称
, WT01仕様_6.名称
FROM (((((((((WT02JOBリ
LEFT JOIN LT部位
ON WT02JOBリ.部C = LT部位.部C)
LEFT JOIN LT名
ON (WT02JOBリ.区C = LT名.区C)
AND (WT02JOBリ.工種3C = LT名.工種3C)
AND (WT02JOBリ.工種2C = LT名.工種2C)
AND (WT02JOBリ.工種1C = LT名.工種1C))
LEFT JOIN LT単位
ON WT02JOBリ.単位C = LT単位.単位C)
LEFT JOIN WT01仕様
ON (WT02JOBリ.S1 = WT01仕様.tmp)
AND (WT02JOBリ.工種1C = WT01仕様.工種C))
LEFT JOIN WT01仕様 AS WT01仕様_1
ON (WT02JOBリ.S2 = WT01仕様_1.tmp)
AND (WT02JOBリ.工種1C = WT01仕様_1.工種C))
LEFT JOIN WT01仕様 AS WT01仕様_2
ON (WT02JOBリ.S3 = WT01仕様_2.tmp)
AND (WT02JOBリ.工種1C = WT01仕様_2.工種C))
LEFT JOIN WT01仕様 AS WT01仕様_3
ON (WT02JOBリ.S4 = WT01仕様_3.tmp)
AND (WT02JOBリ.工種1C = WT01仕様_3.工種C))
LEFT JOIN WT01仕様 AS WT01仕様_4
ON (WT02JOBリ.S5 = WT01仕様_4.tmp)
AND (WT02JOBリ.工種1C = WT01仕様_4.工種C))
LEFT JOIN WT01仕様 AS WT01仕様_5
ON (WT02JOBリ.S6 = WT01仕様_5.tmp)
AND (WT02JOBリ.工種1C = WT01仕様_5.工種C))
LEFT JOIN WT01仕様 AS WT01仕様_6
ON (WT02JOBリ.S7 = WT01仕様_6.tmp)
AND (WT02JOBリ.工種1C = WT01仕様_6.工種C);

違う場所は
18行目の
LEFT JOIN LT単位
の場所だけです


頂いたコードでは不具合から抜け出せず
下記のようにして
動くSQLを20:以下で直張りしたら動作確認できました

  DB.Execute strSQL, dbFailOnError
  
  GoTo 20:

  strSQL = ""
  strSQL = strSQL & " SELECT WT02JOBリ.*, WT01仕様.名称, "
  strSQL = strSQL & "    WT01仕様_1.名称, WT01仕様_2.名称, "
  strSQL = strSQL & "    WT01仕様_3.名称, WT01仕様_4.名称, "
  strSQL = strSQL & "    WT01仕様_5.名称, WT01仕様_6.名称 "
  strSQL = strSQL & " FROM (((((((((WT02JOBリ "
  strSQL = strSQL & " LEFT JOIN LT部位 ON WT02JOBリ.部C = LT部位.部C) "
  strSQL = strSQL & " LEFT JOIN LT名 ON (WT02JOBリ.区C = LT名.区C) "
  strSQL = strSQL & "       AND (WT02JOBリ.工種3C = LT名.工種3C) "
  strSQL = strSQL & "       AND (WT02JOBリ.工種2C = LT名.工種2C) "
  strSQL = strSQL & "       AND (WT02JOBリ.工種1C = LT名.工種1C)) "
  
  
  'strSQL = strSQL & " LEFT JOIN LT単位 "
  'strSQL = strSQL & " LEFT JOIN LT単位"
  'strSQL = strSQL & "LEFT JOIN LT単位"
  strSQL = strSQL & " LEFT JOIN LT単位 "
  
  
  strSQL = strSQL & " LEFT JOIN WT01仕様 "
  strSQL = strSQL & "      ON (WT02JOBリ.S1 = WT01仕様.tmp) "
  strSQL = strSQL & "     AND (WT02JOBリ.工種1C = WT01仕様.工種C)) "
  strSQL = strSQL & " LEFT JOIN WT01仕様 AS WT01仕様_1 "
  strSQL = strSQL & "   ON (WT02JOBリ.S2 = WT01仕様_1.tmp) "
  strSQL = strSQL & "  AND (WT02JOBリ.工種1C = WT01仕様_1.工種C)) "
  strSQL = strSQL & " LEFT JOIN WT01仕様 AS WT01仕様_2 "
  strSQL = strSQL & "   ON (WT02JOBリ.S3 = WT01仕様_2.tmp) "
  strSQL = strSQL & "  AND (WT02JOBリ.工種1C = WT01仕様_2.工種C)) "
  strSQL = strSQL & " LEFT JOIN WT01仕様 AS WT01仕様_3 "
  strSQL = strSQL & "  ON (WT02JOBリ.S4 = WT01仕様_3.tmp) "
  strSQL = strSQL & "  AND (WT02JOBリ.工種1C = WT01仕様_3.工種C)) "
  strSQL = strSQL & " LEFT JOIN WT01仕様 AS WT01仕様_4 "
  strSQL = strSQL & "   ON (WT02JOBリ.S5 = WT01仕様_4.tmp) "
  strSQL = strSQL & "  AND (WT02JOBリ.工種1C = WT01仕様_4.工種C)) "
  strSQL = strSQL & " LEFT JOIN WT01仕様 AS WT01仕様_5 "
  strSQL = strSQL & "   ON (WT02JOBリ.S6 = WT01仕様_5.tmp) "
  strSQL = strSQL & "  AND (WT02JOBリ.工種1C = WT01仕様_5.工種C)) "
  strSQL = strSQL & " LEFT JOIN WT01仕様 AS WT01仕様_6 "
  strSQL = strSQL & "   ON (WT02JOBリ.S7 = WT01仕様_6.tmp) "
  strSQL = strSQL & "  AND (WT02JOBリ.工種1C = WT01仕様_6.工種C);"
  
  
20:

  strSQL = ""
  strSQL = strSQL & " SELECT WT02JOBリ.* "
  strSQL = strSQL & " , WT01仕様.名称 "
  strSQL = strSQL & " ,WT01仕様_1.名称 "
  strSQL = strSQL & " , WT01仕様_2.名称 "
  strSQL = strSQL & " ,WT01仕様_3.名称 "
  strSQL = strSQL & " , WT01仕様_4.名称 "
  strSQL = strSQL & " ,WT01仕様_5.名称 "
  strSQL = strSQL & " , WT01仕様_6.名称 "
  strSQL = strSQL & " FROM (((((((((WT02JOBリ "
  strSQL = strSQL & " LEFT JOIN LT部位 "
  strSQL = strSQL & " ON WT02JOBリ.部C = LT部位.部C) "
  strSQL = strSQL & " LEFT JOIN LT名 "
  strSQL = strSQL & " ON (WT02JOBリ.区C = LT名.区C) "
  strSQL = strSQL & " AND (WT02JOBリ.工種3C = LT名.工種3C) "
  strSQL = strSQL & " AND (WT02JOBリ.工種2C = LT名.工種2C) "
  strSQL = strSQL & " AND (WT02JOBリ.工種1C = LT名.工種1C)) "
  strSQL = strSQL & " LEFT JOIN LT単位 "
  strSQL = strSQL & " ON WT02JOBリ.単位C = LT単位.単位C) "
  strSQL = strSQL & " LEFT JOIN WT01仕様 "
  strSQL = strSQL & " ON (WT02JOBリ.S1 = WT01仕様.tmp) "
  strSQL = strSQL & " AND (WT02JOBリ.工種1C = WT01仕様.工種C)) "
  strSQL = strSQL & " LEFT JOIN WT01仕様 AS WT01仕様_1 "
  strSQL = strSQL & " ON (WT02JOBリ.S2 = WT01仕様_1.tmp) "
  strSQL = strSQL & " AND (WT02JOBリ.工種1C = WT01仕様_1.工種C)) "
  strSQL = strSQL & " LEFT JOIN WT01仕様 AS WT01仕様_2 "
  strSQL = strSQL & " ON (WT02JOBリ.S3 = WT01仕様_2.tmp) "
  strSQL = strSQL & " AND (WT02JOBリ.工種1C = WT01仕様_2.工種C)) "
  strSQL = strSQL & " LEFT JOIN WT01仕様 AS WT01仕様_3 "
  strSQL = strSQL & " ON (WT02JOBリ.S4 = WT01仕様_3.tmp) "
  strSQL = strSQL & " AND (WT02JOBリ.工種1C = WT01仕様_3.工種C)) "
  strSQL = strSQL & " LEFT JOIN WT01仕様 AS WT01仕様_4 "
  strSQL = strSQL & " ON (WT02JOBリ.S5 = WT01仕様_4.tmp) "
  strSQL = strSQL & " AND (WT02JOBリ.工種1C = WT01仕様_4.工種C)) "
  strSQL = strSQL & " LEFT JOIN WT01仕様 AS WT01仕様_5 "
  strSQL = strSQL & " ON (WT02JOBリ.S6 = WT01仕様_5.tmp) "
  strSQL = strSQL & " AND (WT02JOBリ.工種1C = WT01仕様_5.工種C)) "
  strSQL = strSQL & " LEFT JOIN WT01仕様 AS WT01仕様_6 "
  strSQL = strSQL & " ON (WT02JOBリ.S7 = WT01仕様_6.tmp) "
  strSQL = strSQL & " AND (WT02JOBリ.工種1C = WT01仕様_6.工種C); "


  Set QD = DB.QueryDefs("Q03JOB仕リ")
    QD.SQL = strSQL
    QD.Close
  Set QD = Nothing

  DoCmd.OpenQuery "Q03JOB仕リ"


うまく再現できているか不明ですが
空白等に問題があるのでしょうか?
(文字面的には差異は無いのですが・・・・)
また、頂いたコードには不具合は無いと思いますが
このようなエラーが出てしまう原因が掴めませんでした

アドバイス有りましたらよろしくお願い致します


動作だけは確認できました
ワークテーブル?ってあいまいなイメージしかありませんでしたが
作業用に用意するテーブルのことだったんですね。

>Q01仕様 はSQLServer側でViewとして保存
>Q02JOBリ は自MDB側でワークテーブルとして保存
>両者を結合させるのであれば
>単純なテーブル同士の等価結合になる為、
>Accessの負担が軽くなるかと思われます。
アドバイスありがとうございます
こちらについては、理解できました


上記Qわかりにくいと思いますが
何か有りましたらよろしくお願い致します
・ツリー全体表示

【11377】Re:トランザクションにまつわる質問
質問  TOMONORI E-MAIL  - 10/1/13(水) 14:47 -

引用なし
パスワード
   ▼小僧 さん:
返信ありがとうございます。
>なかなか回答が付きませんね…。
そんな中返信していただけるとホッとするというか
なんというか。本当にありがとうございます。

>この仕様がAccessにとって一般的ではないのかもしれませんね。
そうですね。実はコミットしても時間はほとんどかかりませんし
それくらいなら後でテーブルを削除したのでも問題ないような気がしてきました。

今回のレポートはテーブルの集計表で、キーの種類ごとにカラムの
合計値を持っているような感じです。

>また、複数レコードを印刷するのであれば
>テーブルに保存されたデータが必要になってきます。
みたいですね。MSさんのヘルプページにはっきり書いてありました。

>A) ADO.Recordset の GetRows メソッドを使用し
>  いったん配列変数にデータを退避させ
>  Rollback後に別トランザクションで
>  ワークテーブルにデータを保存する
なるほど、レポート用のデータなら対して大きくないので
GetRowsでもいけそうですね。ちょっとやってみます。

>B) 中間データ用のワークテーブルもあらかじめ用意し
>  データの Delete、Insert にて対応する
>
>当方が行うのでしたら B)案で行うと思います。
B案はやってみたのですが・・・
中間データ用のテーブルを用意してもトランザクションの中から
Insertしたらロールバックで消えてしまいますよね?
間違えてたらごめんなさい。

とりあえずAのほうでちょっと試してみます。
・ツリー全体表示

【11376】Re:フォームで抽出したデータをExcel出力
回答  小僧  - 10/1/13(水) 14:45 -

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

> Const xlsFileName As String = "D:\xlsFileName"としようとしても
> 二重定義になりエラーになります。

Const句は記述を消して、Dim で宣言して下さい。

>>  xlsFileName = Format(Date, "yyyy_mm_dd") & "ホストデータ.xls"

申し訳ありません。ファイル名だけでパスを記述するのを忘れておりました。

Dim xlsFileName As String
  xlsFileName = "D:\" & Format(Date, "yyyy_mm_dd") & "ホストデータ.xls"

が正しいですね。

       
>上手く出力できません。

どの様にうまく行かないのかを記載して頂けると
回答が付きやすくなりますよ^^

上記のファイルパスの問題でうまく行っていないのであれば

>> DoCmd.TransferSpreadsheet acExport, 8, "Q_Rireki", "D:\xlsFileName", True, ""
  DoCmd.TransferSpreadsheet acExport, 8, "Q_Rireki", xlsFileName, True

で良さそうですね。
・ツリー全体表示

95 / 500 ページ ←次へ | 前へ→
ページ:  ┃  記事番号:
1082701
(SS)C-BOARD v3.8 is Free