Access VBA質問箱 IV

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

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


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

【13169】Re:access2000で作ったVBAを2010で動かし...
発言  亀マスター  - 17/6/15(木) 19:26 -

引用なし
パスワード
   明確な答えにはならないですが、一覧フォームの再クエリが終わる前に
Me.txt_依頼ID を取得しようとするせいで、おかしなことになっている
のかもしれません。
1行ずつ実行していった場合は、Form_frm_結果一覧.Requery の後で
少し時間が空くので大丈夫だとか。

エラーメッセージでは、フィールド(に関連づけられた Me.txt_id)に
不正な値が入力されたということかなと思いますので、確認のために
Form_frm_結果一覧.Requery の直後にDebug.Print Me.txt_依頼ID とか
入れて、 Me.txt_依頼ID の状態がどうなっているか調べてみてはどうでしょうか。
・ツリー全体表示

【13168】access2000で作ったVBAを2010で動かして...
質問  @@@umekonbu  - 17/6/15(木) 17:18 -

引用なし
パスワード
   access2000で問題なく動いていたVBAを2010で動かすとエラーが出ます。
一覧表示の画面から選択して個別画面に遷移し、個別を閉じて一覧に戻るときに発生します。
最初から一つずつデバックするか、個別画面のform close()でブレイクポイント設定でいったん止めて流すとエラーになりません。一気に流すとエラーになります。

<個別の画面>
Private Sub Form_Close()

  Select Case inpmode

    Case 1, 2 '編集/検索
      Form_frm_結果一覧.Requery

ここから一覧へ飛ぶ

<一覧の画面>

Private Sub Form_Current()
 Me.txt_id = Me.txt_依頼ID  ←ここで止まるデバックで黄色く反転
 Me.txt_件数 = MyRecordCount
End Sub

上記の場所で
実行時エラー 2147352567(80020009)このフィールドに入力した値が正しくありません。
しばらくそのままにしておくと、
オブジェクトが正しくないか、現在設定されていません。
というエラーが出ます。

Me.txt_idは画面にあるテキストボックスで文字書式はテキスト形式です。
なお入れようとしている文字列に問題はありません。先述のとおり一端とめて一つずつ送っていくとエラーにならずに終了するのです。

どこを書き換えればよいものでしょうか。
・ツリー全体表示

【13167】Re:印刷履歴を取りたい。
お礼  たけお E-MAIL  - 17/6/13(火) 8:28 -

引用なし
パスワード
   早速の回答ありがとうございました。
追加クエリのフイールドに
印刷者:[reports]![レポート名]![名前]
を追加して対応することで目的を果たすことができました。

コマンドボタンや入力漏れ、偽者対策のご助言をいただきました。
このことはメモに残しておき今後の参考にさせていただきます。
本当にありがとうございました。厚くお礼申し上げます。
・ツリー全体表示

【13166】Re:印刷履歴を取りたい。
回答  hatena  - 17/6/13(火) 0:04 -

引用なし
パスワード
   ▼たけお さん:
>印刷されるたびにこのクエリが実行されるようマクロに組んでいます。

これはどのオブジェクトのどのイベントで実行してますか。

>しかしこれでは誰が印刷したのか判りませんので、印刷する都度、印刷者の名前を入力するように変更しました。
>レポートヘッダーに「テキストボックス」を設定して→「その他」タブの「名前」欄に「メッセージ」と記入→「データ」タブの「コントロールソース」欄に「名前を入力してください」
>この入力された名前を「印刷履歴」テーブルに反映させる方法が思い浮かびません。

レポートを開くときにパラメータで聞いてくるのでそこで入力しているのですね。

下記のような設計にすればどうでしょう。

フォーム上にコマンドボタン「印刷」とテキストボックス「名前」を配置します。

ユーザーはテキストボックスに名前を入力してコマンドボタンクリックで印刷するようにします。
テキストボックスに名前の記載がない場合は、印刷せずに、名前を入力するように即すメッセージボックスを表示します。
印刷後に、印刷履歴へ追加する追加クエリを実行すればいいでしょう。

レポート上に名前を表示したい場合はテキストボックスのコントロールソースを

=[Forms]![フォーム名]![名前]

とします。


以下、蛇足

マル秘扱いの書類とのことですが、このような仕様では、偽名を使って印刷することができてしまいます。これではセキュリティ的にあまり意味がないかと。
複数のPC、ユーザーで共有しているのなら、PC名、ユーザー名も履歴に格納するようにするといいと思います。
PC名は Environ("COMPUTERNAME")、ユーザー名は Environ("USERNAME") で取得できます。

さらに、ユーザーごとにパスワードを設定して、ユーザーとパスワードが一致しないと印刷できないようにするとなおいいでしょう。その場合、下記が参考になるでしょう。

ID, パスワードが一致したらフォームを開く - hatena chips
hatenachips.blog34.fc2.com/blog-entry-220.html
・ツリー全体表示

【13165】印刷履歴を取りたい。
質問  たけお E-MAIL  - 17/6/12(月) 10:29 -

引用なし
パスワード
   「会員名簿」はマル秘扱いの書類ですので、現状では印刷するたびに次の手順で印刷履歴を取っています。
「会員名簿」テーブルに「印刷日」フイールド(日付/時刻型)を持たせ、このテーブルを基にクエリを作成。
デザインフイールドに「コード」「氏名」「印刷日」を配置し、「印刷日」フイールドは「印刷日:Date()」に変更して追加クエリにしています。
保管すべき「印刷履歴」テーブルの構造は「コード」「氏名」「印刷日」です。
印刷されるたびにこのクエリが実行されるようマクロに組んでいます。
しかしこれでは誰が印刷したのか判りませんので、印刷する都度、印刷者の名前を入力するように変更しました。
レポートヘッダーに「テキストボックス」を設定して→「その他」タブの「名前」欄に「メッセージ」と記入→「データ」タブの「コントロールソース」欄に「名前を入力してください」
この入力された名前を「印刷履歴」テーブルに反映させる方法が思い浮かびません。
何か良い方法はないでしょうか。ご教示ください。
・ツリー全体表示

【13164】Re:Access2016レポートの10行毎に直線を...
お礼  たけお E-MAIL  - 17/6/12(月) 10:25 -

引用なし
パスワード
   ▼hatena さん:
10行おきの罫線引きは成功しました。
私のパソコンでは住所入力支援も機能しないなど、Access2016 インストール時に欠落があったようです。
いろいろと適切なご教示ありがとうございました。
また異なる質問を送っていますのでよろしくお願いします。
・ツリー全体表示

【13163】Re:Access2016レポートの10行毎に直線を...
お礼  たけお E-MAIL  - 17/6/6(火) 15:28 -

引用なし
パスワード
   ▼hatena さん:
ご検証いただきありがとうございました。
ではこの手順で友人のパソコンでやってみます。
結果は来週の月曜日ということにさせてください。
いつも早いレスポンスをいただきありがとうございます。
この問題が解決したら別件でもう1つ教えていただきたいことがありますのでまたその節はよろしくお願いいたします。
・ツリー全体表示

【13162】Re:Access2016レポートの10行毎に直線を...
回答  hatena  - 17/6/6(火) 7:57 -

引用なし
パスワード
   >ご指摘の点は全部クリアできています。連番であるし、欠番もありません。
>詳細セクションバーで正しくプロパテイは設定できています。
>イベントの所は「埋め込みマクロ」と表示され、ビルドボタンをクリックすると一番最初に教えていただいた、If文とelse文になっています。

問題点は見当たりませんね。

これ以上は文章だけでのやりとりでは難しいかも。
他のPCで試してみて駄目なら、下記の私の主催する掲示板で再質問してください。
そこなら、ファイルをアップロードできますので、実物をみて原因を探ることができます。

hatena-access.progoo.com/bbs/
・ツリー全体表示

【13161】Re:Access2016レポートの10行毎に直線を...
質問  たけお E-MAIL  - 17/6/5(月) 19:17 -

引用なし
パスワード
   今週の日曜日に友人のAccess2016を使わせてもらうことになりました。
私の勝手な思い込みで何か気がついていない盲点があるのではないのかと思い至りました。
ここに私の操作順序を詳述しますので、大変恐縮ですがチェックをお願いします。
「会員名簿」のテーブル構造は、主キーを持つ「コード」数値型(整数型)、「氏名」短いテキスト(フイールドサイズ)20、以下略。コードは1からの連番で最終コードは158です。
念のためにクエリを作成して[コード]Mod10で実行すると、「1〜9,0」「1〜9,0」の連続で表示されていることを確認し、欠番がないことを確認できました。「会員名簿」テーブルを基にレポートウイザードでレポートを作成。詳細の「会員名簿」のフイールドテキストボックスの下に直線を引き、プロパティの「その他」タブの「名前」欄に「罫線」と記入し名前を変更。詳細セクションバーをクリックし、プロパテイを開き、「イベント」タブの「フォーマット時」欄のビルドボタンをクリックし「マクロビルダー」をクリック。
マクロ文はIf([コード]Mod 10)=0 Then プロパテイの設定、コントロール名:罫線、プロパテイ:可視、値:True
Else プロパテイの設定、コントロール名:罫線、プロパテイ:可視、値:Falseと記入。
「閉じる」ボタンをクリック、表示されるメッセージに「はい」。
「イベント」タブの「フォーマット時」欄に「埋め込みマクロ」と表示されていることを確認し、レポートビューを開く。以上が手順です。どこかに盲点がありますでしょうか?
・ツリー全体表示

【13160】Re:Access2016レポートの10行毎に直線を...
お礼  たけお E-MAIL  - 17/6/5(月) 15:05 -

引用なし
パスワード
   ご丁寧なご回答ありがとうございます。
ご指摘の点は全部クリアできています。連番であるし、欠番もありません。
詳細セクションバーで正しくプロパテイは設定できています。
イベントの所は「埋め込みマクロ」と表示され、ビルドボタンをクリックすると一番最初に教えていただいた、If文とelse文になっています。
罫線がだめなのかなと思って10行毎に背景色を変えることをためしてみました。
if([コード]Mod 10)= then
プロパテイの設定
コントロール名:詳細
プロパテイ:背景色
値:#FCE6D4
Else
プロパテイの設定
コントロール名:詳細
プロパテイ:背景色 
値:#FFFFFF
これも駄目でした。

教えていただいたマクロでも上手くいきませんでした。
最後の手段としてパソコンを変えてやってみます。
これの是非の確認は来週になります。来週にまた状況報告させていただきます。
本当に貴重な時間を割いていただきご丁寧な回答を頂戴したこと深くお礼申し上げます。ありがとうございました。
・ツリー全体表示

【13159】Re:Access2016レポートの10行毎に直線を...
回答  hatena  - 17/6/4(日) 22:49 -

引用なし
パスワード
   当方のレポートで試してみましたが、うまくいきました。

どこか設定が間違っているのだと思います。

「詳細」セクションを選択して、プロパティシートの上のコンボボックスは「詳細」になっしますか。
そこの「フォーマット時」欄は [埋め込みマクロ] となってますか。


以下、蛇足ですが、
「コード」が現状は連番になっていたとしても、削除したりして抜けが出る場合もあると思います。また、フィルターをかけて出力したりする場合もあるかも知れません。
その場合でも変更することなく対応できる私の提案の方法を推奨します。

あと、マクロだと、いつかは限界がきます。VBAの方へ移行するというのも手だと思います。
その場合の設定方法を紹介しておきます。

詳細セクションのフォーマット時イベントでドロップダウンリストから[イベント プロシージャ]を選択する。
ビルドボタンをクリックすると、VBAウィンドウが開き、

Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)

End Sub

とすでに、記述されている。この間に下記のようにコードを記述します。

Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)

  If (Me.CurrentRecord Mod 10) = 0 Then
    Me.罫線.Visible = True
  Else
    Me.罫線.Visible = False
  End If

End Sub

これだけです。どうでしょう。意外と簡単だと思いませんか。

Me というのは自分自身ということで、このコードが記述されているレポートになります。
Me.罫線.Visible というのは 自分自身のレポート上の[罫線]の可視(Visible)を「はい」 (True)に設定するという意味になります。

Me.CurrentRecord は自分自身の現在のレコード位置(行番号)ということです。これを使えば[コード]が連番である必用もないし、=1 のテキストボックスを配置する必用もありません。
・ツリー全体表示

【13158】Re:Access2016レポートの10行毎に直線を...
質問  たけお E-MAIL  - 17/6/3(土) 21:16 -

引用なし
パスワード
   ▼hatena さん:
>>「会員名簿」テーブルを基にクエリを作成し、演算フイールドに「[コード] Mod 10」と入力し、実行しました。
>
>この[コード]フィールドは1から始まる連番になってますか。
>なっていないなら、希望の結果にはなりません。
>この方法は連番必須です。
>
>レポート上で連番を取得するのは下記の方法で簡単にできます。
>詳細セクションにテキストボックスを配置して下記のように設定します。
>
>コントロールソース =1
>集計実行 全体
>可視 いいえ
>名前 連番
>
>集計実行で 1 を加算しているということです。
>
>マクロの条件式はそれぞれ下記のようにすればいいでしょう。
>
>If ([連番] Mod 10)=0 Then
>
> 直線の可視 True
>
>Else
>
> 直線の可視 False


早速のご回答をありがとうございます。
勿論1からの連続Noです。Mod関数で計算した結果は規則正しく1,2,3,..9,0の連続の形でクエリ結果を表示できています。ご教示いただいた内容をみて私のやり方は大筋では間違っていないのだと思いました。教えていただいた方法(連続noのためコントロールソース =1はしていませんが)If([コード]Mod 10)=0 Then に変えてやってみましたが各行に罫線が表示されてしまい、同じく埋め込みマクロが機能していない結果となりました。再度時間を割いてご再考いただけないでしょうか?よろしくお願いします。
・ツリー全体表示

【13157】Re:Access2016レポートの10行毎に直線を...
回答  hatena  - 17/6/3(土) 18:58 -

引用なし
パスワード
   >「会員名簿」テーブルを基にクエリを作成し、演算フイールドに「[コード] Mod 10」と入力し、実行しました。

この[コード]フィールドは1から始まる連番になってますか。
なっていないなら、希望の結果にはなりません。
この方法は連番必須です。

レポート上で連番を取得するのは下記の方法で簡単にできます。
詳細セクションにテキストボックスを配置して下記のように設定します。

コントロールソース =1
集計実行 全体
可視 いいえ
名前 連番

集計実行で 1 を加算しているということです。

マクロの条件式はそれぞれ下記のようにすればいいでしょう。

If ([連番] Mod 10)=0 Then

 直線の可視 True

Else

 直線の可視 False
・ツリー全体表示

【13156】Access2016レポートの10行毎に直線を引く
質問  takeo  - 17/6/3(土) 14:42 -

引用なし
パスワード
   教えてください。Access2016を使用しています。一意の「コード」を持つ158名分の「会員名簿」テーブルがあり、それをレポートとして印刷するとき、現在は各行毎に直線が印刷されます。これを10行ごとに直線が印刷されるように変更しようと次のことを行ったのですが上手くいきません。どこに問題があるのかよく理解できません。ご教示ください。
「会員名簿」テーブルを基にクエリを作成し、演算フイールドに「[コード] Mod 10」と入力し、実行しました。フイールド名は「式1:」という名前がつきました。このクエリを基にレポートを作成しました。詳細フイールドのフイールドの下に直線を配置しました。プロパテイシートの「その他」タブの「名前」に「罫線」と設定しました。「詳細セクションバー」のプロパテイの「イベント」タブの「フォーマット時」に埋め込みマクロを設定しました。その内容は次のIf文とElseif文です。
If [式1]=0 Then      Elseif [式1]<>0 Then 
プロパティの設定      プロパティの設定
コントロール名「罫線」、  コントロール名「罫線」
プロパテイ「可視」、    プロパテイ「可視」
値「-1」          値「0」
・ツリー全体表示

【13155】Re:Excelが二重に表示される
回答  亀マスター  - 17/5/31(水) 23:10 -

引用なし
パスワード
   私の環境(Win 10 64bit + Office2013 32bit)でふたつ起動するということにならなかった(それどころか一瞬起動してすぐに終了した)ので直接的な原因究明にはなりませんが、以下のような方法ではどうでしょう。

Dim xlApp As Object

Set xlApp = CreateObject("Excel.Application")

xlApp.Workbooks.Open "C:\Test.xlsx"
xlApp.Visible = True

Set xlApp = Nothing
・ツリー全体表示

【13154】Excelが二重に表示される
質問  Tak  - 17/5/31(水) 11:11 -

引用なし
パスワード
   作成済みのExcelファイルを開く処理で
xlsheet.Application.Visible = Trueを実行すると、
Excelが2つ起動してしまいます。

Windows7(32Bit) + Access2010の組合せでは正常に動作していましたが、
Windows10(62Bit)+ Access2016(32Bit)では正常に動作しませんでした。
回避方法を知っている方いらっしゃいましたら教えて頂けますでしょうか?


---------------------------------------------
Dim xlsheet As Object
  
'EXCEL起動
Set xlsheet = GetObject("C:\Test.xlsx")
xlsheet.Application.Visible = True
---------------------------------------------
・ツリー全体表示

【13153】Re:生産番号で行番号連番リセット、生産...
質問  きむ E-MAIL  - 17/5/30(火) 9:42 -

引用なし
パスワード
   ▼hatena さん:
>下記だとどうなりますか。
>
>Me.工程No = Nz(DMax("SSM_KOUTEINO", "D_生産明細", "Format(SSD_YMD,""yyyymm"")='" & Format([SSD_YMD], "yyyymm") & "'") + 1, 1)
連絡遅くなって申し訳ありません。
実行時エラー'2465':
指定した式で参照されている'|'フィールドが見つかりません。
が出ました。
すいません。今一度ご教授お願い致します。
・ツリー全体表示

【13152】Re:生産番号で行番号連番リセット、生産...
回答  hatena  - 17/5/29(月) 10:20 -

引用なし
パスワード
   下記だとどうなりますか。

Me.工程No = Nz(DMax("SSM_KOUTEINO", "D_生産明細", "Format(SSD_YMD,""yyyymm"")='" & Format([SSD_YMD], "yyyymm") & "'") + 1, 1)
・ツリー全体表示

【13151】Re:生産番号で行番号連番リセット、生産...
質問  きむ E-MAIL  - 17/5/26(金) 10:37 -

引用なし
パスワード
   ▼hatena さん:
>▼きむ さん:
>>フィールド名間違ってました、すいません。
>>フォームテーブル:生産入力  サブフォームテーブル:生産入力_明細
>>    SSD_SSNO(生産番号):数値       SSM_GYONO(行番号):数値
>>    SSD_YMD(生産日):日付/時刻型     SSM_KOUTEINO(工程番号):数値
>
>で、結論は、正しいフィールド名に変更して、うまくいったのでしょうか。
下記の式に変更しましたが。
Me.工程No = Nz(DMax("SSM_KOUTEINO", "D_生産明細", "Format(SSD_YMD,""yyyymm"")=" & Format([SSD_YMD], "yyyymm")) + 1, 1)
実行時エラー'2465':
指定した式で参照されている'|'フィールドが見つかりません。
が出ました。
すいません。今一度ご教授お願い致します。
・ツリー全体表示

【13150】Re:生産番号で行番号連番リセット、生産...
発言  hatena  - 17/5/25(木) 22:51 -

引用なし
パスワード
   ▼きむ さん:
>フィールド名間違ってました、すいません。
>フォームテーブル:生産入力  サブフォームテーブル:生産入力_明細
>    SSD_SSNO(生産番号):数値       SSM_GYONO(行番号):数値
>    SSD_YMD(生産日):日付/時刻型     SSM_KOUTEINO(工程番号):数値

で、結論は、正しいフィールド名に変更して、うまくいったのでしょうか。
・ツリー全体表示

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