Access VBA質問箱 IV

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

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


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

【11370】フォームで抽出したデータをExcel出力 VBA初心者 10/1/12(火) 17:04 質問[未読]
【11374】Re:フォームで抽出したデータをExcel出力 小僧 10/1/13(水) 12:23 回答[未読]
【11375】Re:フォームで抽出したデータをExcel出力 VBA初心者 10/1/13(水) 13:51 回答[未読]
【11376】Re:フォームで抽出したデータをExcel出力 小僧 10/1/13(水) 14:45 回答[未読]
【11381】Re:フォームで抽出したデータをExcel出力 VBA初心者 10/1/14(木) 10:38 回答[未読]
【11384】Re:フォームで抽出したデータをExcel出力 小僧 10/1/15(金) 10:20 回答[未読]
【11386】Re:フォームで抽出したデータをExcel出力 VBA初心者 10/1/15(金) 14:19 回答[未読]
【11387】Re:フォームで抽出したデータをExcel出力 小僧 10/1/15(金) 15:04 回答[未読]
【11389】Re:フォームで抽出したデータをExcel出力 VBA初心者 10/1/15(金) 17:33 回答[未読]
【11390】Re:フォームで抽出したデータをExcel出力 小僧 10/1/15(金) 18:11 回答[未読]
【11392】Re:フォームで抽出したデータをExcel出力 VBA初心者 10/1/15(金) 18:31 回答[未読]
【11395】Re:フォームで抽出したデータをExcel出力 VBA初心者 10/1/19(火) 13:42 回答[未読]
【11397】Re:フォームで抽出したデータをExcel出力 小僧 10/1/20(水) 16:50 回答[未読]
【11404】Re:フォームで抽出したデータをExcel出力 VBA初心者 10/1/21(木) 11:48 お礼[未読]

【11370】フォームで抽出したデータをExcel出力
質問  VBA初心者  - 10/1/12(火) 17:04 -

引用なし
パスワード
   フォームで抽出したデータをExcel出力をしようとしてます。

下記のコマンドで出力可能なのですが、二つ程ご質問がございます。

1. Dドライブ直下に下記のコードのファイル名として保存するの
ですが、エクセルファイルのファイル名の後ろに現在の日付を入力して
例:(2010/01/12ホストデータ.xls)として保存する方法があります
でしょうか。
 「"D:\yyyymmddホストデータ.xls"」などと記述を変更しても
何も起こりません。

2.フィールド名が"登録日"のものはAccessテーブル上では「2010/01/12」として
表示されるのですが、Excel上に出力すると「12-Jan-10」の形式で表示されて
しまいます。Excel上のも「2010/01/12」として出力する方法はありますで
しょうか。

_____________記述コード__________________________________________________
Private Sub コマンド35_Click()
 
Const xlsFileName As String = "D:\ホストデータ.xls" '●
Dim strSQL As String

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

  'もし Filterプロパティになにも記述されていなかったら
  'フォームに表示されている全データを出力するようにします。
  If Me.Filter = "" Then Me.Filter = True

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

  '対象のExcelファイルが開かれたまま、コマンドボタンを
  '押されることもありそうなので、エラーはすっ飛ばします。
  On Error Resume Next
  'ダミークエリを出力します。
  DoCmd.OutputTo ObjectType:=acOutputQuery _
         , ObjectName:="Q_Damie" _
         , OutputFormat:=acFormatXLS _
         , OutputFile:=xlsFileName _
         , AutoStart:=True
  On Error GoTo 0
End Sub

________________________________________________________________________________________________________________________________________________

お忙しい中恐れ入りますが、ご教授をお願いします。

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

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

> 例:(2010/01/12ホストデータ.xls)として
> 保存する方法がありますでしょうか。

Windows上で名前の変更の操作を行って頂くと
解りやすいかと思われますが、
ファイル名に「/」は使えませんので「_」等で代用しましょう。


>Const xlsFileName As String = "D:\ホストデータ.xls"

まず、Const句 は定数を宣言するもので
日付によって内容を変えたいのであれば変数の宣言が必要です。

→ Dim xlsFileName As String

次に「システム日付」を「yyyy_mm_dd」という書式に変換するには
Format関数を使います。

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


> Excel上のも「2010/01/12」として出力する方法はありますでしょうか。

簡単な解決方法として
Output To メソッドではなく、TransferSpreadsheet メソッドを
使用するのには問題がありそうでしょうか。

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

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

引用なし
パスワード
   ▼小僧 さん:
ご回答有難うございます。
VBA初心者です。

>  xlsFileName = Format(Date, "yyyy_mm_dd") & "ホストデータ.xls"
として出力するファイル名を「yyyy_mm_ddホストデータ.xls」として出力
できたのですが、
>>Const xlsFileName As String = "D:\ホストデータ.xls"
にて初期値としてDドライブ保存をしていたのですが、同じようにDドライブ
直下に初期値で保存する設定はできますでしょうか。
 >>Const xlsFileName As String = "D:\xlsFileName"としようとしても
二重定義になりエラーになります。

また、>Output To メソッドではなく、TransferSpreadsheet メソッドを
   >使用するのには問題がありそうでしょうか。
とご教授いただいて、
 DoCmd.OutputTo ObjectType:=acOutputQuery _
         , ObjectName:="Q_Rireki" _
         , OutputFormat:=acFormatXLS _
         , OutputFile:=xlsFileName _
         , AutoStart:=True
の記述を
       
  DoCmd.SetWarnings False
  DoCmd.TransferSpreadsheet acExport, 8, "Q_Rireki", "D:\xlsFileName", True, ""
  DoCmd.SetWarnings True

などにしてみたのですが、上手く出力できません。

お忙しい中恐縮ですが、ご教授をお願い致します。


>▼VBA初心者 さん:
>こんにちは。
>
>> 例:(2010/01/12ホストデータ.xls)として
>> 保存する方法がありますでしょうか。
>
>Windows上で名前の変更の操作を行って頂くと
>解りやすいかと思われますが、
>ファイル名に「/」は使えませんので「_」等で代用しましょう。
>
>
>>Const xlsFileName As String = "D:\ホストデータ.xls"
>
>まず、Const句 は定数を宣言するもので
>日付によって内容を変えたいのであれば変数の宣言が必要です。
>
>→ Dim xlsFileName As String
>
>次に「システム日付」を「yyyy_mm_dd」という書式に変換するには
>Format関数を使います。
>
>  xlsFileName = Format(Date, "yyyy_mm_dd") & "ホストデータ.xls"
>
>
>> Excel上のも「2010/01/12」として出力する方法はありますでしょうか。
>
>簡単な解決方法として
>Output To メソッドではなく、TransferSpreadsheet メソッドを
>使用するのには問題がありそうでしょうか。
>
>Output To メソッドを使った後に書式を変更する事も可能ですが
>ExcelVBAとオートメーションの知識が必要となってきます。


>▼VBA初心者 さん:
>こんにちは。
>
>> 例:(2010/01/12ホストデータ.xls)として
>> 保存する方法がありますでしょうか。
>
>Windows上で名前の変更の操作を行って頂くと
>解りやすいかと思われますが、
>ファイル名に「/」は使えませんので「_」等で代用しましょう。
>
>
>>Const xlsFileName As String = "D:\ホストデータ.xls"
>
>まず、Const句 は定数を宣言するもので
>日付によって内容を変えたいのであれば変数の宣言が必要です。
>
>→ Dim xlsFileName As String
>
>次に「システム日付」を「yyyy_mm_dd」という書式に変換するには
>Format関数を使います。
>
>  xlsFileName = Format(Date, "yyyy_mm_dd") & "ホストデータ.xls"
>
>
>> Excel上のも「2010/01/12」として出力する方法はありますでしょうか。
>
>簡単な解決方法として
>Output To メソッドではなく、TransferSpreadsheet メソッドを
>使用するのには問題がありそうでしょうか。
>
>Output To メソッドを使った後に書式を変更する事も可能ですが
>ExcelVBAとオートメーションの知識が必要となってきます。

【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

で良さそうですね。

【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
>
>で良さそうですね。

【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


ご参考になれば幸いです。

【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
>
>
>ご参考になれば幸いです。

【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 の環境で実行するとエラーが出る事がありますので
注意して下さい。

【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 の環境で実行するとエラーが出る事がありますので
>注意して下さい。

【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

【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

【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

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

引用なし
パスワード
   ▼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

という構文が、
イミディエイトウィンドウへ書き出す命令となっております。

【11404】Re:フォームで抽出したデータをExcel出力
お礼  VBA初心者  - 10/1/21(木) 11:48 -

引用なし
パスワード
   ▼小僧 さん:
 こんにちわ。
>業務が忙しく、
>なかなか返答できなくて申し訳ありません。
 お忙しい中ご回答ありがとうございます。

>プログラムを実行してみて下さい。
 実行した後にイミディエイトをみたら、フィールド名
が表示されておりました。
 今まで、プログラムを実行しないでイミディエイト
上で記載して何も表示できないと思っておりました。
 知識不足でした。

とても助かりました。有難うございます。
 今後とも何卒よろしくお願いします。


>▼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
>
>という構文が、
>イミディエイトウィンドウへ書き出す命令となっております。

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