Access VBA質問箱 IV

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

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


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

【10155】Re:コンボボックスについて
発言  VBWASURETA  - 08/1/21(月) 13:52 -

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

補足です。

コンボボックスの切り替えタイミングのイベントはフォーカス喪失時の
イベントに当たります。
そのイベント内に

DoCmd.Requery forms![フォーム名]![コンボボックス名]

入れることで、該当のコンボボックスに割り当てられている
クエリー(SQL)が更新されてコンボボックスのリストが更新されます。
・ツリー全体表示

【10154】Re:コンボボックスについて
回答  VBWASURETA  - 08/1/21(月) 9:11 -

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


こんにちは。

>コンボボックスの切り替えタイミング?とはどういう意味なのでしょうか?
ですが、DoCmd.Requery は再クエリーといって再度クエリーを更新するという
処理を意味してます。
この時点で気づくかも知れませんが、
コンボボックスのリストはクエリーですから更新をかけないと
リストの内容が変わらないということです。
なので、最初のコンボボックス(分類)の内容が変わると
次のコンボボックス(製品)のリスト内容が
変わらないとダメですよね?
そいうことです。
・ツリー全体表示

【10153】Re:コンボボックスについて
質問  mai E-MAIL  - 08/1/20(日) 23:24 -

引用なし
パスワード
   ▼VBWASURETA さん:
ご回答して頂き本当にありがとうございます。
助かりました。

ところで、一つどうしても分からないのが下記の文章です。

コンボボックスの切り替えタイミング?とはどういう意味なのでしょうか?
どうしても、いまいち理解が出来なくて悩んでます。
本当にどうしようもない初心者でごめんなさい・・・
よろしければ、詳しく教えていただきたいのですが・・・
よろしくお願いします。
>
>但し分類のコンボボックス切り替えタイミングで
>DoCmd.Requery [Forms]![フォーム名]![分類コンボ名]
>が必要になります。
・ツリー全体表示

【10152】Re:コンボボックスについて
回答  VBWASURETA  - 08/1/20(日) 21:15 -

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

こんばんは。

まず、テーブルの紐付け方から覚えた方が良いです。
データベース正規化で調べると良いと思います。


例えば:

テーブルA
−−−−−−−−−−
商品分類|アイテム名
−−−−−−−−−−
01   |照明
02   |家具
03   |電化製品


テーブルB
−−−−−−−−−−−−
商品分類|製品名
−−−−−−−−−−−−
01   |スタンド
01   |間接照明
01   |スポットライト


テーブルC
−−−−−−−−−−−−
商品分類|製品名
−−−−−−−−−−−−
02   |ベッド
02   |テーブル
02   |デスク


テーブルD
−−−−−−−−−−−−
商品分類|製品名
−−−−−−−−−−−−
03   |レンジ
03   |冷蔵庫
03   |洗濯機


ようなテーブルを用意します。
見てわかるかと思いますが、紐付けるフィールド
つまり商品分類が必要になります。
但し、コンボボックスと紐付ける場合に
フィールドが複数になるのでちょっと
VBAを覚えないと厳しいと思います。


ただ、もっとわかりやすいのは以下のような構成が
望ましいかも知れません。


分類マスタテーブル
−−−−−−−−−−
商品分類|アイテム名
−−−−−−−−−−
01   |照明
02   |家具
03   |電化製品


商品テーブル
−−−−−−−−−−−−−−−−
商品分類|商品CD|製品名
−−−−−−−−−−−−−−−−
01   |1−1|スタンド
01   |1−2|間接照明
01   |1−3|スポットライト
02   |2−1|ベッド
02   |2−2|テーブル
02   |2−3|デスク
03   |3−1|レンジ
03   |3−2|冷蔵庫
03   |3−3|洗濯機


のような感じのテーブルにすると、コンボボックスの
値集合ソースに以下の内容を入れるだけで切り替えられます。


SELECT [商品テーブル].[製品名] FROM 分類マスタ INNER JOIN 商品テーブル ON [分類マスタ].[商品分類]=[商品テーブル].[商品分類] WHERE ([分類マスタ].[アイテム名])=[Forms]![フォーム名]![コンボ名]);


但し分類のコンボボックス切り替えタイミングで
DoCmd.Requery [Forms]![フォーム名]![分類コンボ名]
が必要になります。
・ツリー全体表示

【10151】コンボボックスについて
質問  mai E-MAIL  - 08/1/18(金) 22:18 -

引用なし
パスワード
   アクセス初心者な私です。
今、どうしても分からないことがあります。

テーブルで4つリストを作りました。
1.照明
 家具
 電化製品

2.スタンド
 間接照明
 スポットライト

3.ベッド
 テーブル
 デスク

4.レンジ
 冷蔵庫
 洗濯機

上のような4つのテーブルを作り、
フォームで入力画面を作成しました、
そのときに、コンボボックスを使って入力させるのですが、
例えば、1.のリストで、家具を選んで入力すると、次のフィールドでのコンボボックスでは、3.のリストが…、もし「照明」を選んだら2.のリストが出て選べれるようにしたいのですが、どのようにしたらよいのでしょうか?

初歩的な質問で申し訳ないのですが、どうかご回答よろしくおねがいします
・ツリー全体表示

【10150】Re:CopyFolderについて
発言  VBWASURETA  - 08/1/17(木) 14:00 -

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

HPにあったサンプルと見比べていたら若干違うようです。

sub test()
  Dim FSO
  Set FSO = CreateObject("Scripting.FileSystemObject")
  ''C:\Tmp\フォルダのSubフォルダを、C:\Work\フォルダにコピーします
  FSO.CopyFolder "C:\Tmp\Sub", "C:\Work\"
  Set FSO = Nothing
end sub

フォルダの指定が違うようです。

元のフォルダ:最後に"\"無しです

"C:\Tmp\Sub"

コピー先フォルダ:最後に"\"有り

"C:\Work\"
・ツリー全体表示

【10149】Re:CopyFolderについて
回答  VBWASURETA  - 08/1/17(木) 13:34 -

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

エラーコード76は指定フォルダが見つからないエラーのようです。
パスは正しいのでしょうか?

後、使用された変数、オブジェクト全て解放されていますでしょうか?

PCを再起動することで書き込みができるとのことなので、
バッティングかどちらかに思われます。
・ツリー全体表示

【10148】CopyFolderについて
質問  kiki  - 08/1/17(木) 11:46 -

引用なし
パスワード
   2台のPCで1つのMO装置にバックアップするときに下記のような現象が発生して悩んでいます。どうか良きアドバイスをお願い致します。

Win Xp(Pro)でACCESS2000を使っています。

ACCESSで作成したシステムを2台のPCで別々に運用しています。それぞれのシステムをMOにバックアップするようにしています。
MO装置は1台しかなく、1台目にMOを接続して2台目からはこの1台目のMO装置に書き込むようにしています。テストの段階ではPC毎にMO装置を接続しての書き込みは問題なく動作していましたが、MO装置を共用するようにして書き込みテストをすると、「MO装置が見付からない」状態になります。
例えばMO装置が無いPCから書き込みをした後に(正常に動作している)MO装置があるPCで書き込みをすると「MO装置がみつからない」(err.number=76)の状態になります。この状態の時にMO装置があるPCを再起動して書き込みをすると正常に動作します。このような現象を解消する方法をお教え下さい。以下にMOへの書き込みコードを記述しますのでどうか良きアドバイスをお願いいたします。(共通のコードです)

Dim strFileSystem as Object
Dim strInFolder  as String
Dim strOutFolder as String

Select Case Rst!Computer_Name
    Case "Honsha001"
       strInFolder = "C:\本社システム1"   
       strOutFolder = "F:\BackUp1"
    Case "Honsha002"
       strInFolder = "C:\本社システム2"
       strOutFolder = "\\Honha001\F\BackUp2"
End Select

strFileSystem.CopyFolder strInFolder, strOutFolder

'オブジェクトの開放
Set strFileSystem = Nothing
    
MsgBox "MOに退避できました"
・ツリー全体表示

【10147】Re:グループ化できない
お礼    - 08/1/16(水) 11:36 -

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

やはりメモ型は制約があるのですね。勉強になりました。

どうもありがとうございました。
・ツリー全体表示

【10146】Re:グループ化できない
発言  VBWASURETA  - 08/1/16(水) 9:21 -

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

Gin_IIさんのご指摘通りですが、メモ型は大容量領域となるので
グループに別けることは出来ません。

直接レコード件数とか見る場合は、自分の場合必要な条件絞込み後に
件数だけを取り出すやり方にしてます。この方法だと全体が見れませんが。

後に、集計目的で使用されるのでしたら基本メモ型は避けて
テキスト型を使用するほうがよいかと思います。

もしくは、集計区分項目(フィールド)を設けるかですね。
・ツリー全体表示

【10145】Re:グループ化できない
回答  Gin_II  - 08/1/15(火) 23:15 -

引用なし
パスワード
   >メモ型のフィールドでグループ化できません。

仕様だったと思います。
メモ型は、いろいろと制約がありますので。
・ツリー全体表示

【10144】グループ化できない
質問    - 08/1/15(火) 19:03 -

引用なし
パスワード
   メモ型のフィールドでグループ化できません。入力してあるデータは間違いなく同じ内容なのですが、何故でしょう。
ご存知の方、いらっしゃいましたらご教示のほどお願いいたします。
・ツリー全体表示

【10143】Re:GoToRecord
発言  VBWASURETA  - 08/1/11(金) 15:19 -

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

こんにちは。
ちょっと気になったので記載します。

> DoCmd.GoToRecord acDataForm,"F_得意先一覧",acGoTo,1(先頭レコードに戻りたい)
>何故、フォーム名をしていするとエラーになるか分かりませんが取敢えず教えて頂いたコードでやって見ます。

このエラーですが、データを持っているのはサブフォームですよね?
指定しているのはメインフォームではデータを持っていないからでは
ないでしょうか?


解決されてますが気になりましたので記載しました。
・ツリー全体表示

【10142】Re:プリンタの設定について教えてください
お礼  たけ  - 08/1/11(金) 13:55 -

引用なし
パスワード
   ▼VBWASURETA さん:
ありがとうございます。
うまく起動することができました。
本当に丁寧に教えていただき感謝しています。
・ツリー全体表示

【10141】Re:プリンタの設定について教えてください
回答  VBWASURETA  - 08/1/11(金) 13:23 -

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

1つ回答が漏れてました。


>あとコンパイルをかけると
>Set WshNet = CreateObject("Wscript.Network")
>の部分でコンパイルエラーになります。変数が定義されていませんとなります。
>参照設定で何か設定しないといけないのですか?

コンパイルオプション設定の問題ですね。
エラーの通り「WshNet」の変数が定義されていないということなので、

Dim WshNet As Object

の定義を追加していただければエラーは消えるはずです。
・ツリー全体表示

【10140】Re:プリンタの設定について教えてください
回答  VBWASURETA  - 08/1/11(金) 12:56 -

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

>AccessでExcelを開きシートにデータを入力しています。

それであれば、

>>        '// ここに印刷処理のコードを追加してください

にそのソースを追加していただければ出来ます。


>下記のモージュールで通常使うプリンタ名取得関数
>についてなのですが、通常に使うプリンタは変更プリンタみたく
>Const trDefaultPrinter = "KYOUSERA DEN26"
>に固定してしまえば通常使うプリンタ名取得関数は必要ないのですか?

元々のプリンタ名取得は固定にしてしまえば不要です。
ただ、今後通常使うプリンタ変更等があれば逐一そのソース箇所の
修正となりますので、取得したほうがいいかと^^;
なので、サンプルの変更プリンタもConst定義ではなく、マスタデータ化
するなどの方がいいかも知れません。
・ツリー全体表示

【10139】Re:日付による抽出について(毎年毎月の...
発言  VBWASURETA  - 08/1/11(金) 12:41 -

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

今頃ですが、多分色々使いそうな内容なので記載します。
この場合、DateSerial関数を使うと手っ取り早いです。

//DateSerial(年,月,日)
//当月の12日から14日抽出
Between DateSerial(year(now), month(now), 12) And _
    DateSerial(year(now), month(now), 14)

//先月の24日から当月の10日抽出
Between DateSerial(year(now), month(now) - 1, 24) And _
    DateSerial(year(now), month(now), 10)

こいう感じで日付の操作が可能です。
因みに日付形式が違う場合はFormat関数で合わせれば大丈夫です。
・ツリー全体表示

【10138】Re:プリンタの設定について教えてください
質問  たけ  - 08/1/11(金) 12:02 -

引用なし
パスワード
   ▼VBWASURETA さん:
本当にありがとうございます。

>プリンタ出力の前に質問があります。

>>いま作成しているモジュールはAccessからExcelのシートに書き出し
>>Excelのシートを出力したいのです。
>
>この部分はできているのでしょうか?
>又、シートに出力はエクスポートのみして印刷操作はExcelからでしょうか?

AccessでExcelを開きシートにデータを入力しています。

下記のサンプルは今まで見たサンプルの中で非常にわかりやすいです。
コメントも書かれていて非常にうれしいです。
下記のモージュールで通常使うプリンタ名取得関数
についてなのですが、通常に使うプリンタは変更プリンタみたく
Const trDefaultPrinter = "KYOUSERA DEN26"
に固定してしまえば通常使うプリンタ名取得関数は必要ないのですか?
他の人もVBAの知識がないので今は余分なモジュールはなくしたいのです。

あとコンパイルをかけると
Set WshNet = CreateObject("Wscript.Network")
の部分でコンパイルエラーになります。変数が定義されていませんとなります。

参照設定で何か設定しないといけないのですか?
よろしくお願いします。

VBA デバック方法についてのメモの参考にさせていただきます。
ありがとうござます。


>
>sub 印刷_Click()
>    Const strOutPrinter = "FUJITSU VSP4901" '変更プリンタ
>    Dim strDefaultPrinter As String
>    
>    '現在の通常使うプリンタ名を列挙
>    If GetDefaultPrinter("", "", strDefaultPrinter) = False Then
>        MsgBox "通常使うプリンタが見つかりませんでした"
>        Exit Sub
>    End If
>
>    If (MsgBox(印刷を開始しますか?", vbYesNo) = vbYes) Then
>
>        '指定のプリンタに変更
>        If (FncPrintOut( strOutPrinter ) = False) Then
>            MsgBox strOutPrinter & ":通常使うプリンタが見つかりませんでした"
>            Exit Sub
>        End If
>
>        '// ここに印刷処理のコードを追加してください
>
>
>        '元のプリンタに通常使うプリンタとして戻す
>        If (FncPrintOut( strDefaultPrinter ) = False) Then
>            MsgBox strDefaultPrinter & ":通常使うプリンタが見つかりませんでした"
>            Exit Sub
>        End If
>
>    End If
>End Sub
>
>
>'プリンタ変更関数
>Function FncPrintOut(StrPrinterName As String ) As Boolean
>  Dim strdefoultprt As String
>  Dim i As Integer
>  
>  FncPrintOut = False
>  Set WshNet = CreateObject("Wscript.Network")
>  With WshNet.EnumPrinterConnections
>    For i = 0 To .Count - 1 Step 2
>      If (.Item(i + 1) = StrPrinterName) Then '変更するプリンタが見つかった
>        'ここで通常使うプリンタとして設定する。
>        WshNet.SetDefaultPrinter .Item(i + 1)  '.Item(i + 1) はインストールされているプリンタ名の配列
>              FncPrintOut = True
>        Exit For
>      End If
>    Next
>  End With
>
>End Function
>
>'通常使うプリンタ名取得関数
>Function GetDefaultPrinter(strUser, strPassword, oDefault) As Boolean
>
>  On Error Resume Next
>  GetDefaultPrinter = False
>  
>  Dim oService
>  Dim oPrinter
>  Dim iRetval
>  Dim oEnum
>  
>  iRetval = 1
>  
>  If PConnect("", kNameSpace, strUser, strPassword, oService) Then
>    
>    Set oEnum = oService.ExecQuery( _
>      "select DeviceID from Win32_Printer where default=true")
>  Else
>    GetDefaultPrinter = 1
>    Exit Function
>  
>  End If
>  
>  If Err.Number = 0 Then
>    GetDefaultPrinter = True
>     For Each oPrinter In oEnum
>    
>      oDefault = oPrinter.DeviceID
>     Next
>    
>     iRetval = 0
>    
>  Else
>    wscript.echo "通常使うプリンタを取得できません" & vbCrLf _
>             & Hex(Err.Number) & " " & Err.Description
>  End If
>
>  'GetDefaultPrinter = iRetval
>
>End Function
>
>
>Function PConnect(strServer, strNameSpace, strUser, _
>                   strPassword, oService)
>
>  On Error Resume Next
>
>  Dim oLocator
>  Dim bResult
> 
>  oService = Null
> 
>  bResult = False
> 
>  Set oLocator = CreateObject("WbemScripting.SWbemLocator")
>
>  If Err = 0 Then
>
>    Set oService = oLocator.ConnectServer(strServer, _
>               strNameSpace, strUser, strPassword)
>
>    If Err = 0 Then
>
>      bResult = True
>   
>      oService.Security_.impersonationlevel = 3
>      oService.Security_.Privileges.AddAsString _
>                   "SeLoadDriverPrivilege"
>     
>      Err.Clear
>   
>    Else
>
>      wscript.echo "処理エラー" & vbCrLf _
>        & Hex(Err.Number) & " " & Err.Description
>    End If
> 
>  Else
>    wscript.echo "処理エラー" & vbCrLf _
>        & Hex(Err.Number) & " " & Err.Description
>    
>  End If
> 
>  PConnect = bResult
>      
>End Function
・ツリー全体表示

【10137】Re:プリンタの設定について教えてください
発言  VBWASURETA  - 08/1/11(金) 10:19 -

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

デバックについて参考になるHPがありましたので、
以下にURLを記載します。

//suzuden.exblog.jp/6061097/

以上ご参考までに。
・ツリー全体表示

【10136】Re:プリンタの設定について教えてください
発言  VBWASURETA  - 08/1/11(金) 9:57 -

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

サンプルで1点訂正です。

>sub 印刷_Click()
>    Const strOutPrinter = "FUJITSU VSP4901" '変更プリンタ
>    Dim strDefaultPrinter As String
>    
>    '現在の通常使うプリンタ名を列挙
>    If GetDefaultPrinter("", "", strDefaultPrinter) = False Then
>        MsgBox "通常使うプリンタが見つかりませんでした"
>        Exit Sub
>    End If
>
>    If (MsgBox(印刷を開始しますか?", vbYesNo) = vbYes) Then
>
>        '指定のプリンタに変更
>        If (FncPrintOut( strOutPrinter ) = False) Then
>            MsgBox strOutPrinter & ":通常使うプリンタが見つかりませんでした"
>            Exit Sub
>        End If
>
>        '// ここに印刷処理のコードを追加してください
>
>        '元のプリンタに通常使うプリンタとして戻す
>        If (FncPrintOut( strDefaultPrinter ) = False) Then
>            MsgBox strDefaultPrinter & ":通常使うプリンタが見つかりませんでした"
>            Exit Sub
>        End If
>    End If
>End Sub

この関数の

>    If (MsgBox(印刷を開始しますか?", vbYesNo) = vbYes) Then



    If (MsgBox("印刷を開始しますか?", vbYesNo) = vbYes) Then

でした。
後、質問も内容がわからないと書かれますと回答側も何を質問しているの?
になりますので、やりたい動作、試した内容で何がわからないのかを
明確に書いた方がいいです。

丸投げして、回答してもらってもこの処理は何をしてるの?
どこをどうやって修正して自分で作成したソースのどのメソッドに
実装すればいいの?とかになりますよね?

自分自身が理解してないと、毎回同じ質問を繰り返したり、
何を質問したらいいのかわからなくなったりしますからね。

プログラミングを勉強するならデバックの方法から覚えると
理解しやすいかと思います。(自分自身の解釈で理解できますから)
・ツリー全体表示

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