Access VBA質問箱 IV

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

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


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

【10501】Re:VBAとCallBack関数
発言  SAU  - 08/8/8(金) 11:28 -

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

>どんな処理をしているかを書いた方が識者から良いアドバイスを受けられると
>思いますよ。出来るだけソース(概要でも)も。

ボタンを押したら、指定したデータの音を再生し、再生が終わったら次のデータの音を再生する...という処理を作成したいのです。(テキスト合成音です)
WndProc()で終了を監視しないと、再生が終わらないうちに次の音声を再生してしまい、マズイのです。


現在のソースは

●ボタンをクリックするほうのモジュールは
Private Sub Form_Close()
  EndSubClass (Me.hWnd)
End Sub

Private Sub Form_Load()
  BeginSubClass (Me.hWnd)
End Sub

Private Sub 音声再生_Click()
  Dim r1 As Variant
  Dim Ret As String
  Dim m(10) As String
  Dim bib As Integer
  Dim tm As String
  Dim vv As String
  Dim ii As Long
  'stDocName = "FTM1"
  Dim speaker As Long
  
  Ret = 音再生初期処理() ・・・Dll内関数
  If 再生エラー() Then
    Exit Sub
  End If
 
  Ret = 音再生処理() ・・・Dll内関数
End Sub

●サブクラス化のほうは

Public Function WndProc(ByVal hWnd As Long, ByVal msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
 
    '読み上げ終了
   If lParam = -1 Then
     終了フラグ = True
  End If
  DefaultProc = colDProc(CStr(hWnd))
  WndProc = CallWindowProc(DefaultProc, hWnd, umsg, wParam, lParam)
End Function


Public Sub BeginSubClass(hWnd As Long)
  Static bAlready As Boolean
  Dim DefaultProc As Long
  If Not bAlready Then
    bAlready = True
    Set colDProc = New Collection
  End If
  DefaultProc = SetWindowLong(hWnd, GWL_WNDPROC, AddressOf WndProc)
  colDProc.Add DefaultProc, CStr(hWnd)
End Sub

Public Sub EndSubClass(hWnd As Long)
  Dim Ret As Long
  Dim DefaultProc As Long
  DefaultProc = colDProc.Item(hWnd)
  Ret = SetWindowLong(hWnd, GWL_WNDPROC, DefaultProc)
  colDProc.Remove CStr(hWnd)
End Sub


のようにしています。

>Form_Loadでサブクラス化しているのも引っかかります。キチンと表示後、
>何らかのタイミングでサブクラスしてみたら切り分け出来るかも???

Form_Loadでサブクラス化ではなく、ボタンをクリックした時にサブクラス化も試してみたのですが、同じくWndProc()がLoopしてしまいました。

WndProc()がLoopしてしまうので、コードが間違っていると思うのですが
知識もなく、VBのサンプルに沿って書いているので、
どこが間違っているのかわかりません。

引き続き、宜しくお願いします。
・ツリー全体表示

【10500】Re:VBAとCallBack関数
発言  neptune  - 08/8/7(木) 22:17 -

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

私にわかるかどうかは判りませんが、
>VBAでCallBack関数を組み込んでいます。
>やりたいことは、dll(VB)を使って処理を行い、その処理の終了を待って、
>次の処理をしたいのですが、うまくできません。
>(処理の終了は、WindowProcのパラメータの値をチッェクすることで認識できます)
どんな処理をしているかを書いた方が識者から良いアドバイスを受けられると
思いますよ。出来るだけソース(概要でも)も。

Form_Loadでサブクラス化しているのも引っかかります。キチンと表示後、
何らかのタイミングでサブクラスしてみたら切り分け出来るかも???

>VBプロジェクトのサブクラス化と、VBAのサブクラス化で何が違うのでしょうか。
>一応、VBだとbasファイルになっているものは標準モジュールに書いています。
>先に進めず、困っています。
>なんでもいいのでアドバイスをよろしくお願いします。
最大の違いは実行ファイル化できないことです。Accessではmdeファイルに
出来るのでものは試しで、mdeファイルにしてみたらどうですか?

ちなみにExcelではsettimerとかサブクラスは危なくて使う気がしません。
・ツリー全体表示

【10499】VBAとCallBack関数
質問  SAU  - 08/8/7(木) 18:41 -

引用なし
パスワード
   VBAでCallBack関数を組み込んでいます。
やりたいことは、dll(VB)を使って処理を行い、その処理の終了を待って、
次の処理をしたいのですが、うまくできません。
(処理の終了は、WindowProcのパラメータの値をチッェクすることで認識できます)

Form_Loadで、WindowProc()をサブクラス化してるのですが
Form_Load()が動いた時点で、固まってしまいます。
  →WindowProcから抜けてこない?! 

サンプルでVBのプロジェクトのソースコードを参考にしました。
VBのサンプルでは、だんまりにもならず、正常に処理の完了が拾えます。

VBプロジェクトのサブクラス化と、VBAのサブクラス化で何が違うのでしょうか。
一応、VBだとbasファイルになっているものは標準モジュールに書いています。
先に進めず、困っています。
なんでもいいのでアドバイスをよろしくお願いします。
・ツリー全体表示

【10498】フォームを読み込んだ時の制限
質問  クッソン  - 08/8/7(木) 16:14 -

引用なし
パスワード
   Private Sub Form_Load() ←フォームを読み込んだ時。
Me.AllowAdditions = False ←レコードの追加をできなくする。
Me.AllowDeletions = False ←レコードの削除をできなくする。
DoCmd.SetWarnings False ←Accessからのメッセージを非表示に。

フォームを読み込んだ時に即存するデータの編集をできなくする方法は
ありますでしょうか?またその方法をご教示ください。
・ツリー全体表示

【10497】個人用マクロブックのマクロを実行したい
質問  みみ  - 08/8/6(水) 15:49 -

引用なし
パスワード
   宜しくお願いいたします。

AccessからExcelのpersonal(個人用マクロブック)マクロを実行
させたいのですが、「・・マクロ名が見つかりません」と表示され実行できません。

以下コードです。

------------------------------ここから(Class module)

Private objXls As Excel.Application
Public Property Set objExcel(ByRef objExcel As Excel.Application)
  Set objXls = objExcel
End Property

Public Property Get objExcel() As Excel.Application
Set objExcel = objXls
End Property

Public Property Let objExcel(ByRef objExcel As Excel.Application)
  Set objXls = objExcel
End Property

Public Function Excel_Exe(FileName1)
objXls.Workbooks.Open FileName:=FileName1
 objExcel.Application.Run ("マクロの名前")
objXls.Workbooks.Close
End Function

------------------------------ここまで(Class module)
------------------------------ここから(module)

Sub MS読込前処理()
 
 Dim xls As Excel.Application
 Dim cls As Class1
 Set xls = New Excel.Application
 Set cls = New Class1
  
 cls.objExcel = xls
 cls.Excel_Exe ("C\ファイル名.xls")
  
 Set xls = Nothing
 Set cls = Nothing
 
End Sub

------------------------------ここまで(module)

修正点を教えていただけると大変助かります。

宜しくお願いします。
・ツリー全体表示

【10496】Re:複数の条件から
発言  工事 E-MAIL  - 08/8/5(火) 20:35 -

引用なし
パスワード
   ▼工事 さん:やっと気がつきました。テーブルのデータ型を通貨型からテキスト型に変更していなかったためでした。変更したらうまくいきました。いろいろありがとうございました。
>▼Gin_II さんへ
>ありがとうございます。
>教えて頂いたようにして
>以下のように入力しています。
>賞金 = Switch(総合評価 <= 50000, 200, 総合評価 <= 100000, 500, 総合評価 <= 500000, 1000, 総合評価 <= 1000000, 5000, 総合評価 <= 2000000, 10000, True, 100000)このようにしますとエラーにならないのです。
>本当は、True,”社長賞”にしたいのですが、True, 100000からTrue,”社長賞”にすると構文が黄色くなります。どこを直せばいいのかわかりません。なんとか作りあげたいのでよろしくお願いいたします。
>>> デパックの表示が出ました。
>>
>>どんなエラーなんでしょうか?
>>
>>
>>> 賞金のフィールドでフォーカス取得時に
>>
>>総合評価の更新後イベントとかの方がいいと思いますけど。
・ツリー全体表示

【10495】リレーションシップしていないテーブルの...
質問  RabiRabi  - 08/8/5(火) 14:25 -

引用なし
パスワード
   テーブル(A)のレコード削除処理をすると、リレーションシップしていないテーブル(B)のレコードまで削除されてしまいます。

AとBはレコードソース内で結合していますが、これが原因でしょうか?
だとしたら、対応策はないのでしょうか?

 テーブルA:随時追加するテーブル
 テーブルB:マスタテーブル(A内のフィールドCとB内のフィールドCを外部結合)
・ツリー全体表示

【10494】Re:フォーム→テーブル→Excel
お礼  クッソン  - 08/8/4(月) 9:09 -

引用なし
パスワード
   ▼Gin_II様

返事ご遅れ、申し訳ありませんでした。

ご回答感謝致します。

早速調べさせていただきます。
・ツリー全体表示

【10493】Re:複数の条件から
質問  工事 E-MAIL  - 08/8/1(金) 18:37 -

引用なし
パスワード
   ▼Gin_II さんへ
ありがとうございます。
教えて頂いたようにして
以下のように入力しています。
賞金 = Switch(総合評価 <= 50000, 200, 総合評価 <= 100000, 500, 総合評価 <= 500000, 1000, 総合評価 <= 1000000, 5000, 総合評価 <= 2000000, 10000, True, 100000)このようにしますとエラーにならないのです。
本当は、True,”社長賞”にしたいのですが、True, 100000からTrue,”社長賞”にすると構文が黄色くなります。どこを直せばいいのかわかりません。なんとか作りあげたいのでよろしくお願いいたします。
>> デパックの表示が出ました。
>
>どんなエラーなんでしょうか?
>
>
>> 賞金のフィールドでフォーカス取得時に
>
>総合評価の更新後イベントとかの方がいいと思いますけど。
・ツリー全体表示

【10492】Re:フォーム→テーブル→Excel
回答  Gin_II  - 08/8/1(金) 16:25 -

引用なし
パスワード
   > ACCESSのフォームで入力したデータをACCESSのテーブルに更新していく事はできますか?

連結フォームを利用すれば、自動的に、テーブルへ更新されると思いますけど。


> 更新したデータをExcelのきまったセルに転記していくことは可能でしょうか?

可能です。
VBAでオートメーション機能を使ってください。
・ツリー全体表示

【10491】Re:複数の条件から
回答  Gin_II  - 08/8/1(金) 16:24 -

引用なし
パスワード
   > デパックの表示が出ました。

どんなエラーなんでしょうか?


> 賞金のフィールドでフォーカス取得時に

総合評価の更新後イベントとかの方がいいと思いますけど。
・ツリー全体表示

【10490】フォーム→テーブル→Excel
質問  クッソン  - 08/8/1(金) 15:34 -

引用なし
パスワード
   いつもお世話になっております。

つかぬ事をお伺いします。

ACCESSのフォームで入力したデータをACCESSのテーブルに更新していく事はできますか?

また、更新したデータをExcelのきまったセルに転記していくことは可能でしょうか?

例えば、日付、曜日、通常残業、休日残業をテキストテキストボックスに入力して、更新ボタンを押下すると、対象のテーブルに更新されていくというものです。

お願いします。
・ツリー全体表示

【10489】Re:別フォームからDocmdってできますか?
お礼  RabiRabi  - 08/7/31(木) 11:03 -

引用なし
パスワード
   ▼Gin_II さん:
>expression.GoToRecord(ObjectType, ObjectName, Record, Offset)
>
>です。オブジェクト名を指定することができますよ。

=>> できました!
    素人ですいません、ありがとうございました。
・ツリー全体表示

【10488】Re:別フォームからDocmdってできますか?
回答  Gin_II  - 08/7/31(木) 10:34 -

引用なし
パスワード
   >フォームのイベント(VBA)から、別のフォームの表に対して、Docmdを
>利用してカレントレコードの移動したいのですが、そういうのは可能でしょうか?
>
>可能なら指定方法を教えてください。

構文
expression.GoToRecord(ObjectType, ObjectName, Record, Offset)

です。オブジェクト名を指定することができますよ。
・ツリー全体表示

【10487】別フォームからDocmdってできますか?
質問  RabiRabi  - 08/7/31(木) 10:07 -

引用なし
パスワード
   フォームのイベント(VBA)から、別のフォームの表に対して、Docmdを利用してカレントレコードの移動したいのですが、そういうのは可能でしょうか?

可能なら指定方法を教えてください。

  Docmd.GoToRecord,,acGoTo,レコード番号 

上記のようなことがしたいのですか。。。
よろしくおねがいします。
・ツリー全体表示

【10486】Re:複数の条件から
質問  工事 E-MAIL  - 08/7/30(水) 20:33 -

引用なし
パスワード
   ▼Gin_II さん
ありがとうございました
私はフォームのフィールド[総合評価]に入力された値が、賞金のフィールドでフォーカス取得時に以下の式で評価したいと考えております。最初はうまくいったのですがすぐデパックの表示が出ました。
以下の式の間違いを正してもらえないでしょうか。
また正しい方法がありましたら初心者ですのでなるべく具体的に教えてほしいのですが、よろしくお願いいたします。
[賞金] = Switch(総合評価 <= 5000, 200, [総合評価] <= 99999, 500, [総合評価] <= 499999, 5000, [総合評価] <= 999999, 10000, True, "社長賞")

>> イベントプロシジャーで関数を入力し、
>
>自作関数を作るほどのものでもないとは思います。
>クエリやコントロールの式で、
>
>Switch([値] <= 5000, 200
>   , [値] <= 99999, 500
>   , [値] <= 499999, 5000
>   , [値] <= 999999, 10000
>   , True, "∞")
>
>のようにしてみてください。
・ツリー全体表示

【10485】Re:複数の条件から
回答  Gin_II  - 08/7/30(水) 8:30 -

引用なし
パスワード
   > イベントプロシジャーで関数を入力し、

自作関数を作るほどのものでもないとは思います。
クエリやコントロールの式で、

Switch([値] <= 5000, 200
   , [値] <= 99999, 500
   , [値] <= 499999, 5000
   , [値] <= 999999, 10000
   , True, "∞")

のようにしてみてください。
・ツリー全体表示

【10484】コンボボックスのdefaultvalueを変更した...
質問  ここ  - 08/7/29(火) 23:13 -

引用なし
パスワード
   VBAでコンボボックスのdefaultvalueを変更したいのですが。

連結列は2です。
プルダウン候補値は連結データ2列とも表示されていますが、選択後は1列目しか表示していません。
VBA内で、defaultvalueを変数の値に置き換えたいのですがうまくいきません。
連結列が2列のとき、どのような記述になるのでしょうか?
・ツリー全体表示

【10483】複数の条件から
質問  工事 E-MAIL  - 08/7/29(火) 19:16 -

引用なし
パスワード
   すいませんが初心者です、教えてください。

入力フォームのフィールドに入力された値を、別のフィールドで、Aの条件に対するBの値を返したいと思いますがお願いします。
たとえば、50672を入力したらイベントプロシジャーで関数を入力し、次のフィールドに500を返したいのですがどのようにしたらよろしいでしょうか。

入力値   500
  A      B
5000以下    200
50000〜99999  500
100000〜499999 5000
500000〜999999 10000
1000000以上   ∞
・ツリー全体表示

【10482】Re:AccessからOrcleのSQLを実行
発言  小僧  - 08/7/29(火) 14:47 -

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

>こういったことは可能なのでしょうか?

漠然とした質問なので、何ともいえませんが、
恐らく可能な事であると思われます。

> OrcleのSQLを動かす

Oracle について詳しく解らないので「動かす」という内容が不明ですが、
UPDATE文 や INSERT文 、DELETE文などは
Access側の構文に合わせて書く方法も、
Oracle側の構文に合わせて書く方法もありますね。

またストアドの実行なども可能です。
・ツリー全体表示

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