Access VBA質問箱 IV

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

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


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

【4931】Re:ExcelのデータをAccessのデータ...
お礼  nemotake  - 05/4/20(水) 13:04 -

引用なし
パスワード
   小僧 さん
ありがとうございます。
大変わかりやすくてたすかりました。
早速やってみます。
本当にありがとうございました
・ツリー全体表示

【4930】Re:エクスポート時にシート名をコントロー...
発言  小僧  - 05/4/20(水) 11:56 -

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

>もうすこし自分の力で研究してみたいと思います。

【4919】Re:既存のExcelファイルにエクスポートするには
のコードを少し改変してあります。
少しでも研究のお力になれれば幸いです。

Sub xlsOut2()
Dim FSO As Object
Dim RS As DAO.Recordset
Dim xlsApp As New Excel.Application
Dim xlsWkb As New Excel.Workbook
Dim xlsSht As New Excel.Worksheet
Dim MyTBL As String
Dim MyFile As Variant
Dim ShtName As String
Dim MySheet As Variant
Dim Cnt As Long
Dim FLG As Boolean

'出力するテーブル、出力先ファイルの指定
  MyFile = "C:\回数_埼玉.xls"
  MyTBL = "回数_当月"
  ShtName = "回数_4月"
 
'MyFileの存在チェック
  Set FSO = CreateObject("Scripting.FileSystemObject")
    If Not (FSO.FileExists(MyFile)) Then
    
'MyFileがなかった時はそのままエクスポート
      DoCmd.TransferSpreadsheet acExport, _
      acSpreadsheetTypeExcel9, MyTBL, MyFile, True
 
'シートの名前を変更
      Set xlsWkb = xlsApp.Workbooks.Open(MyFile)
      xlsWkb.Sheets(MyTBL).Name = ShtName
      xlsWkb.Save
      xlsWkb.Close: Set xlsWkb = Nothing
      xlsApp.Quit: Set xlsApp = Nothing
    Else
    
'MyFileがあった時はレコードセットにMyTBLの値を代入
      Set RS = CurrentDb.OpenRecordset(MyTBL, dbOpenDynaset)
      Set xlsWkb = xlsApp.Workbooks.Open(MyFile)

'同名のシートの検索
      FLG = False
      For Each MySheet In xlsWkb.Sheets
        If MySheet.Name = ShtName Then
          FLG = True
          Exit For
        End If
      Next

'同名のシートがあった場合は全クリア、
'無かった場合はブックの最後にシートを追加
      If FLG Then
        xlsWkb.Sheets(ShtName).Cells.ClearContents
      Else
        Cnt = xlsWkb.Sheets.Count
        xlsWkb.Sheets.Add after:=xlsApp.Worksheets(Cnt)
        xlsWkb.ActiveSheet.Name = ShtName
      End If
      
'シートを開く
      Set xlsSht = xlsWkb.Sheets(ShtName)
      
'シートの1行目はフィールドの名前を書き込む
      For Cnt = 1 To RS.Fields.Count
        xlsSht.Cells(1, Cnt).Value = RS.Fields(Cnt - 1).Name
      Next

'シートの2行目以降はレコードセットに代入された値をコピー
      xlsSht.Range("A2").CopyFromRecordset RS
      
'シートの保存、オブジェクトの開放
      xlsWkb.Save
      xlsWkb.Close: Set xlsSht = Nothing: Set xlsWkb = Nothing
      xlsApp.Quit: Set xlsApp = Nothing
      RS.Close
      Set RS = Nothing
    End If
End Sub
・ツリー全体表示

【4929】Re:エクスポート時にシート名をコントロー...
お礼  にしもり  - 05/4/20(水) 11:06 -

引用なし
パスワード
   ▼小僧 さん:
>Excel側の命令を使うことが必要になってきます。

わかりました。
もうすこし自分の力で研究してみたいと思います。
ありがとうございました。
・ツリー全体表示

【4928】Re:エクスポート時にシート名をコントロー...
発言  小僧  - 05/4/20(水) 10:36 -

引用なし
パスワード
   ▼にしもり さん:
おはようございます。
 
【4842】既存のExcelファイルにエクスポートするには
【4871】2行目からインポートしたい

などを拝見させて頂いておりますが、
今回も新たなブックにエクスポートでなく
存在するファイルに対しての追加処理なのでしょうか?

単純な新規のエクスポート、インポートの処理以外を行うには
TransferSpreadsheet メソッドを使うのは適していないように思われます。

Excelのシートを操作するにはAccessにはそのような機能はないので、
Excel側の命令を使うことが必要になってきます。

TransferSpreadsheet メソッドでなくオートメーションを利用して
Excelを操作する事を検討されてみてはいかがでしょうか?
・ツリー全体表示

【4927】Re:ACCESSからEXCELを出力した時の表示形...
回答  小僧  - 05/4/20(水) 9:49 -

引用なし
パスワード
   ▼でん☆ さん:
おはようございます。

エクセル上に代入された値は「数値」なので
普通に足し算やSUM関数で集計などもできます。

>ある1列だけは数値の表示形式に変更して出力した
>いのですが方法がわかりません。

当方が意味を取り違えてしまったのかもしれませんが、
エクセルの「書式」→「セル」→「書式タブ」にある
分類を「数値」に変えるのであれば
VBAによる操作が必要になります。
・ツリー全体表示

【4926】Re:ExcelのデータをAccessのデータ...
発言  小僧  - 05/4/20(水) 9:39 -

引用なし
パスワード
   ▼nemotake さん:
おはようございます。

ご提示された例が当方にはちょっと解りづらいので
以下のような例をあげさせて頂きます。

ブック名:temp.xls
シート名: 計画
セル  :A1

にある値を

テーブル名:計画テーブル
月(テキスト型)  値(テキスト型)
1月
2月
3月
4月

4月の値フィールドに挿入する例です。

※要Excel、ADO参照設定

Sub エクセル値参照()
Dim xlsApp As New Excel.Application
Dim xlsWkb As New Excel.Workbook
Dim WkbName As String
Dim ShtName As String
Dim TblName As String
Dim RS As DAO.Recordset

  WkbName = "C:\temp.xls"
  ShtName = "計画"
  TblName = "計画テーブル"
  Set RS = CurrentDb.OpenRecordset(TblName, dbOpenDynaset)
  Set xlsWkb = xlsApp.Workbooks.Open(WkbName)
    RS.FindFirst "月 = '4月'"
    RS.Edit
    RS![値] = xlsWkb.Sheets(ShtName).Range("A1").Value
    RS.Update
  xlsWkb.Close: Set xlsWkb = Nothing
  xlsApp.Quit: Set xlsApp = Nothing
  RS.Close: Set RS = Nothing
End Sub
・ツリー全体表示

【4925】Re:テーブルの追加・変更・削除の許可/禁...
お礼  木村義春  - 05/4/19(火) 21:22 -

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

ありがとうございます。

>データシートビューにすればテーブルを開いたときと全く同じ表示に
>なります。

やってみたところ、確かに同じ表示になっていましたw

>このようなレイアウトの問題でテーブル表示にしていたのなら、
>フォームでデータシートビューにすればいいですね。

>フィールド数が多ければ、データシートビューでもスクロールするしないと、
>全部を見ることはできませんよね。
>多くのフィールドを1行で表示させることがそもそも見やすいのかどうか
>という問題もあります。

>Accessに付属のノースウィンドサンプルデータベースとか、ネットなどで
>いろいろなサンプルをみて、いろいろな表現方法が有りますので、
>参考にされてみてはどうでしょうか。

ご返信が遅くなって申し訳ないですが、参考にがんばります。
・ツリー全体表示

【4924】エクスポート時にシート名をコントロール...
質問  にしもり  - 05/4/19(火) 10:08 -

引用なし
パスワード
   こんにちは。
下記の記述では「回数_当月」というシートが回数_埼玉.xlsに出来ます。

 DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel97, "回数_当月", "C:\回数_埼玉.xls"

エクスポートする際に「回数_当月」を「回数_4月」「回数_5月」・・・というシート名にしたいのですが、
モジュール内でコントロールを行なうにはどうすればよいでしょうか?
・ツリー全体表示

【4923】Re:ACCESSからEXCELを出力した時の表示形...
質問  でん☆  - 05/4/18(月) 19:33 -

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

はじめまして。貴重なアドバイスありがとうございます。

テーブルの設定を見直したところ ”見事に” テキスト型の
設定となっていました・・・お恥ずかしい^^;;;

そこで、アドバイス通りテーブルの設定を数値に変更して
出力したところ、見た目?(EXCELのセル上は右より)は
数値のようになったのですがEXCELのセルの書式設定で
確認したところ相変わらず分類は 標準 のままでした?
これって、うまくいっているのでしょうか?
・ツリー全体表示

【4922】ExcelのデータをAccessのデータにし...
質問  nemotake  - 05/4/18(月) 15:34 -

引用なし
パスワード
   モジュールで処理したいのですが、Excelのシート中のデータをAccessのテーブルに格納したいのですが、Excelのデータを使用するのは初めてなので教えてください。
例)シート名・・・計画
  A1のデータ1000を
  Accessのテーブル・・・・計画テーブル
  の4月に格納したいのですが、全然わかりません。
Excelのデータの読み読み方、データの記述の仕方がよくわかりません。
よろしくお願いします
・ツリー全体表示

【4921】Re:ACCESSからEXCELを出力した時の表示形...
回答  小僧  - 05/4/18(月) 11:06 -

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

>ACCESSのクエリの内容をEXCELに出力する事となり

クエリの内容をExcelに出力する手段が色々あるのですが、
VBAでTransferSpreadsheetメソッドを使用した場合は
元のテーブル(クエリ)のフィールドが数値型であれば
Excel側でも数値として認識してる模様です。
・ツリー全体表示

【4920】Re:使用可能から私用不可への変更
発言  小僧  - 05/4/18(月) 10:54 -

引用なし
パスワード
   ▼まめ さん:
おはようございます。

>フォーム(サブフォーム外)の別のボタンにフォーカスをもっていく
当方も色々と試してみたのですが、これについては解決できませんでした。
識者の回答をお待ちしております。

>中止ボタンを押すと、使用不可に変更したいのですが
とりあえずの回避策として、サブフォームにある別のコントロールに
フォーカスを持たせると目的のコンボボックスは使用不可にできる模様です。

  Me.[サブフォーム名].Controls![他のコントロール].SetFocus
  Me.[サムフォーム名].Controls![コンボボックス名].Enabled = False
・ツリー全体表示

【4919】Re:既存のExcelファイルにエクスポートす...
回答  小僧  - 05/4/18(月) 9:56 -

引用なし
パスワード
   ▼clike さん:
おはようございます。

>「実行エラー'1004':
>ブックのシートをすべて削除または非表示にすることはできません」
>というエラー表示がでています。

シートが1枚しかない時は削除できない、という事を
考慮しておりませんでした。
当日のシートがあった時は削除でなく、クリア処理で対応してみました。

Sub xlsOut()
Dim FSO As Object
Dim RS As DAO.Recordset
Dim xlsApp As New Excel.Application
Dim xlsWkb As New Excel.Workbook
Dim xlsSht As New Excel.Worksheet
Dim MyTBL As String
Dim MyFile As Variant
Dim MyDate As String
Dim MySheet As Variant
Dim Cnt As Long
Dim FLG As Boolean

'出力するテーブル、出力先ファイルの指定
  MyDate = Format(Now(), "m月dd日")
  MyTBL = "tempTBL"
  MyFile = "c:\temp.xls"
 
'存在チェック
  Set FSO = CreateObject("Scripting.FileSystemObject")
    If Not (FSO.FileExists(MyFile)) Then
      DoCmd.TransferSpreadsheet acExport, _
      acSpreadsheetTypeExcel9, MyTBL, MyFile, True
 
'エクセルシートの名前を変更
      Set xlsWkb = xlsApp.Workbooks.Open(MyFile)
      xlsWkb.Sheets(MyTBL).Name = MyDate
      xlsWkb.Save
      xlsWkb.Close: Set xlsWkb = Nothing
      xlsApp.Quit: Set xlsApp = Nothing
    Else
    
      Set RS = CurrentDb.OpenRecordset(MyTBL, dbOpenDynaset)
      Set xlsWkb = xlsApp.Workbooks.Open(MyFile)

'同日のシートの検索
      FLG = False
      For Each MySheet In xlsWkb.Sheets
        If MySheet.Name = MyDate Then
          FLG = True
          Exit For
        End If
      Next

'出力先ファイルのシートを選択
      If FLG Then
        xlsWkb.Sheets(MyDate).Cells.ClearContents
      Else
        Cnt = xlsWkb.Sheets.Count
        xlsWkb.Sheets.Add after:=xlsApp.Worksheets(Cnt)
        xlsWkb.ActiveSheet.Name = MyDate
      End If
      
'シートへの書き込み
      Set xlsSht = xlsWkb.Sheets(MyDate)
      For Cnt = 1 To RS.Fields.Count
        xlsSht.Cells(1, Cnt).Value = RS.Fields(Cnt - 1).Name
      Next
      xlsSht.Range("A2").CopyFromRecordset RS
      xlsWkb.Save
      xlsWkb.Close: Set xlsSht = Nothing: Set xlsWkb = Nothing
      xlsApp.Quit: Set xlsApp = Nothing
      RS.Close
      Set RS = Nothing
    End If
End Sub
・ツリー全体表示

【4918】Re:テーブルの追加・変更・削除の許可/禁...
回答  hatena  - 05/4/17(日) 10:47 -

引用なし
パスワード
   >必要な入力フィールド数が全部で30くらいあるので、オートフォームで
>表示してみると、テキストボックスの範囲が狭くなったり、広くなったりと
>ばらばらになってしまい、きれいにそろえようとしても、フォームの幅の制限で
>そろえることが難しいという状況であります。

データシートビューにすればテーブルを開いたときと全く同じ表示に
なります。
このようなレイアウトの問題でテーブル表示にしていたのなら、
フォームでデータシートビューにすればいいですね。

フィールド数が多ければ、データシートビューでもスクロールするしないと、
全部を見ることはできませんよね。
多くのフィールドを1行で表示させることがそもそも見やすいのかどうか
という問題もあります。

フォームなら、データシートビュー以外に、
リストボックスでメイン情報を一覧表示さらに詳しい詳細情報をサブフォームで一覧表示とか、
タブコントロールで情報をグループ分けして配置してページ切り替えして表示させるとか、
などなど、状況に応じていろいろな表示方法が工夫できます。

Accessに付属のノースウィンドサンプルデータベースとか、ネットなどで
いろいろなサンプルをみて、いろいろな表現方法が有りますので、
参考にされてみてはどうでしょうか。
・ツリー全体表示

【4917】Re:テーブルの追加・変更・削除の許可/禁...
発言  木村義春  - 05/4/17(日) 2:07 -

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

hatena様、夜遅くまで回答を頂きましてお礼申し上げます。

>テーブルはデータを格納する機能
>クエリはデータの表示法を定義したり加工したりする機能
>フォームはユーザーインターフェイスの機能
>というように機能分化されています。
>テーブルは本来は、設計者以外さわれないようにするというのが
>安全な設計法だと思います。

ご指摘いただきましてありがとうございます。
なるほど。。。
そこまで考えていませんでした。
オートフォームにして表示したほうがベターということですね。
フォームを増やすことでサイズばかり気にしすぎちゃいました。

>大量のデータを扱うのが前提のデータベースで、フォームのサイズなど
>微々たる物です。上記の機能分化の観点から言って、テーブルよりフォームの
>数が多いというのは珍しくもないと思います。
>フィールド数が多いというのはテーブル設計の問題かもしれませんし、
>多くてもタブコントロールを使うとか工夫すればどうにでもなります。
>べつに制限だと思うようなことでもないと思います。

必要な入力フィールド数が全部で30くらいあるので、オートフォームで
表示してみると、テキストボックスの範囲が狭くなったり、広くなったりと
ばらばらになってしまい、きれいにそろえようとしても、フォームの幅の制限で
そろえることが難しいという状況であります。

そこまでこだわるなら、テキストボックスの高さを高くすればといわれそう
なんですが、逆に見づらくなってしまいます。

普通は、「あいうえお」

しかし、フォームの幅の制限で、テキストの幅をせまくし、高さを高くしたと
しても、例えば、下のようになっちゃいますよね。

あいう ←みづらい
えお

もう少し工夫してみます。
・ツリー全体表示

【4916】Re:テーブルの追加・変更・削除の許可/禁...
回答  hatena  - 05/4/17(日) 0:21 -

引用なし
パスワード
   >テーブル本体を権限によって使い分けておりまして、
>ある権限を持つユーザがテーブルを開いてデータの管理を行う場合が
>あります。

テーブルはデータを格納する機能
クエリはデータの表示法を定義したり加工したりする機能
フォームはユーザーインターフェイスの機能
というように機能分化されています。
テーブルは本来は、設計者以外さわれないようにするというのが
安全な設計法だと思います。

>オートフォームを使って、テーブルをすべて表示する方法もあって、
>それで削除をいいえに設定すればいいという方法も考えられますが、
>フォームをこれ以上増やすとサイズが余計に増えてしまう、フィールド数の
>多さの問題でフォームの幅に入りきれない問題も出てきます。
>何か、Accessって制限があって、何か寂しいです(;、;)

大量のデータを扱うのが前提のデータベースで、フォームのサイズなど
微々たる物です。上記の機能分化の観点から言って、テーブルよりフォームの
数が多いというのは珍しくもないと思います。
フィールド数が多いというのはテーブル設計の問題かもしれませんし、
多くてもタブコントロールを使うとか工夫すればどうにでもなります。
べつに制限だと思うようなことでもないと思います。
・ツリー全体表示

【4915】Re:テーブルの追加・変更・削除の許可/禁...
発言  木村義春  - 05/4/16(土) 23:31 -

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

hatena様、ありがとうございます。

>そのフォームとは別に、
>フィルタをかけないフォームを作成して、
>データシートビュー表示にすれば、見た目はテーブルと
>同じになります。そのフォームをテーブル代わりに使えば
>いいのではないですか。フォームならプロパティで
>「削除の許可」を「いいえ」にするだけです。

そーですね。

>すでに出てますが「セキュリティ」で設定するぐらいしかないと思います。
>そもそもテーブル本体を直接ユーザーにさわらせるという事自体
>危険なことです。

テーブル本体を権限によって使い分けておりまして、
ある権限を持つユーザがテーブルを開いてデータの管理を行う場合が
あります。

オートフォームを使って、テーブルをすべて表示する方法もあって、
それで削除をいいえに設定すればいいという方法も考えられますが、
フォームをこれ以上増やすとサイズが余計に増えてしまう、フィールド数の
多さの問題でフォームの幅に入りきれない問題も出てきます。
何か、Accessって制限があって、何か寂しいです(;、;)
・ツリー全体表示

【4914】Re:テーブルの追加・変更・削除の許可/禁...
回答  hatena  - 05/4/16(土) 21:39 -

引用なし
パスワード
   >一般的なユーザは、個人の情報のみ編集となっているので、
>フィルタをかけて、単独レコード表示しているんです。

そのフォームとは別に、
フィルタをかけないフォームを作成して、
データシートビュー表示にすれば、見た目はテーブルと
同じになります。そのフォームをテーブル代わりに使えば
いいのではないですか。フォームならプロパティで
「削除の許可」を「いいえ」にするだけです。

>念のため、プログラムの制御でなくても、他の方法ってあるでしょうか?
>プログラムではなく、Accessの機能で制御できる方法があるので
>ありましたら、教えて頂けると幸いです。

すでに出てますが「セキュリティ」で設定するぐらいしかないと思います。
そもそもテーブル本体を直接ユーザーにさわらせるという事自体
危険なことです。

>もし、あったらその機能をプログラムで表現する設定することも可能でしょうか?

Group オブジェクト,Userオブジェクト,Documentオブジェクト,
Permissions プロパティ当たりをヘルプで調べてみて下さい。
私自身はこのへんは使ったことがないのでこれ以上のアドバイスは
できません。

・ツリー全体表示

【4913】ACCESSからEXCELを出力した時の表示形式を...
質問  でん☆  - 05/4/16(土) 16:43 -

引用なし
パスワード
   ACCESSのクエリの内容をEXCELに出力する事となり
何とかファイルは出力されたのですが出力後の
EXCELの表示形式が全て標準となっています。
ある1列だけは数値の表示形式に変更して出力した
いのですが方法がわかりません。
よい方法があれば教えて頂けないでしょうか。
よろしくお願い致します。
・ツリー全体表示

【4912】使用可能から私用不可への変更
質問  まめ E-MAIL  - 05/4/16(土) 11:07 -

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

使用可能にしているコンボボックスがサブフォーム内にあり,
中止ボタンを押すと、使用不可に変更したいのですが,
『コントロールがフォーカスを取得しているときは、
  コントロールを無効にすることは出来ません』
というメッセージが出てしまいます.
使用不可に変更する前に
フォーム(サブフォーム外)の別のボタンにフォーカスをもっていく
コードは書いているつもりなのですが,うまくいきません
どうしたらよいでしょうか?

Me."別のボタン名".SetFocus

Me."サブフォーム名".Form.コンボボックス名.Enabled = False
・ツリー全体表示

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