Access VBA質問箱 IV

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

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


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

【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とオートメーションの知識が必要となってきます。
・ツリー全体表示

【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とオートメーションの知識が必要となってきます。
・ツリー全体表示

【11373】Re:トランザクションにまつわる質問
回答  小僧  - 10/1/13(水) 11:17 -

引用なし
パスワード
   ▼TOMONORI さん:
こんにちは。
なかなか回答が付きませんね…。

> 処理の途中で利用、作成したテーブルはすべてrollbackで破棄して
> 結果だけをレポートとして出力したい

この仕様がAccessにとって一般的ではないのかもしれませんね。

印刷するReportが単票形式であり、
1レコードずつの印刷で良いのであれば
非連結のレポートして
レポートのFormatイベントで処理をする方法が考えられます。


また、複数レコードを印刷するのであれば
テーブルに保存されたデータが必要になってきます。

このような仕様を経験した事がないので
大した案はでませんが、

A) ADO.Recordset の GetRows メソッドを使用し
  いったん配列変数にデータを退避させ
  Rollback後に別トランザクションで
  ワークテーブルにデータを保存する

B) 中間データ用のワークテーブルもあらかじめ用意し
  データの Delete、Insert にて対応する

当方が行うのでしたら B)案で行うと思います。
・ツリー全体表示

【11371】Re:ExcelからAccessを起動する方法
お礼  YU-TANG  - 10/1/12(火) 21:05 -

引用なし
パスワード
   へらぶなさん、こんばんは。

丁寧なフォローありがとうございます。
誤解が解けて安心しました。

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

【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

________________________________________________________________________________________________________________________________________________

お忙しい中恐れ入りますが、ご教授をお願いします。
・ツリー全体表示

【11369】Re:ExcelからAccessを起動する方法
発言  へらぶな  - 10/1/12(火) 14:12 -

引用なし
パスワード
   へらぶなです。こんにちは。

>「コマンドライン引数から情報を得」るわけではありません。
>「Access のプロセス」の「CommandLine を調べ」ると書きましたよ。
>なので、起動時に開いた MDB のフルパスが入ってきます。

これは、下記のように取得できることがわかりました。

Private Sub GetCommandLine()

  Dim Proc As Object
  
  'コマンドラインよりmdb起動  
  Call Shell("MSAccess.exe C:\db1.mdb /cmd 受注")
  
  For Each Proc In GetObject("winmgmts:").InstancesOf("Win32_Process")
    If Proc.Name = "MSACCESS.EXE" Then

      'MSAccess.exe C:\db1.mdb /cmd 受注 と表示される。
      MsgBox Proc.CommandLine

    End If
  Next
End Sub

これで、Accessのプロセスから、コマンドラインを元に、
目的のMDBが既に開いているかわかります。

大変失礼致しました。少しでも皆様のお役に立てば幸いです。
・ツリー全体表示

【11368】Re:ExcelからAccessを起動する方法
発言  へらぶな  - 10/1/12(火) 13:25 -

引用なし
パスワード
   ▼YU-TANG さん:

へらぶなです。こんにちは。

>「コマンドライン引数から情報を得」るわけではありません。
>「Access のプロセス」の「CommandLine を調べ」ると書きましたよ。
>なので、起動時に開いた MDB のフルパスが入ってきます。
>
>一度でも実際に試して CommandLine プロパティの値を覗くか、
>せめて前回のレスで提示したキーワードで検索すればすぐに
>分かることなので、よもや検索すらせずに思い込みでレスされる
>とは予想もしていませんでした。止むを得ずフォローしておきます。

コマンドラインの引数の話だと思い込んでしまったため、
検索も同様の思い込みで行い、引数だけではだめだと思い、
テストもしませんでした。

本当に情けなく、YU-TANGさんには大変失礼なことをしてしまいました。
申し訳ありませんでした。深くお詫びいたします。
・ツリー全体表示

【11367】Re:ファイル名について
回答  小僧  - 10/1/12(火) 12:59 -

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

>転送元ファイル名が、毎回かわるので

汎用的に使う事を考えると
ファイルダイアログを使うのが良さそうですね。

Accessのバージョンによって
使えるものと使えないものがありますので
Web検索で色々探してみて下さい。

仕様としては決め打ちになりますが
CSVファイルを特定のフォルダに入れて
フォルダ内のファイルを全て取込む事も可能ですね。

その場合は Dir関数等 でファイル名を探して
自動的に取り込みができそうです。
・ツリー全体表示

【11366】トランザクションにまつわる質問
質問  TOMONORI E-MAIL  - 10/1/11(月) 20:19 -

引用なし
パスワード
   こんにちは。TOMONORIです。

ADOのトランザクションを利用したときの
レポートの作成の仕方で困っています。

処理の途中で利用、作成したテーブルはすべてrollbackで破棄して
結果だけをレポートとして出力したいのですが、
コミットする前のテーブルからはレポートが作成できないので、
仕方なくテーブルを1つだけ具現化しようと思ったのですが、
うまくいきませんでした。

なにか方法があったら教えてください。
・ツリー全体表示

【11365】Re:帳票フォームでヒントテキスト
発言  YU-TANG  - 10/1/11(月) 15:15 -

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

[11360]
> 今回のテキストボックスの仕様(使用可能:いいえ,編集ロック:はい)で、
> 以下のイベントを試しましたが、どれも反応しませんでした。

その設定では、そうなります。

[11352]
> 今回はテキストボックスに編集ロックがかかっているため、

としか書かれていらっしゃいませんでしたが、編集ロックがかかっている
だけではイベントは有効なはずなので、おかしいと思って確認したわけです。
使用可能が「いいえ」の状態になってはじめて、イベントが無効になります。

> どうしても必須の機能ではないので、
> できないということがわかれば、それはそれで問題ありません。

技術的にはできないわけではありません。現に、できている MDB が手元に
あります。
ただスクロールバーのサブクラス化が必須で、コード量もちょっとここに
投稿できないほど大量になります(まあ分割すればできるんでしょうが…)。
結局、そこまでして実装する必要があるのかというところに落ち着く感じ
なので、必須の機能ではないのであれば、スルーするのが正解ですね。

ネタとしては面白いので、ヒマになったら放流するかもしれません。
それでは。
・ツリー全体表示

【11364】ファイル名について
質問  ハジメ  - 10/1/10(日) 23:22 -

引用なし
パスワード
   こんにちは
会社のプ基幹システムは、必要なデータを取り出せるようになっていますが、
自分のパソコンにデータを転送するプログラムをAccess VBAで組みたいのですが、
ファイル名が、○○○○出力西暦月日時刻秒.CSVになっています。
転送元ファイル名が、毎回かわるので、一度出力西暦月日時刻秒を毎回削除してます。転送してます。面倒なのです。
いい方法ありましたら、教えてください!
・ツリー全体表示

【11363】Re:ExcelからAccessを起動する方法
発言  YU-TANG  - 10/1/7(木) 21:10 -

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

本スレは Excel 板の方で解決済みですので、本来ならレスする意味は
ありませんが、このまま放置すると過去ログ等で読む方に無用の誤解を
与える危険性があるため、あえてレスを付けておきます。

> このため、コマンドライン引数から情報を得ても、
> 必ずしもそのmdbを特定できるとは限らないのです。

「コマンドライン引数から情報を得」るわけではありません。
「Access のプロセス」の「CommandLine を調べ」ると書きましたよ。
なので、起動時に開いた MDB のフルパスが入ってきます。

一度でも実際に試して CommandLine プロパティの値を覗くか、
せめて前回のレスで提示したキーワードで検索すればすぐに
分かることなので、よもや検索すらせずに思い込みでレスされる
とは予想もしていませんでした。止むを得ずフォローしておきます。

これが分かると、ユーザー環境によって配置が変わっている可能性が
あるため、フルパスを特定できない MDB (=GetObject でインスタンスを
取得できない) でも、もし起動していればファイル名で検索して
フルパスを引っ張ってこれる (=GetObject でインスタンスを取得
できるようになる) という利点があります。

> b)GetObjectですと以下のようになりますでしょうか?
>
>   Set objAcc = GetObject(, "Access.Application")

MDB のパスが分かっているのであれば、MDB のパスで取得すればよいです。

Set objAcc = GetObject("MDB のパス")

過去ログ向けのレスは以上です。
・ツリー全体表示

【11362】Re:ExcelからAccessを起動する方法
質問  へらぶな  - 10/1/7(木) 12:15 -

引用なし
パスワード
   YU-TANG さんへ
お返事ありがとうございます、へらぶなと申します。

a)(要は CommandLine に情報が乗ってこない場合) は、これでは判別できません。に関して

すいません、説明が一部誤っておりました。
実際には、shell関数を用いた起動時にも、コマンドライン引数を
省略して起動することもあります。
引数を指定せずに起動した場合、メインメニューのみが立ち上がり、
引数を指定して実行するときには、メインメニュー
+引数に応じたサブ画面という構成で起動するようになっています。

このため、コマンドライン引数から情報を得ても、
必ずしもそのmdbを特定できるとは限らないのです。
すいません。


b)GetObjectですと以下のようになりますでしょうか?

  Set objAcc = GetObject(, "Access.Application")
  If (Not objAcc Is Nothing) Then
    objAcc.doCmd・・・
  End If

  ↑この方法ですと、2つ以上のmdbが開いているときに、
   どのmdbにdoCmdが発行されるかわかりません。


ここまでの疑問点。
1.「この名前のMDBが既に立ち上がっているよ!」
   のような、簡易な方法は無い物か。。。

2.b)で、複数のMDBが既に起動している場合でも、
  特定のMDBに対してDoCmdが発行できないか。。。

TO 有志の皆様
このレスより下は、Excel質問箱に移動させていただきます。
よろしくお願いいたします。
・ツリー全体表示

【11361】Re:ExcelからAccessを起動する方法
発言  へらぶな  - 10/1/7(木) 12:10 -

引用なし
パスワード
   りるさん、はじめまして、へらぶなと申します。

>へらぶな さん、こんばんは。
>EXCEL側のマクロになるので、EXCEL VBA質問箱で質問したほうが良いと思います。

了解いたしました。
・ツリー全体表示

【11360】Re:帳票フォームでヒントテキスト
お礼  わさび  - 10/1/7(木) 12:00 -

引用なし
パスワード
   ▼YU-TANG さん:

ご助言、ありがとうございます!

今回のテキストボックスの仕様(使用可能:いいえ,編集ロック:はい)で、
以下のイベントを試しましたが、どれも反応しませんでした。
---------------
 ・MouseDown
 ・MouseMove
 ・GotFocus
 ・AfterUpdate
 ・BeforeUpdate
 ・Click
 ・Enter
---------------

どうしても必須の機能ではないので、
できないということがわかれば、それはそれで問題ありません。

しかし、今回ご回答いただき、
改めてイベントの使い分けの重要性と有効性を認識することができました。
ありがとうございました。
・ツリー全体表示

【11359】Re:VBSでCSVに条件をつけて書き込むと...
お礼  VBA初心者  - 10/1/7(木) 11:56 -

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

 こんにちわ。
ご回答有難うございます。
 大変助かりました。


>> If strLine <> "" Then strLine = strLine & Chr(9)
>>       strLine = strLine & strVALUE
>> Next
>>
>>上記の記述でフィールド毎にタブを挿入する意味を持つのでしょうか。
>
>はいそうです。タブの文字コードは 9 ですので、Chr(9) はタブになります。
・ツリー全体表示

【11358】Re:帳票フォームでヒントテキスト
発言  YU-TANG  - 10/1/7(木) 0:18 -

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

▼わさび さん:
>今回はテキストボックスに編集ロックがかかっているため、
>教えていただいた方法は実現できませんが、

マウスボタン移動時イベントも使えない状況なのでしょうか?

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

【11357】Re:ExcelからAccessを起動する方法
回答  YU-TANG  - 10/1/7(木) 0:07 -

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

>  a)目的のAccessが起動しているかを確認する方法。

OS を Windows XP 以上に限定できるなら、WMI で可能です。
以前実際に作ったのですが、手元に残っていないのですぐには提示できません。
「win32_process CommandLine」あたりのキーワードで検索してください。
Access のプロセスに限定して CommandLine を調べれば、特定の MDB を
開いているかどうか、概ね判別できます。

ただし例外的に、MsAccess.exe を単独で起動し、次に [ファイル]
メニューから MDB を開いたとか、あるいは外部スクリプトから
CreateObject で開かれたというような場合 (要は CommandLine に
情報が乗ってこない場合) は、これでは判別できません。
しかしユーザがダブルクリックで起動したことを当てにできる状況で
あれば、実用的な問題にはならないでしょう (当てにできない場合は
そう書いてください。他の手もあります)。

>  b)起動していることが分かったとして、OLEオートメーションの
>   オブジェクトにどうやってセットするのか?

起動しているのが分かっているのであれば、ふつうに GetObject で
取れませんか?
取れないのであれば、コードを提示してみてください。

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

【11356】Re:VBSでCSVに条件をつけて書き込むと...
回答  hatena  - 10/1/6(水) 21:26 -

引用なし
パスワード
   > If strLine <> "" Then strLine = strLine & Chr(9)
>       strLine = strLine & strVALUE
> Next
>
>上記の記述でフィールド毎にタブを挿入する意味を持つのでしょうか。

はいそうです。タブの文字コードは 9 ですので、Chr(9) はタブになります。
・ツリー全体表示

【11355】Re:ExcelからAccessを起動する方法
発言  りる  - 10/1/6(水) 21:21 -

引用なし
パスワード
   へらぶな さん、こんばんは。

>皆様はじめまして、へらぶなと申します。
>初めての投稿になります。よろしくお願いいたします。
>
>1.やりたいこと
>ExcelからAccessを起動したい。
>Access起動時には、Excelから渡された引数を元に
>Access起動時に起動する初期フォームを切り替えたい。
EXCEL側のマクロになるので、EXCEL VBA質問箱で質問したほうが良いと思います。
・ツリー全体表示

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