Access VBA質問箱 IV

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

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


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

【9753】Re:新規作成フォームにOnMouseDownプロシ...
お礼  たくゾ〜  - 07/8/13(月) 21:58 -

引用なし
パスワード
   ▼小僧 さん:
何度もありがとうございます。

>Public変数に値を保持させるコードは余り良いとは言えないかと思われます。
>やはり基本通りテーブルに値を入れる様なコードにするか、
>常に開いているフォームに不可視のテキストボックスを作って

貧乏性なのか、フォームに値を保存できる箱があるのに、他にテーブルを設けるのが
勿体無い気がしてまして、余計な質問をしてしまい申し訳御座いませんでした。

ご教授いただきました内容を熟慮して、良い方法を考えたいと思います。


また、ご指導方よろしくお願い致します。
・ツリー全体表示

【9752】Re:新規作成フォームにOnMouseDownプロシ...
回答  小僧  - 07/8/13(月) 19:10 -

引用なし
パスワード
   ▼たくゾ〜 さん:
こんにちは。

>移動したラベルを 固定したいのですが良い方法はございますでしょうか。

適当な標準モジュールに

Public L1X As Long
Public L1Y As Long


と宣言しておき、

Sub Make_Form3()
Const F_Name = "test"
Dim Temp_Name As String
Dim ctl_Label As Access.Label
Dim i As Long


  With CreateForm()
    Temp_Name = .Name
    .HasModule = True
    .Caption = F_Name
    .Width = 11907       '[twip]
    .Section(acDetail).Height = 8505
    .Section(acDetail).OnMouseDown = "[Event Procedure]"
    .Form.OnLoad = "[Event Procedure]"
    .Form.OnUnload = "[Event Procedure]"
  End With
  
  
  For i = 0 To 1
    Set ctl_Label = CreateControl(Temp_Name, acLabel, acDetail, , , 100 + 200 * i, 100, 100, 100)
    ctl_Label.Name = "L" & Format(i, "000")
  
    With ctl_Label
      .SpecialEffect = 1
      .BackStyle = 1
    End With
  Next
  
  With VBE.ActiveVBProject.VBComponents.Item("Form_" & Temp_Name).CodeModule
    .InsertLines 4, "Private Sub Form_Load()"
    .InsertLines 5, "Me.L001.Left = L1X"
    .InsertLines 6, "Me.L001.Top = L1Y"
    .InsertLines 7, "End Sub"
    .InsertLines 8, ""
    .InsertLines 9, "Private Sub Form_Unload(Cancel As Integer)"
    .InsertLines 10, "L1X = Me.L001.Left"
    .InsertLines 11, "L1Y = Me.L001.Top"
    .InsertLines 12, "End Sub"
    .InsertLines 13, ""
    .InsertLines 14, "Private Sub 詳細_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)"
    .InsertLines 15, "Me.L001.Left = X"
    .InsertLines 16, "Me.L001.Top = Y"
    .InsertLines 17, "End Sub"
  End With
  
  DoCmd.Save acForm, Temp_Name
  DoCmd.Close acForm, Temp_Name
  DoCmd.Rename F_Name, acForm, Temp_Name
  DoCmd.OpenForm F_Name, acNormal
  DoCmd.Restore
  
End Sub


の様なコードを書くと、MDBを閉じるまでは座標を保持できるかと思われますが、

h tp://www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=9652;id=access
(直リンク禁止ですので補完して下さい)

の上部で紹介している通り、
Public変数に値を保持させるコードは余り良いとは言えないかと思われます。

やはり基本通りテーブルに値を入れる様なコードにするか、
常に開いているフォームに不可視のテキストボックスを作って
そこに値を入れておく方が安定するかと思われます。
・ツリー全体表示

【9751】Re:DATEについて
回答  Gin_II  - 07/8/13(月) 14:29 -

引用なし
パスワード
   >ACCESS2000のVBA内に「DATE」関数を使っておりますが
>コンパイルエラーで止まってしまうクライアントが
>あります。どのように回避すれば宜しいのでしょうか。

参照設定で、'参照不可' となっているものはありませんか?

[OFF2003] データベースに失われた参照があると VBA 関数が中断する
http://support.microsoft.com/kb/283806/JA/

[ACC2003] 関数を含むクエリを開くとエラー メッセージ "式に未定義関数 <関数名> があります。" が表示される
http://support.microsoft.com/kb/824277/JA/
・ツリー全体表示

【9750】DATEについて
質問  カダワン  - 07/8/13(月) 13:58 -

引用なし
パスワード
   ACCESS2000のVBA内に「DATE」関数を使っておりますが
コンパイルエラーで止まってしまうクライアントが
あります。どのように回避すれば宜しいのでしょうか。
どなたか教えて頂ければ幸甚です。
よろしくおねがいします。
・ツリー全体表示

【9749】Re:新規作成フォームにOnMouseDownプロシ...
質問  たくゾ〜  - 07/8/13(月) 12:00 -

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

たびたびすみません。
たくゾ〜です。

>> 3)新規フォームの詳細で、マウスボタンを押した場所に、ラベルを移動する
>についてはご自身で工夫されてみて下さい。
>    .InsertLines 6, "Msgbox ""座標X:"" & x & "" 座標Y:"" & y "
>    .InsertLines 7, ""

お教えいただきましたコードを、

.InsertLines 6, "Me.L001.Left = X"
.InsertLines 7, "Me.L001.Top = Y"

としまして、画面上は動く事を確認したのですが、
終了して、再度フォームを開くと、元の位置になってしまいます。

フォームのSaveをしても保存されません。
デザインビューで開き直してから 値を代入するとエラーになります。

移動したラベルを 固定したいのですが良い方法はございますでしょうか。
・ツリー全体表示

【9748】Re:AbsolutePositionでエラーになります
お礼  新横  - 07/8/10(金) 9:45 -

引用なし
パスワード
   小僧さんいろいろとありがとうございました。

まだ解決していませんが、

>h tp://www.microsoft.com/japan/msdn/data/techmat/ado/dao2ado_2.aspx

はかなりのボリュームですが、読まして頂きます。

難解そうですが、頑張ってみます。今後とも宜しくお願いいたします
・ツリー全体表示

【9746】Re:新規作成フォームにOnMouseDownプロシ...
お礼  たくゾ〜  - 07/8/9(木) 23:49 -

引用なし
パスワード
   ▼小僧 さん:
ご指摘、ありがとうございます。

>まず…。
>他所掲示板ではマルチポストを認めていない事もあります。

マナー違反とは気付かず、失礼いたしました。
他サイトの削除をしようとしたのですが、メール送信時エラーで申請できないため、本題を修正Closeしました。以後気をつけます。


>Sub Make_Form2()
ありがとうございます。
大変勉強になりました。思っていた通りの動きで感動しました。


>> 3)新規フォームの詳細で、マウスボタンを押した場所に、ラベルを移動する
>についてはご自身で工夫されてみて下さい。

ありがとうございます。
工夫します。
・ツリー全体表示

【9745】Re:AbsolutePositionでエラーになります
回答  小僧  - 07/8/9(木) 16:18 -

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

まず…。
こちらの掲示板では容認されておりますが、
他所掲示板ではマルチポストを認めていない事もあります。

掲示板を利用する上でのマナーですので
こちらか、向こうかどちらかを削除、またはCloseする形にしましょう。


>これはDAOからADOに変更する途中で起きたエラーです
>DAOの場合はエラーはありませんでした
>
>何処を疑ったらいいでしょうか

MS のサイトにそのものずばりっぽい記事がありますね。

h tp://www.microsoft.com/japan/msdn/data/techmat/ado/dao2ado_2.aspx
(直リンク不可ですので、補完して下さい。)

ページ下部に AbsolutePosition プロパティを使用する方法 というのがあり、
更に丁寧に注意すべき点まで記載してありますね。


> 「引数が間違った型、許容範囲外、又は競合しています」のエラー

ADO の際に許容範囲外になっているという事は考えられませんでしょうか。
・ツリー全体表示

【9744】AbsolutePositionでエラーになります
質問  新横  - 07/8/9(木) 11:49 -

引用なし
パスワード
   gRs.AbsolutePosition = Me.CurrentRecord - 0

上記ステートメントを実行すると
「引数が間違った型、許容範囲外、又は競合しています」のエラーが出ます

データベースとの接続はADOです


 Public gDb As New ADODB.Connection
 Public gRs As New ADODB.Recordset

 gCraiteria = "SELECT 以下省略

 Set gDb = CurrentProject.Connection
 Set gRs = New ADODB.Recordset
gRs.Open gCraiteria, gDb, adOpenKeyset, adLockOptimistic

            "
            途中省略
            "
gRs.AbsolutePosition = Me.CurrentRecord - 0

これはDAOからADOに変更する途中で起きたエラーです
DAOの場合はエラーはありませんでした

何処を疑ったらいいでしょうか、又は同じ動作をつくり出す方法が

ありましたら宜しくお願いします

動作環境 OS = Windows XP  ACCESS 2003
・ツリー全体表示

【9743】新規作成フォームにOnMouseDownプロシジャ...
回答  小僧  - 07/8/9(木) 10:49 -

引用なし
パスワード
   ▼たくゾ〜 さん:]
こんにちは。

まず…。
こちらの掲示板では容認されておりますが、
他所掲示板ではマルチポストを認めていない事もあります。

掲示板を利用する上でのマナーですので
こちらか、向こうかどちらかを削除、またはCloseする形にしましょう。


> 題名:フォームを新規作成し、フォーム詳細のOnMouseDownに
> イベントプロシージャを入れてXYを取得したい

こちらについてですが、

Sub Make_Form2()
Const F_Name = "test"
Dim Temp_Name As String

  With CreateForm()
    Temp_Name = .Name
    .HasModule = True
    .Caption = F_Name
    .Width = 11907       '[twip]
    .Section(acDetail).Height = 8505
    .Section(acDetail).OnMouseDown = "[Event Procedure]"
  End With
  
  With VBE.ActiveVBProject.VBComponents.Item("Form_" & Temp_Name).CodeModule
    .InsertLines 4, "Private Sub 詳細_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)"
    .InsertLines 5, ""
    .InsertLines 6, "Msgbox ""座標X:"" & x & "" 座標Y:"" & y "
    .InsertLines 7, ""
    .InsertLines 8, "End Sub"
  End With
  
  DoCmd.Save acForm, Temp_Name
  DoCmd.Close acForm, Temp_Name
  DoCmd.Rename F_Name, acForm, Temp_Name
  DoCmd.OpenForm F_Name, acNormal
  DoCmd.Restore
  
End Sub


のようなコードで新規に作成したフォームの
OnMouseDown イベントが発生する事が確認できるかと思われます。


> 3)新規フォームの詳細で、マウスボタンを押した場所に、ラベルを移動する

についてはご自身で工夫されてみて下さい。
・ツリー全体表示

【9742】フォームを新規作成し、フォーム詳細のOn...
質問  たくゾ〜  - 07/8/8(水) 22:53 -

引用なし
パスワード
   はじめて投稿させていただきます。よろしくお願い致します。

題名:フォームを新規作成し、フォーム詳細のOnMouseDownにイベントプロシージャを入れてXYを取得したい

【やりたい事】
1)フォームを作る : Set ctl_frm = CreateForm()
2)ラベルを作る  : CreateControl("test", acLabel, acDetail, , , 100 , 100, 100, 100)
3)新規フォームの詳細で、マウスボタンを押した場所に、ラベルを移動する
  ctl_frm.Section(acDetail).OnMouseDown = "= Detail_MouseDown(Button,Shift,X,Y)"

1)2)は動作するのですが、3)が動きません。


◆標準モジュール

1)3)

Sub make_Form()
Dim ctl_frm As Form
  Set ctl_frm = CreateForm()
  With ctl_frm
    .Caption = "test"
    .Width = 11907       '[twip]
    .Section(acDetail).Height = 8505
(省略)
    .Section(acDetail).OnMouseDown = "= Detail_MouseDown(Button,Shift,X,Y)"
                         ↑3)【上手に動かした】
  End With
  DoCmd.Save , ctl_frm.Caption
  DoCmd.OpenForm ctl_frm.Name, acNormal
  DoCmd.Restore
End Sub

-------------------------------------------------------------------

2)

Sub make_Label()
Dim ctl_Label As Label
Dim i, L_max As Integer

DoCmd.OpenForm "test", acDesign
L_max = 1
For i = 0 To L_max
  Set ctl_Label = CreateControl("test", acLabel, acDetail, , , 100 + 200 * i, 100, 100, 100)
  ctl_Label.Name = "L" & Format(i, "000")
  With ctl_Label
    .SpecialEffect = 1
    .BackStyle = 1
(省略)
    .OnClick = "= Label_onClick()"
    .OnMouseDown = "= Label_OnMouseDown()"
    .OnMouseUp = "= Label_OnMouseUp()"
  End With
Next
  DoCmd.Save , ctl_frm.Caption
  DoCmd.OpenForm ctl_frm.Name, acNormal
  DoCmd.Restore
End Sub

-------------------------------------------------------------------
・ツリー全体表示

【9741】Re:コンボボックス
お礼  smith  - 07/8/8(水) 10:25 -

引用なし
パスワード
   ありがとうございます!

うまくいきました。
これで複数のコンボボックスの中で一つだけ抽出解除できます。
・ツリー全体表示

【9740】Re:コンボボックス
回答  小僧  - 07/8/8(水) 9:29 -

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

>AccessのコンボボックスのRowsourceをVBではめこんで、そこに
>もう一行「すべて」という言葉の行を加えることができますか。

組織コードに重複がない事が条件ですが、
ユニオンクエリでどうにかできそうですね。


Me.cmb_組織A.RowSource = "SELECT [組織コード] FROM 組織 UNION " _
              & "SELECT '全て' AS 組織コード FROM 組織"
・ツリー全体表示

【9739】コンボボックス
質問  smith  - 07/8/7(火) 21:14 -

引用なし
パスワード
   AccessのコンボボックスのRowsourceをVBではめこんで、そこに
もう一行「すべて」という言葉の行を加えることができますか。

コントロール名:cmb_組織A
値集合ソース: テーブル「組織」

cmb_組織A.RowSource = "SELECT [組織コード] FROM 組織 "

エクセルのフィルタのイメージです。「すべて」という文字を加えたいだけです。
・ツリー全体表示

【9738】Re:MDBが壊れる
回答  YU-TANG  - 07/8/5(日) 3:09 -

引用なし
パスワード
   ▼初心者A さん:
>時々 db1 db2 と増殖しくるのも最適化の問題でしょうか?
>   共有しているMDBばかりに発生している気もしますが
>   何が原因なのでしょうか?

共有しているのが原因です。

www.mahoutsukaino.com/ac/ac2002/ac2002/kihon2/016.htm

okwave.jp/qa1524198.html
・ツリー全体表示

【9737】Re:findfirstの使い方
お礼  メイ子  - 07/8/4(土) 20:26 -

引用なし
パスワード
   ▼hatena さん、アドバイスありがとうございます。

>私は下記に公開されてる関数を利用させてもらってます。
>
>www.h3.dion.ne.jp/~sakatsu/holiday_logic.htm

はい、実は上記サイトは「お気に入り」に登録済みですが、
難しくて私の手には負えないと思っておりました。
でも、質問箱の方々のアドバイスであれば、
一度解読に取り組んでみたいと思います。
またわからないことがあったら、よろしくお願いいたします。
・ツリー全体表示

【9736】Re:MDBが壊れる
お礼  初心者A  - 07/8/4(土) 11:05 -

引用なし
パスワード
   ありがとうございます。

日曜になったら最適化する様
タスク機能にJOB作ってみます。


あと1つ教えてください
時々 db1 db2 と増殖しくるのも最適化の問題でしょうか?
   共有しているMDBばかりに発生している気もしますが
   何が原因なのでしょうか?
      
・ツリー全体表示

【9735】Re:findfirstの使い方
回答  hatena  - 07/8/4(土) 3:15 -

引用なし
パスワード
   >>その場合は、5月3日が日曜日の場合も考えてみると良いかと思います。
>
>そうですね、まだいろいろなパターンがあって複雑なコードになりそうです。

すべてコードでやるとかなり複雑なコードになりますね。

私は下記に公開されてる関数を利用させてもらってます。

www.h3.dion.ne.jp/~sakatsu/holiday_logic.htm
・ツリー全体表示

【9734】Re:MDBが壊れる
回答  Gin_II  - 07/8/4(土) 2:58 -

引用なし
パスワード
   >時々壊れてしまいます。
>閉じるときに最適化すると使用中でも
>最適化されるのでしょうか?

はい。誰も使っていないときにしてください。


>日曜に自動的に最適化するようにするには
>どうすればいいでしょうか?

日曜日は誰も使っていないんですか?
使っている可能性があれば、壊れる可能性もあるということです。

自動化させるのであれば、サーバ等の運用環境を含めて考える必要があります。

たとえば、午前4時とかぐらいなら、誰も使っていない。
という条件があるのであれば、その時間に最適化を実行させたほうがいいです。

その場合、サーバが24時間稼動していることも条件になりますけど。


無人で最適化を実行するのであれば、Windwosのタスク機能などを利用する
必要があると思います。
・ツリー全体表示

【9733】MDBが壊れる
質問  初心者A  - 07/8/3(金) 23:19 -

引用なし
パスワード
   共有で使用しているMDBを
定期的に最適化したいのですが

時々壊れてしまいます。
閉じるときに最適化すると使用中でも
最適化されるのでしょうか?

日曜に自動的に最適化するようにするには
どうすればいいでしょうか?


御指導よろしくお願いします。
・ツリー全体表示

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