Access VBA質問箱 IV

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

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


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

【11544】Re:フォーム未入力時のエラー表示について
回答  VBA初心者  - 10/3/23(火) 10:48 -

引用なし
パスワード
   有難うございます。

>On Error 文は作成を終結してエラーが無いことを
>確認できるまでコメントかした方がいいです。
 はい。処理を完成するまでコメント化します。

>おそらく Null ではなく 長さゼロの文字列が入力されると
>判定されないのでは?
>
>>If Nz(Me!記入者,"") = "" Then
>
>このように Nz関数に変更するとどうなりますか?
 思い通りに処理が動きました。何故何も入力していない
のにNULLではなく、長さゼロの文字列が入力されてしまうの
でしょうか。
 

以上、ご教授をお願いします。

▼Nao さん:
>まず、エラーチェック等は処理の中ではなく
>処理開始時にチェックするべきです。
>
>On Error 文は作成を終結してエラーが無いことを
>確認できるまでコメントかした方がいいです。
>
>>Private Sub コマンド20_Click() 'レコード追加処理
>>
>>Dim Cn As ADODB.connection
>>Dim Rs As ADODB.Recordset
>
>>On Error GoTo Err_コマンド20_Click
>>
>>If IsNull(Me!記入者) Then
>>  MsgBox "入力が不十分です!!"
>>  DoCmd.GoToControl "記入者"
>>  Exit Sub
>>End If
>
>質問の件について・・・
>おそらく Null ではなく 長さゼロの文字列が入力されると
>判定されないのでは?
>
>>If Nz(Me!記入者,"") = "" Then
>
>このように Nz関数に変更するとどうなりますか?
・ツリー全体表示

【11543】Re:フォーム未入力時のエラー表示について
回答  Nao  - 10/3/20(土) 13:13 -

引用なし
パスワード
   まず、エラーチェック等は処理の中ではなく
処理開始時にチェックするべきです。

On Error 文は作成を終結してエラーが無いことを
確認できるまでコメントかした方がいいです。

>Private Sub コマンド20_Click() 'レコード追加処理
>
>Dim Cn As ADODB.connection
>Dim Rs As ADODB.Recordset

>On Error GoTo Err_コマンド20_Click
>
>If IsNull(Me!記入者) Then
>  MsgBox "入力が不十分です!!"
>  DoCmd.GoToControl "記入者"
>  Exit Sub
>End If

質問の件について・・・
おそらく Null ではなく 長さゼロの文字列が入力されると
判定されないのでは?

>If Nz(Me!記入者,"") = "" Then

このように Nz関数に変更するとどうなりますか?
・ツリー全体表示

【11542】フォーム未入力時のエラー表示について
質問  VBA初心者  - 10/3/18(木) 11:38 -

引用なし
パスワード
   いつもお世話になります。
 伝言用のフォームを作成して共有しようとしております。フォーム記入時に
「記入者」フィールドに入力しないと「入力が不十分です!!」とメッセージを
表示させて、「記入者」フィールドのコントロールにカーソルを合わせたいのですが
「記入者」フィールドがデータ未記入でも「登録しました!!」とメッセージが
表示され、データも登録されてしまいます。
 ない頭で考えてもわかりませんので、どなたかご教授をお願いします。 


Private Sub コマンド20_Click() 'レコード追加処理

On Error GoTo Err_コマンド20_Click

Dim Cn As ADODB.connection
Dim Rs As ADODB.Recordset
  
  Set Cn = New ADODB.connection
  Set Rs = New ADODB.Recordset


  Cn.Open "provider=Microsoft.Jet.OLEDB.4.0;" _
  & "data Source= \\XXX.XX.X.XX\YYY\TEST\TOUROKU_DENGON.mdb"

  Rs.Open "T_DENGON", Cn, adOpenKeyset, adLockOptimistic


  Rs.AddNew
  Rs!HostID = Me!ID
  Rs!コメント = Me!コメント
  Rs!IPアドレス = Me!IP
  Rs!PC名 = Me!Host
  Rs!記入者 = Me!記入者
  

If IsNull(Me!記入者) Then
  MsgBox "入力が不十分です!!"
  DoCmd.GoToControl "記入者"
  Exit Sub
End If
  
Rs.Update
 
  MsgBox "登録しました!!", vbOKOnly, "メッセージ"


Exit_コマンド20_Click:
  Exit Sub

Err_コマンド20_Click:
  MsgBox "すでに登録されています!!"
  Resume Exit_コマンド20_Click


Rs.Close
Cn.Close


End Sub
・ツリー全体表示

【11541】これすげぇ!開始初日で3人ゲト!!!
お礼  ゲットマン E-MAIL  - 10/3/17(水) 23:34 -

引用なし
パスワード
   せっかくだから、気付かれないようにこっそりハメ撮っちゃった!
と思ったら、暗くて撮れてねぇし!!!!(爆笑)

次はペンライトも持って行こ!(笑)
・ツリー全体表示

【11540】Re:EXCELの出力について
お礼  akari  - 10/3/17(水) 13:03 -

引用なし
パスワード
   できました!!
ありがとうございました。
・ツリー全体表示

【11539】Re:EXCELの出力について
発言  超初心者  - 10/3/15(月) 15:11 -

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

> 〜 DLookup([仕入日付], "クエリ") 〜
 〜 DLookup("仕入日付", "クエリ") 〜

としてみて下さい。
・ツリー全体表示

【11538】Re:EXCELの出力について
質問  akari  - 10/3/15(月) 14:15 -

引用なし
パスワード
   C:\ABC\Table_旧.xlsのファイル名を「新_20100315.xls」へ変更したいので、
以下のコードを書きました。実際実行したら、エラーがでました。
ご伝授下さい。
 「DLookup([仕入日付], "クエリ")」を使う理由は、クエリの仕入日付の最初
の値(20100315)をとるためです。

Name "C:\ABC\Table_旧.xls" As "C:\ABC\" & "新_" & DLookup([仕入日
付], "クエリ") & ".xls"
・ツリー全体表示

【11536】Re:EXCELの出力について
発言  超初心者  - 10/3/15(月) 11:39 -

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

> どこに間違っているか?

>> Debug.Print クエリ.仕入日付を実行すると、エラーがでました。

判明できたようで、よかったです^^;


「クエリ.仕入日付」が何なのかはこちらでは分かりませんので、
そこを中心に確認していくと良いかもです。
・ツリー全体表示

【11535】Re:EXCELの出力について
質問  akari  - 10/3/15(月) 11:09 -

引用なし
パスワード
   Accessの質問です。

Debug.Print クエリ.仕入日付を実行すると、エラーがでました。
・ツリー全体表示

【11534】Re:EXCELの出力について
質問  akari  - 10/3/15(月) 10:55 -

引用なし
パスワード
   クエリ
仕入日付  製造場所
20100301  大阪  ---->クエリの第一行の仕入日付は「20100301」のため、変換後のファイル名はTable_20100301.xls
20100310  神戸

以下のコードを動かして見ましたが、やはり動きません。
どこに間違っているか?
ご指導下さい!!

Private Sub 終了_Click()
 '新規生成したファイルの存在確認
  If Dir("C:\結果格納\Table_A.xls") <> "" Then
             '↓変更前のファイル名    
    Name "C:\結果格納\Table_A.xls" As _ 
             '↓変更後のファイル名
       "C:\結果格納\" & "Table_" & Format$(クエリ.仕入日付, "yyyymmdd") & ".xls"
  Else
    MsgBox "「C:\結果格納\Table_A.xls」は生成されていません! """
  End If
'終了処理へ
DoCmd.Quit
End Sub
・ツリー全体表示

【11533】Re:EXCELの出力について
発言  超初心者  - 10/3/15(月) 10:33 -

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

まず、質問内容を変える場合は、
スレを変えた方が良いです。
(エクセル出力の質問 --> 既存のファイル名の変更)

全てに私が回答できれば良いのですが、
私では分からなかった場合、回答が付きにくくなります。

今回の場合は、一連の出力作業の中での質問であるとは推察しますが、
その場合も、最初のスレに記載しておかないと、
「あとだし」と迷惑行為にとられかねませんのでご注意を。

また、エクセル出力問題が解決したのであれば、その旨の
書き込みがあるとありがたいです。


本題、名前変更の件^^;;
シングルステップでコードを実行する方法はご存知でしょうか?
プロシージャ内にカーソルを置いて[F8]キーにて、一行ずつ
実行していく方法です。
(コードによっては、ブレークポイントで止めたあとに[F8])

こちらを行うと、問題の箇所を絞り込み易いです。

それらを踏まえた上で、

Debug.Print クエリ.仕入日付
にて確認してみて下さい。


一応、
アンダーバー「_」が全角・半角、統一されてない事、
> Name "C:\結果格納\Table_A.xls" As _ 
>>          '↓変更後のファイル名
>    "C:\結果格納\" & "Table_" & Format$(クエリ.仕入日付, "yyyymmdd") & ".xls"
こちらのコメントは質問の為書き込んだ(?)ので、
実際のコードでは解決されているものと考えます^^;;
・ツリー全体表示

【11532】Re:EXCELの出力について
質問  akari  - 10/3/15(月) 9:18 -

引用なし
パスワード
   クエリ
仕入日付  製造場所
20100301  大阪  ---->クエリの第一行の仕入日付は「20100301」のため、変換後のファイル名はTable_20100301.xls
20100310  神戸

以下のコードを動かして見ましたが、やはり動きません。
どこに間違っているか?
ご指導下さい!!

Private Sub 終了_Click()
 '新規生成したファイルの存在確認
  If Dir("C:\結果格納\Table_A.xls") <> "" Then
             '↓変更前のファイル名    
    Name "C:\結果格納\Table_A.xls" As _ 
             '↓変更後のファイル名
       "C:\結果格納\" & "Table_" & Format$(クエリ.仕入日付, "yyyymmdd") & ".xls"
  Else
    MsgBox "「C:\結果格納\Table_A.xls」は生成されていません! """
  End If
'終了処理へ
DoCmd.Quit
End Sub
・ツリー全体表示

【11531】Re:データシート形式でのフォームについて
回答  YU-TANG  - 10/3/15(月) 1:21 -

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

▼pon さん:
> Me.Controls("埋め込み0").SourceObject = "Table.テーブル名"
> としたら
> 実行時エラー '2124':
> 指定したフォーム名は Microsoft Access オブジェクトの名前付け規則に従っていません。
> と怒られてしまいました

いえ、"Table.テーブル名" ではなく、"テーブル.テーブル名" です。
というか、ふつうにサブフォーム コントロールのプロパティシート上で
[ソースオブジェクト] プロパティのコンボボックスをドロップダウン
すると、リストの下の方に出てきませんか?
Access 2003 では出てくるのですが。
古いバージョンだとサポートされていないのかもしれませんが、どの辺の
バージョンからサポートされたのか、ちょっと自分は記憶にないです。

別に変な使い方ではなく、ふつうの使い方だと思いますよ。
下記でも説明されてますし。

ht tp://www.moug.net/tech/acvba/0100006.htm
ht tp://www.accessclub.jp/samplefile/samplefile_117.htm

> 埋め込みコントロールのイベントは
> フォーカス取得時
> フォーカス喪失時
> しかありませんでした

サブフォーム コントロール自体はそうですが。
サブフォーム コントロールのソース オブジェクト側はふつうのフォーム
ですから、そっちには一通りイベントがありますよ。

> 動作的には、抽出後、データシートのレコードを選択し
> 左の三角ボタンで処理したいのですが・・・

たとえば、

Private Sub 運送会社を表示_Click()
  埋め込み0.SourceObject = "テーブル.運送会社"
  埋め込み0.Form.OnClick = "=Foo()"
End Sub

のようにすると、サブフォームのクリック時に、標準モジュールの
Public な Function プロシージャ Foo() が呼び出されます。
このようにすれば、既存のプロシージャを外出しにすることは可能です。

> > RecordSourceの書き換え
> > コードでフォームの作成
> >が出来れば良さげな気がしてきました
> のアプローチは変ですか

いえ、別に変ではないですよ。
テーブルによって列構成が違うでしょうから、コントロールをバインド
し直したりするのが面倒くさくないかなーと思っただけなのですが、
既存のプロシージャを外出しにするのも手間は手間ですから、一概に
どっちがいいとも言い切れないですね。
ご自身のやりやすい方でよいのではないでしょうか。

どのみち、自分がレスした時点ではイベント云々の話は出ていませんから、
単純にデータシートの入れ替えを意図しただけです。他に事情があるなら、
その辺を勘案して総合判断なさるのがよろしいかと思います。

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

【11530】Re:データシート形式でのフォームについて
質問  pon  - 10/3/14(日) 23:27 -

引用なし
パスワード
   ▼YU-TANG さん:
ありがとうございます

>ということは、ふつうにテーブルやクエリを開いた状態と一緒ですから、
>.SourceObject = "テーブル.テーブル名"
>とか、
>.SourceObject = "クエリ.クエリ名"

うう
知りませんでした
コントロールだから出来そうな気はしていたのですが・・・
勉強になります

ただ
.SourceObject = "テーブル.テーブル名"
テーブルって、こんな日本語使用のVBAのコードの記載見たことが無いような・・・
試しに
Me.Controls("埋め込み0").SourceObject = "Table.テーブル名"
としたら
実行時エラー '2124':
指定したフォーム名は Microsoft Access オブジェクトの名前付け規則に従っていません。
と怒られてしまいました
英語版では通りそうな気もするんですが・・・・どうなんでしょう


>とすれば、特にサブフォームを用意しなくてもよい気がしますが。
>意図と違いますかね?

なんですが
埋め込みコントロールのイベントは
フォーカス取得時
フォーカス喪失時
しかありませんでした

動作的には、抽出後、データシートのレコードを選択し
左の三角ボタンで処理したいのですが・・・

今まで、同様な操作では、サブフォームを使用していたのですが
無駄にフォームが増えて管理しにくいため(作りこみが悪いような気もしますが)
この辺もう少し簡単に出来ないものかと思って今回の質問になりました

サブフォームでの切り替えは出来ています


まだ知らべていませんが
> RecordSourceの書き換え
> コードでフォームの作成
>が出来れば良さげな気がしてきました
のアプローチは変ですか

上記、別アプローチ等あれば、あわせてアドバイス頂けるとうれしいです
よろしくお願いいたします。
・ツリー全体表示

【11528】Re:EXCELの出力について
発言  超初心者  - 10/3/13(土) 9:40 -

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

マクロで
アクション:ワークシート変換
を行ってみると良いかもです。

「マクロを Visual Basic に変換」
という機能もありますので、
コード作成のヒントとなるかと思います。
(私のAcc2000には付いてます^^;;)


変数で保存名を作成し、
Dim HozonName As String
HozonName = "c:\生産実績_" & _
      Format([月次年月の第一行目], "yyyymm") & _
      ".xls"
と一旦変数に格納し、

DoCmd.〜(略)〜 ,"クエリ9", HozonName
こんな感じで出力できるかと思います。


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

【11527】Re:データシート形式でのフォームについて
回答  YU-TANG  - 10/3/13(土) 1:30 -

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

▼pon さん:
>フォームにデータシート形式のサブフォームコンとロールを貼って使用しています
>
>参照している サブフォームのテーブル、クエリの入れ替えは
>サブフォームSBF01、SBF02等を
>Forms("MAINF1").Controls("CNT01").SourceObject = "SBF02"
>とかすれば、入れ替えできるのですが

えーと、データシート形式ですよね。
ということは、ふつうにテーブルやクエリを開いた状態と一緒ですから、

.SourceObject = "テーブル.テーブル名"

とか、

.SourceObject = "クエリ.クエリ名"

とすれば、特にサブフォームを用意しなくてもよい気がしますが。
意図と違いますかね?

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

【11526】Re:データシート形式でのフォームについて
発言  pon  - 10/3/13(土) 1:16 -

引用なし
パスワード
   追記です

>ただ、サブフォームをデザインでみれば
>フィールドのコントロールが必ず貼ってあるので(表示させるためには当然かと思いますが)

自分で書いていてなんなんですが
 RecordSourceの書き換え
 コードでフォームの作成
が出来れば良さげな気がしてきました

手が届くか自身がありませんが
チャレンジしてみます
・ツリー全体表示

【11525】EXCELの出力について
質問  akari  - 10/3/12(金) 11:17 -

引用なし
パスワード
   ExcelFileへの出力について、教えていただきたいです。
あるクエリ9のデータをExcelへ出力したいですが、以下のコードを真似して
実現したいですので、ご伝授下さい。

質問I:CSVではなくExcel2003へ出力したいです。
質問II:以下のコードを利用すると、タイトルがなくなるから、解決策を教えて
    いただきたいです。
質問III:出力ファイル名の後ろに「_」をつけて、その後は月次年月の
    第一行目のレコードのデータを利用したいです。
    ※ファイル名は、
           生産実績_201003
    

クエリ9
月次年月  生産場所  生産チーム  生産数
201003   大阪製作所 第一課    20
201002   羽生製作所 第二課    20
201003   大阪製作所 第一課    20


Private Sub コマンド0_Click()
  DoCmd.TransferText acExportDelim, , "クエリ9", "c:\生産実績.csv"
End Sub
・ツリー全体表示

【11524】Re:Accessからメールの送信
お礼  K&MM  - 10/3/12(金) 10:30 -

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

 ヒントをいただき、ありがとうございました。
・ツリー全体表示

【11523】Re:閉じるボタンと BeforeUpdateイベント
回答  YU-TANG  - 10/3/12(金) 3:57 -

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

なんとかフックしない逃げ道が見つかったような気がしますので、
下記で公開してみました。

更新前処理イベント内で閉じるボタンのクリックを判定する方法 | YU-TANG's MS-Access Discovery
ht tp://www.f3.dion.ne.jp/~element/msaccess/AcTipsBeforeUpdateEventAndCloseButton.html

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

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