Access VBA質問箱 IV

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

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


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

【6777】Re:クエリで質問があります
発言  YU-TANG WEB  - 05/11/9(水) 7:14 -

引用なし
パスワード
   おはようございます、YU-TANG です。

> VBAは使用したことはありません。他の方法で出来ないでしょうか。

出来るでしょうが、私はそちらの方法に興味が無いので、パスします。
申し訳ありませんが、他の方のレスをお待ちください。
・ツリー全体表示

【6776】Re:日付の書式について
回答  YU-TANG WEB  - 05/11/9(水) 6:27 -

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

> 試してみたのですが、現在Office97は入っておらず、
> Access97 Value Packしか入っていないので、この
> パッチはうまくインストールできませんでした。

んじゃ、↓の VBA による回避方法で。

http://www.accessclub.jp/bbs5/0001/bbsetc37.html
・ツリー全体表示

【6775】Re:Excelファイルからの取り込み方法につ...
質問  NK  - 05/11/9(水) 3:52 -

引用なし
パスワード
   質問自体が分かれてて読みづらいと思いますが申し訳ありません

> 3.Excelから取込用テーブルへインポート
> 4.取込用テーブルからメインテーブルへ必要なフィールドのみ追加
> 5.一時テーブルから該当テーブルへ必要な情報を復元
>この考え方自体正しいかもわからない上、インポートで詰まっています。
実際には以下のようなコードを記述しています。
 DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, _
 "テーブル名", "ファイル名(パス含む)", True, "シート名"
現在ヘルプの無い環境でやっている為、自力では解決できません。
どなたかアドバイスお願いします。
・ツリー全体表示

【6774】Re:Excelファイルからの取り込み方法につ...
質問  NK  - 05/11/9(水) 3:51 -

引用なし
パスワード
   〜質問の続きです〜
※接続している社内LANの関係で送信できる文字数が限られるので分けました
現在考えている方法は以下のような流れです
 1.MDB側でのみ持っている情報を保管する為,必要な情報のみ一時テーブルへ退避
 2.メインテーブルの全レコードを削除クエリで削除
 3.Excelから取込用テーブルへインポート
 4.取込用テーブルからメインテーブルへ必要なフィールドのみ追加
 5.一時テーブルから該当テーブルへ必要な情報を復元
この考え方自体正しいかもわからない上、インポートで詰まっています。
・ツリー全体表示

【6773】Excelファイルからの取り込み方法について
質問  NK  - 05/11/9(水) 3:38 -

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

現在Excelファイルからのテーブルの取り込みを考えています。
・Excelファイルは顧客から提示される物なので、形を変えたり
 Excel側にマクロを組む事は不可
・提示されるExcelのフィールドの形と、こちらの持っているテーブルの
 フィールドの形が違う
 (Excel側に不要なフィールドがあり、MDBのテーブルで
  複数の新しいフィールドを追加しています)
・MDBでテーブルの内容に変更をかけるのは、こちらで追加したフィールドのみ

という条件で、顧客から提示される情報が変わった場合に、
こちらのMDBで持っている情報も最新化する事が目的です。
・ツリー全体表示

【6772】Re:日付の書式について
質問  ???  - 05/11/8(火) 21:14 -

引用なし
パスワード
   ▼YU-TANG さん:
>こんばんは、YU-TANG です。
>
>> この現象の原因は何でしょうか?
>
>下記リンク先と関係有るかもしれません。
>
>http://www.ruriplus.com/msaccess/bbscbrw.asp?Root=12948&No=12968

返信が遅れてしまい、すみませんでした!
試してみたのですが、現在Office97は入っておらず、Access97 Value Packしか入っていないので、このパッチはうまくインストールできませんでした。
どなたか他の方法をご存知の方おりませんか?
・ツリー全体表示

【6771】Re:【解決】Re:エクセル出力
発言  YU-TANG WEB  - 05/11/8(火) 19:13 -

引用なし
パスワード
   念押しですが。

回答が付いているにもかかわらず今のところ放置状態の
マルチポストにも、フィードバックを忘れずお願いします。
・ツリー全体表示

【6770】Re:【解決】Re:エクセル出力
お礼  Mino  - 05/11/8(火) 18:57 -

引用なし
パスワード
   ▼小僧 さん:
返事が遅くなり、申し訳ございません。

色々とご親切に教えて頂き、ありがとうございます。
大変、参考になりました。
しかし、その場では理解できても、
いざとなるとやはり難しいですね。

下記にてご報告致します。

>>他に開いているファイルは、検索できましたが・・・。
>>  For Each Myfile In Exl.Workbooks
>>    If Myfile.Name = 「ファイル名」 Then
>>      Myfile.Close savechanges:=False
>>    End If
>>  Next Myfile
>Excel のインスタンスを生成した直後に
>Exl.Visible = True
>と記述して、
>該当の Excelファイル を開いたままステップ実行を行って確認されてみて下さい。
>>  For Each Myfile In Exl.Workbooks
>は 2 個目に起動された Workbook を参照しているので
>「ファイル名」で指定された Excel が検索ができないのだと思われます。

確認しました。
確かに 2 個目を参照出来ましたが、
指定されたファイルは参照出来ませんでした。

>>よく分かりませんが、上手くいきませんでした。
>>(使用中となりませんでした)
>>  Exl.Workbooks.Open FileName:=「パス名+ファイル名」
>>  Exl.Workbooks(「ファイル名」).Activate
>>  If Exl.ActiveWorkbook.ReadOnly Then
>>    MsgBox "使用中"
>>    Exl.ActiveWorkbook.Close
>>    Set Exl = Nothing
>>    Exit Function
>>  End If
>こちらについてですがステップ実行をした際に
>>  Exl.Workbooks(「ファイル名」).Activate
>の行で1つ目の Excel ファイルが Active 状態になってしまっていないでしょうか?
>Sub ExcelCheck()
>'要参照 Microsoft Excel x.x Object Library
>Dim xName As String
>Dim xlsApp As New Excel.Application
>Dim xlsWkb As Excel.Workbook
>
>  xName = "c:\Test.xls
>  xlsApp.Visible = True
> 
>  Set xlsWkb = xlsApp.Workbooks.Open(xName)
>  Debug.Print xlsWkb.ReadOnly
>  
>  xlsWkb.Close: Set xlsWkb = Nothing
>  xlsApp.Quit: Set xlsApp = Nothing 
>End Sub
>上記コードで、xName で指定されたファイルが開かれている場合、閉じている場合の
>両方で検証されてみて下さい。

確認しました。
「Debug.Print xlsWkb.ReadOnly」は、
エラーになってしまいましたので、下記で行いました。
「Debug.Print xls.ActiveWorkbook.ReadOnly」
(・・・間違っていればご指摘下さい)

ファイルが開いている場合は、True
となり、「読取専用」で開きました。
ファイルが閉じている場合は、False
となり、ファイルが開きました。

これはなるほどと思いました。
これでオープン中かどうか、判別が出来るという事ですね。

他にも色々と学ばせて頂き、
又、検証までして頂き、
本当にありがとうございました。
・ツリー全体表示

【6769】Re:レコード数を制御して、Excelへ吐き出し
回答  小僧  - 05/11/8(火) 18:51 -

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

>>>質問とは、出力したファイルのFilenameはKwの後ろに「元kw.xls」の登録
>>>日時を入れてほしいです。

出力するファイルに「yymmmdd」のような名前を付けてしまうと、
そのフォルダ内の最新のファイルを探し…という余計な作業が加わってしまいます。

出力するファイルは「KW.xls」のままで
元ファイルの名前を FileDateTime 付きの名前に変える、
という動作にしてみてはいかがでしょうか。

Sub Excel出力()
Dim QPath As String
Dim EName As String
Dim QName As String
Dim SDateTime As String
Dim Fdt As String
  QPath = "C:\"
  EName = "KW.XLS"
  QName = "クエリ"
  Fdt = FileDateTime(QPath & EName)

  'SDateTime = Format(Fdt, "yyyymmdd","hhmm")
  SDateTime = Format(Fdt, "yyyymmddhhmm")      '変更

  Name QPath & EName As QPath & SDateTime & ".xls" '追加

  'DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, _
            QName, QPath & EName & "_" & SDateTime
  DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, _
            QName, QPath & EName     '変更
End Sub
・ツリー全体表示

【6768】Re:レコード数を制御して、Excelへ吐き出し
質問  Saiyama  - 05/11/8(火) 18:17 -

引用なし
パスワード
   まさ7251さん
 こんばんわ、ヒントをいただいて、やってみましたが、うまくいかないです。
よろしくお願いします。
>>質問とは、出力したファイルのFilenameはKwの後ろに「元kw.xls」の登録
>>日時を入れてほしいです。
>>イメージ
>>元kw.xlsの登録日時→20051030 19:33の場合は、
>>Kw200510301933となってほしい。
>
>>HinaName = "C:\KW_Hina.xls"
>
>>  xName = "C:\KW.xls"    ====>ここです
>
>FileDateTime関数で、ファイルの更新日を求めることが出来ます。
>Format関数で、変換が出来ます。
>この2つの関数でご希望の処理は出来るかと思います。

書いたコード:
Sub TEXT()
Dim QPath As String  
Dim EName As String  
Dim QName As String
Dim SDateTime As String
Dim Fdt As Atring
  QPath = "C:\"
  EName = "KW.XLS"
  QName = "クエリ"
  Fdt =FileDateTime(QPath & EName)

  SDateTime = Format(Fdt, "yyyymmdd","hhmm")

  DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, _
            QName, QPath & EName & "_" & SDateTime
End Sub
・ツリー全体表示

【6767】Re:クエリで質問があります
質問  TOMO  - 05/11/8(火) 16:23 -

引用なし
パスワード
   すみません。ご指摘の通りです。
申し訳御座いません。

>それは「([電化製品].[電化製品の寿命])=...」が原因だったので
>しょうか。それとも、他の原因だったのでしょうか。

「([電化製品].[電化製品の寿命])=...」が原因でした。
有難う御座いました。

>3 フィールドの組み合わせだと 2^3 で 8 通りの組み合わせが
>有り得ますが、3 通りしか提示されていません。
>この 3 通りしか有り得ないのでしょうか?

3通りしかありません。

>また、この前提だとクエリ上の式のみで組むのは危険です。
>不可能ではありませんが、おそらく式が複雑になって、初心者では
>メンテナンス不能になります。
>私がやるならユーザー定義関数を使いますが、VBA の使用は問題あり
>ませんか?
>
># と言っても、元々こちらは「VBA質問箱」ですが。
>              ~~~
>> また、寿命の表示が現在、日数で表示されているのですが
>> ○○年○○ヶ月○○日としたいのですが
>
>こちらも先のケースと同じ理由で、VBA の方が適切に思います。
>Microsoft 社が類似のサポート技術情報をリリースしていますが、
>そちらでもユーザー定義関数を使っています。
>
>http://support.microsoft.com/kb/100136/JA/
>http://support.microsoft.com/kb/210522/JA/
>
>上記の応用で実現できるでしょう。

VBAは使用したことはありません。他の方法で出来ないでしょうか。
・ツリー全体表示

【6766】Re:日付入力ボタンを作るには
お礼  MINAPU  - 05/11/7(月) 18:40 -

引用なし
パスワード
   ご回答ありがとうございます。
おかげさまで解決致しました。ありがとうございました。
・ツリー全体表示

【6765】Re:ユニオンクエリを追加したい!!
発言  rara  - 05/11/7(月) 17:44 -

引用なし
パスワード
   小僧さん。
ありがとうございます!!
一度試してみます。
また結果報告させてもらいます。
・ツリー全体表示

【6764】Re:ユニオンクエリを追加したい!!
発言  小僧  - 05/11/7(月) 16:51 -

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

>同じデータ型のエクセルデータをインポートしました。

データ型が一緒と言う事なので、
クエリで処理せずにワークテーブルを作って
そこにデータを追加する、という考え方ではどうでしょうか。


どうしてもクエリが良い、という事でしたら下記のようなテーブルに

T_Union
ID DATA
1 東京新築A見積テーブル
2 大阪新築B見積テーブル

エクセルからインポートする際に値を書き込んでいくようなコードを作成して、
VBA で動的にユニオンクエリを作成する事も可能です。
・ツリー全体表示

【6763】ユニオンクエリを追加したい!!
質問  rara  - 05/11/7(月) 16:16 -

引用なし
パスワード
   いつも勉強させてもらってます。
ユニオンクエリについて質問させてください。

エクセル(新築A見積.xls)からインポートしてきたデータ(東京新築A見積テーブル)があります。
この「新築A見積.xls」と同じデータ型のエクセルデータをインポートしました。
 インポートしたデータ
 「大阪新築B見積テーブル」
これをユニオンクエリで繋げました。
《現在》
 SELECT * from 東京新築A見積テーブル
 UNION select *from 大阪新築B見積テーブル;

しかし、インポートしたいデータは、かなりの数があります。
 「広島新築C見積テーブル」
 「福岡新築D見積テーブル」
      ・
      ・
      ・
 ※これらのテーブルの名前には規則性はありません。
この複数のデータをインポートする度にクエリ中身を追加するのはつらいため、
フォームで、コマンドボタンをクリックすると、インポートしたデータをこのユニオンクエリに追加していきたいのです。
《希望の形》 
 SELECT * from 東京新築A見積テーブル
 UNION select *from 大阪新築B見積テーブル;
 UNION select *from 広島新築C見積テーブル;
      ・
      ・
      ・
なにか良い方法はないでしょうか。
よろしくお願いします。
・ツリー全体表示

【6762】Re:日付入力ボタンを作るには
回答  クロ  - 05/11/7(月) 14:41 -

引用なし
パスワード
   テキストボックスのプロパティの既定値に
Date()
とすればコマンドボタンは要らないのでは?
・ツリー全体表示

【6761】日付入力ボタンを作るには
質問  MINAPU  - 05/11/7(月) 13:58 -

引用なし
パスワード
   初めて質問させていただきます。
アクセス97を勉強中の者です。

今、情報を入力するフォームを作っているのですが、
毎回日付を手入力するのは面倒なので、日付用のテキストボックスに
今日の日付を入力するボタンを作り、出来れば手入力も併用出来るように
したいのですが、どのようにすればよいのでしょうか。
よろしくお願い致します。
・ツリー全体表示

【6760】Re: パススルーか、ストアドなら?
お礼  tomono  - 05/11/7(月) 13:49 -

引用なし
パスワード
   回答ありがとうございます!

>回避しようとするなら、ADO等で、直接ストアドで発行する事で256個目以降のフィールド
>を認識できるかもしれません。
>
>もしくはパススルークエリーか。

やってみます。
初心者なのでまた時間がかかってしまうと思うので、とりあえずお礼まで。

>(というか、200フィールド越える時点で普通は、構成を再考するか、分割するでしょう。)

既存のデータベースが300フィールド以上あり、構成変更ができないのです(泣)
・ツリー全体表示

【6759】Re: パススルーか、ストアドなら?
回答  たん  - 05/11/7(月) 13:10 -

引用なし
パスワード
   > oracleとテーブルリンクする際、データ項目が300個以上あり入りきりませ

Oracle側が300フィールド以上有って、という話であれば、リンクでは無理です。

ご存知の通り、Accessは255フィールドまでしか使えませんので。

回避しようとするなら、ADO等で、直接ストアドで発行する事で256個目以降のフィールド
を認識できるかもしれません。

もしくはパススルークエリーか。

ただ、データベースであるにも関わらず、横に長い(フィールド数が多い)のは
テーブル構成が悪いのかもしれません。

ただ、私自身は300フィールド以上のデータベースなんて処理した事が無いので
推測に過ぎません。
(というか、200フィールド越える時点で普通は、構成を再考するか、分割するでしょう。)
・ツリー全体表示

【6758】Re:SeekとArray
回答  小僧  - 05/11/7(月) 11:40 -

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

>特にエラーは出ないのですが

という事でしたが、ご提示されたコードで本当にエラーがでないのでしょうか。
当方の環境ですとエラー退治だけで一苦労でしたが…。


掲示板で質問して、何かしらのヒントを得たいという気持ちは解るのですが、
例えばご提示されたコードで

>'費目マスタ
>Dim rsH As ADODB.Recordset
>'出張所マスタ
>Dim rsSB As ADODB.Recordset

>Set rsH = New ADODB.Recordset
>Set rsSB = New ADODB.Recordset

>rsH.Open "SELECT T_費目マスタ.* FROM T_費目マスタ " & _
>     "WHERE (((T_費目マスタ.除)<>1));", cN, adopkeyset, adLockReadOnly

>rsSB.Open "SELECT T_出張所マスタ.* FROM T_出張所マスタ " & _
>     "WHERE (((T_出張所マスタ.除)<>1));", cN, adopkeyset, adLockReadOnly

これらは何の意味があるのでしょうか。
(ご提示して頂いた部分ですと開いて閉じているだけに思えますが。)

色々とうまく行かない事があってゴミが残ってしまっているのかもしれませんが、
質問をする際に手間を惜しまずに、提示するコードを今一度見直してみてください。

現在の所、
1) レコードセットの Open を記述する位置
2) Open する際の引数(記述ミス?)
3) Open する際の引数(adCmdTableDirect の指定漏れ)
4) Seek の際にインデックスを指定していない

等など、エラーが発生してしまう箇所がいくつかあります。


※ コードを見ての感想なのですが、
  不一致クエリ + 追加クエリ でもできそうですね。
  ADO より SQL で行う方が得意なのでしたら
  そちらでも検討されてみるのもいいかと思われます。
・ツリー全体表示

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