Access VBA質問箱 IV

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

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


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

【4871】2行目からインポートしたい
質問  にしもり  - 05/4/11(月) 16:50 -

引用なし
パスワード
     こんにちは。
名古屋名東区.xlsを2行目から、愛知2課という既存のテーブルに追加するようにインポートしたいのですが、次の記述ではタイトル行も入ってしまいます。
どうすれば2行目からインポートできますか?
どなたかご教示ください。

 DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel97, "愛知2課", "C:\DB\名古屋名東区.xls"
・ツリー全体表示

【4870】Re:フレキシブルグリッドコントロールの参...
回答  小僧  - 05/4/11(月) 14:55 -

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

こんにちは。
当方フレキシブルグリッドコントロールなる物に
全く知識がありませんが、参照設定を外すコードなら
なんとか…。

Sub test1()
Dim V As Variant

For Each V In Application.References
  If V.Name = "MSFlexGridLib" Then
    Application.References.Remove V
  End If
Next
End Sub
・ツリー全体表示

【4868】Re:コンボボックスについて
回答  小僧  - 05/4/11(月) 13:09 -

引用なし
パスワード
   ▼木村義春 さん:
ご提示された内容ですとちょっと解りかねるところがありましたので、
想像を加えながら…

フォームのコントロールソースが「T_アドレス」で

コンボボックス  「所属コンボ」 
テキストボックス 「番号テキスト」
が存在すると仮定します。

所属コンボ:
コントロールソース:所属
値集合ソース   :SELECT T_所属.所属 FROM T_所属;

番号テキスト:
コントロールソース:番号

として、

Private Sub 所属コンボ_AfterUpdate()
  Me.番号テキスト.Value = DLookup("番号", "T_所属", _
              "[所属] = '" & 所属コンボ.Value & "'")
End Sub

でどうでしょうか?
外していたらすみません。
・ツリー全体表示

【4867】Re:既存のExcelファイルにエクスポートす...
発言  小僧  - 05/4/11(月) 10:27 -

引用なし
パスワード
   土曜日にちょっと覗いた時に、シート名を日付で…という
投稿があったように思われたのですが、削除されてしましましたね…。

コードを考えたのでアップしておきます。

Sub xlsOut()
Dim FSO As Object
Dim xlsApp As New Excel.Application
Dim xlsWkb As New Excel.Workbook
Dim MyTBL As String
Dim MyFile As Variant
Dim MyDate As String
Dim MySheet As Variant
Dim Cnt As Long
  
'出力するテーブル、出力先ファイルの指定
  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 xlsWkb = xlsApp.Workbooks.Open(MyFile)
      For Each MySheet In xlsWkb.Sheets
        If MySheet.Name = MyDate Then
          xlsApp.DisplayAlerts = False
          xlsWkb.Sheets(MyDate).Delete
          xlsApp.DisplayAlerts = True
          Exit For
        End If
      Next

'出力先ファイルにシートを追加
      Cnt = xlsWkb.Sheets.Count
      xlsWkb.Sheets.Add after:=xlsApp.Worksheets(Cnt)
      xlsWkb.ActiveSheet.Name = MyDate
      xlsWkb.Save
      xlsWkb.Close: Set xlsWkb = Nothing
      xlsApp.Quit: Set xlsApp = Nothing
    DoCmd.TransferSpreadsheet acExport, _
    acSpreadsheetTypeExcel9, MyTBL, MyFile, True, MyDate & "!"
    End If
End Sub

1日に複数回出力した場合は、最新のシートのみが存在します。
・ツリー全体表示

【4866】Re:ホイール操作の禁止
発言  ゆう  - 05/4/10(日) 23:59 -

引用なし
パスワード
   やはり、そうするしかないのでしょうか?
完全に移動できなくなってしまうのは、できれば避けたいのですが・・・
・ツリー全体表示

【4865】Re:ホイール操作の禁止
回答  木村義春  - 05/4/10(日) 23:39 -

引用なし
パスワード
   ▼ゆう さん:
>上下に長いフォームでの操作の際、マウスのホイールを転がして上下に
>動かそうとすると、レコードが移動してしまいます。
>このホイールによる操作を上下移動にする、
>もしくはホイールそのものが使えないようにするような方法はありますでしょうか。
>よろしくお願い致します。

ホイールによる操作を禁止にする
=レコード移動を防ぐってことなら、

1レコードのみ表示させるように、フィルタをかければよいのでは?
・ツリー全体表示

【4864】Re:フィルタについて
お礼  うさこ  - 05/4/10(日) 23:19 -

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

ご指導のおかげで考え方がわかりました!
その通りにやってみたら、ここまでの処理はできるようになりました。
とっても助かりました(^^)。
1日お付き合い下さって、本当にありがとうございました。
また質問するかもしれませんので、そのときもぜひよろしくお願いしますm(_ _)m。
・ツリー全体表示

【4863】Re:コンボボックスについて
質問  木村義春  - 05/4/10(日) 23:08 -

引用なし
パスワード
   >T_アドレス
>
>番号   所属
>100 A
>100 B
>200 C
>200 D
>300 E

失礼しました。

T_アドレス

番号   所属
100 A
100 A
200 B
200 B
300 C

です。よろしくおねがいします。
・ツリー全体表示

【4862】コンボボックスについて
質問  木村義春  - 05/4/10(日) 23:06 -

引用なし
パスワード
   所属と所属別に分けた番号を定義したT_所属があります。

T_所属

番号   所属
100 A
200 B
300 C
400 D
500 E

T_アドレスの[所属]で、コンボボックスでA〜Eを選択する。
Aを選んだら、番号は100。Cを選んだら番号は200という風に
所属部分のコンボボックスで選択したら、番号も自動的に入れるように
したい。

T_アドレス

番号   所属
100 A
100 B
200 C
200 D
300 E

T_アドレスのルックアップでコントロールをコンボボックスにして、
SELECT [T_所属].[所属], [T_所属].[番号] FROM T_所属;

としたんですが、選択するところまではOKだけど、
番号が自動的に入力されません。

わざわざ、入力するの大変ですし、どうかにならないでしょうか。
皆さんのお力をお貸しくださいm(__)m
・ツリー全体表示

【4861】Re:フィルタについて
回答  Gin_II  - 05/4/10(日) 21:56 -

引用なし
パスワード
   > <お料理テーブル>
>   お料理名 牛肉 豚肉 鶏肉 タマネギ にんじん ジャガイモ 写真 レシピ     
>    カレー  YES NO  NO  YES    YES    YES   YES  YES
>   オムライス NO  NO YES  YES    NO     NO   NO   YES


テーブル:T_材料
 フィールド:材料ID
       材料名

テーブル:T_料理
 フィールド:料理ID
       料理名
       写真の有無
       レシピの有無

テーブル:T_使用材料
 フィールド:料理ID
       材料ID


のようなテーブル構成がいいと思います。


まぁ、現在の構成を前提で回答します。

フォームの開く時イベントで、

Me!リストボックス.RowSource = _
        "SELECT お料理名, 写真, レシピ FROM お料理テーブル"


フォームモジュールの中に、
Private Sub 抽出サブ()

  Dim strSql As String
  
  If Me!chk牛肉 = True Then
    strSql = strSql & "牛肉 = True AND "
  End If
  
  If Me!chk豚肉 = True Then
    strSql = strSql & "豚肉 = True AND "
  End If
      :(省略)

  strSql = "SELECT お料理名, 写真, レシピ FROM お料理テーブル" _
      & Left(strSql, Len(strSql) - 4)
  Me!リストボックス.RowSource = strSql
  Me!リストボックス.Requery

End Sub


んで、各チェックボックスの更新後イベントで、

Call 抽出サブ

と入れてみてください。

テキストエディタでの直書きなので、間違いがあるかも ^^;
・ツリー全体表示

【4860】ホイール操作の禁止
質問  ゆう  - 05/4/10(日) 18:31 -

引用なし
パスワード
   上下に長いフォームでの操作の際、マウスのホイールを転がして上下に
動かそうとすると、レコードが移動してしまいます。
このホイールによる操作を上下移動にする、
もしくはホイールそのものが使えないようにするような方法はありますでしょうか。
よろしくお願い致します。
・ツリー全体表示

【4859】Re:フィルタについて
質問  うさこ  - 05/4/10(日) 18:12 -

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

>段階的に、リストボックスの値を変更したいんですよね?
>でしたら、そのクエリに抽出条件を設定するか、リストボックスの値集合ソースを
>動的に変更するかしないとダメだってことは理解してもらえましたか?
>
はい!

>どっちの方法でも構わないと思いますが、、
>> チェックボックスで条件をつけて絞り込んでいくという風にしたいのですが、
>これの詳細な内容が分からないので、具体例も提示できません。
>
そうですよね・・

 <お料理テーブル>
  お料理名 牛肉 豚肉 鶏肉 タマネギ にんじん ジャガイモ 写真 レシピ     
   カレー  YES NO  NO  YES    YES    YES   YES  YES
  オムライス NO  NO YES  YES    NO     NO   NO   YES
  

  <フォーム>

  肉類:□ 牛肉 □ 豚肉 □ 鶏肉
  野菜:□ タマネギ □ にんじん □ ジャガイモ

  リストボックス   写真  レシピ  
   カレー      有    有 
   オムライス    無    有


  1.最初はリストボックスに全件表示
  2.例えば、牛肉とタマネギにチェックをつけたら、
    カレーとオムライスを表示
  3.例えば、豚肉のみにチェックをつけたら表示なし
  4.例えば、牛肉とジャガイモにチェックの場合はカレーのみ表示

  という感じです。
  
  検索開始とかのボタンはなくて、どれかのチェックボックスがクリックされた
  ら、すぐにリストボックスに反映させたいのです。

もう頭っからどういう風にしていいのか、参考書をよんでもわからず、
流れだけでも教えていただきたいのです。
わかりにくくてすみませんがよろしくお願いします。
・ツリー全体表示

【4858】Re:フィルタについて
回答  Gin_II  - 05/4/10(日) 17:37 -

引用なし
パスワード
   > そこにクエリ(ただリストボックスに表示させるだけで、条件などは
> つけていません。)を書いてしまうとだめなんでしょうか?

段階的に、リストボックスの値を変更したいんですよね?
でしたら、そのクエリに抽出条件を設定するか、リストボックスの値集合ソースを
動的に変更するかしないとダメだってことは理解してもらえましたか?

どっちの方法でも構わないと思いますが、、
> チェックボックスで条件をつけて絞り込んでいくという風にしたいのですが、
これの詳細な内容が分からないので、具体例も提示できません。


> チェックボックスがクリックされたら、上記のように
> RowSourceを指定するという形にすればいいのでしょうか?
です。
・ツリー全体表示

【4857】Re:フィルタについて
質問  うさこ  - 05/4/10(日) 17:06 -

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

>Me!リストボックス名.RowSource = "SELECT FLD FROM テーブル名"
>のように使うということです。

今はリストボックスの値集合ソースにクエリを作っているのですが、
そこにクエリ(ただリストボックスに表示させるだけで、条件などはつけていません。)を書いてしまうとだめなんでしょうか?

初期画面でリストボックスにデータを全件表示させて、
チェックボックスで条件をつけて絞り込んでいくという風にしたいのですが、
チェックボックスがクリックされたら、上記のように
RowSourceを指定するという形にすればいいのでしょうか?

ほんとに初心者なのですみませんがよろしくお願いします。
・ツリー全体表示

【4856】Re:フィルタについて
回答  Gin_II  - 05/4/10(日) 16:27 -

引用なし
パスワード
   >リストボックスだから使えないのでしょうか?
はい。Filter プロパティは、フォーム・レポートにしかありませんので。


>というのは、DAO の Recordset を使ってやるというこどでしょうか?
DAOは、関係ないです。
Me!リストボックス名.RowSource = "SELECT FLD FROM テーブル名"
のように使うということです。
・ツリー全体表示

【4855】Re:フィルタについて
質問  うさこ  - 05/4/10(日) 15:38 -

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

ご返答、ありがとうございます。
初めて作っているので変な質問ですみません。
リストボックスだから使えないのでしょうか?

それと、リストボックスを使う場合は、

>リストボックスの、RowSource プロパティを、動的に変更するとかに
>なると思います。

というのは、DAO の Recordset を使ってやるというこどでしょうか?
・ツリー全体表示

【4854】Re:フィルタについて
回答  Gin_II  - 05/4/10(日) 14:41 -

引用なし
パスワード
   >そういう場合、フィルタを使えますか?

使えません。
リストボックスの、RowSource プロパティを、動的に変更するとかに
なると思います。
・ツリー全体表示

【4853】フィルタについて
質問  うさこ  - 05/4/10(日) 0:07 -

引用なし
パスワード
   いろいろな条件をチェックボックスでチェックし、
その条件にあったデータだけをリストボックスに表示させたいのですが、
そういう場合、フィルタを使えますか?
テーブルはひとつだけです。
よろしくお願いします。
・ツリー全体表示

【4851】フレキシブルグリッドコントロールの参照...
質問  まさき E-MAIL  - 05/4/9(土) 13:13 -

引用なし
パスワード
   つまづいてしまい、どうにもこうにもいかないので
お知恵を貸してください。

便利なので、Accessでフレキシブルグリッドコントロールを使ったんですが、
配布すると、参照設定が参照不可になり、いちいちはずしてまたチェックしています。

何とか解消しようと思って、コードで
1)Windowsフォルダのパスを取得
2)msflexgrid.ocxの存在確認
3)無ければサーバーからコピーして再起動を促す
4)存在すれば、参照設定にチェックを

という事をしてみたんですが、
やはりうまくいかなかったんです。

いろいろ考えてみたんですが、
チェックの入った状態で配布して、コントロールが存在しない場合、
コードで参照設定をいったん外し、再度設定すればうまくいくかもと考えました。
しかしその方法が分からない・・・いくら検索しても設定方法しか分からないんです。

そもそもこの方法でうまくいくかどうかも分からないんですが、
チェックを外す方法を教えていただけませんか?
現在のコードは以下のとおりです。

' 宣言部
' システムフォルダを取得するための関数宣言
Declare Function GetSystemDirectory Lib "kernel32.dll" _
  Alias "GetSystemDirectoryA" _
  (ByVal lpBuffer As String, _
   ByVal nSize As Long) As Long

' 最大ファイル名文字数の定数
Public Const MAX_PATH = 260

Public Sub Sys_Load()

'処理済の場合はPublic変数[FLX=True]になってるのでExit
If FLX = True Then
  Exit Sub
End If

FLX = False

  Dim lngWin32ApiResultCode  As Long
  Dim strSystemFolder     As String

  ' システムフォルダを取得
  strSystemFolder = Space(MAX_PATH - 1)
  lngWin32ApiResultCode = _
    GetSystemDirectory(strSystemFolder, MAX_PATH)
  strSystemFolder = _
    Left(strSystemFolder, _
       InStr(strSystemFolder, vbNullChar) - 1)
      
  'Microsoft Flex Grid Conrtol 6.0のパス
  strmsflexgrid = _
  strSystemFolder & "\msflxgrd.ocx"
  
  'フレキシブルグリッドコントロールのバージョン確認
  
  Dim Fso As Object
  Dim FilePath As String
  
  Set Fso = CreateObject("Scripting.FileSystemObject")
  FilePath = Fso.GetSpecialFolder(1)
  
  If Fso.GetFileVersion(strmsflexgrid) <> "6.0.81.09" Then
    'バージョンが違う時いったん削除(File_Delete)
    File_Delete (strmsflexgrid)
   
    '最新システムファイルコピー
    CopyFromName = FLX_File_Path
    CopyToName = strmsflexgrid
    
    Call File_Copy '(File_Copy)
  End If
  
  Set Fso = Nothing
  'コントロールが存在しない時コピー
  If FileExists(strmsflexgrid) = False Then
    
    CopyFromName = FLX_File_Path 'サーバーのコントロールファイルパス(定数)
    CopyToName = strmsflexgrid
    
    Call File_Copy
    
     MsgBox "システムファイルのインストールを行いました。" & vbCrLf & _
     "再起動後、再度開いてください。", vbOKOnly
     
    Application.Quit
     
    
  End If
  
  '参照設定

  Set Ref = References.AddFromFile(strmsflexgrid)
 
'処理が済んだのでPublic変数[FLX=True]にする。
FLX = True
     
End Sub

長々すいません。よろしくお願いします。
・ツリー全体表示

【4850】Re:端数について
回答  小僧  - 05/4/8(金) 17:26 -

引用なし
パスワード
   ▼kazumi さん:
こんにちは。
ご提示された内容ですとちょっと解りづらいので、
自分なりに想像して…。

>  kirisute([数量]*(1-0.046),2)としています。

はフォームのコントロールソースにあるとして…

標準モジュールに以下のコードを記述してみてください。

Public Function kirisute(Kazu As Double, Keta As Integer)
  kirisute = (Fix(Kazu * (10 ^ Keta))) / (10 ^ Keta)
End Function

外していたらすみません。
・ツリー全体表示

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