Access VBA質問箱 IV

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

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


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

【9854】Re:access202について
質問  はせ E-MAIL  - 07/9/19(水) 1:46 -

引用なし
パスワード
   ▼hatena さん:
>>  テキストボックスの削除を行って、関連部分のプログラムを削除し忘れても問題無く動作しているが、忘れた頃にエラーになる。
>
>まず、AC97でも削除したときに警告はしてくれなかったと思いますが。
>削除したら、それに関連するコードは削除・変更は手作業で行うしか
>ないのでは。検索機能を使えば、テキストボックスを参照している
>部分のコードは見つけることが出来ますよね。
>もし削除・変更し忘れがあってエラーが出たときは、エラーが出た部分を
>その都度変更するしかないのでは。
>
>>  また、テキストボックスの名前を変更した場合でも動作してしまう。
>
>例えば、どのような場合ですか。
>具体例を挙げて、説明してもらえますか。
>だれでも再現できる手順を示してもらうと
>回答が得られやすいと思いますよ。
>
>>  素人考えですが、最適化が正常動作していないのでは????
>
>コードの動作に関しては、最適化は関係ないと思います。

 何度も申訳御座いません。
 例えば
  abc = "○"  を  abcd = "○" に変更しても
  abc は存在している事になっている
  当然新しい abcd には結果表示は無い

  他に abc に関するプログラムが残っていても
   abc のテキストボックスの有無に関係なく問題が生じない。
  
  意思通じましたでしょうか?
・ツリー全体表示

【9853】Re:access202について
回答  hatena  - 07/9/19(水) 0:03 -

引用なし
パスワード
   >  テキストボックスの削除を行って、関連部分のプログラムを削除し忘れても問題無く動作しているが、忘れた頃にエラーになる。

まず、AC97でも削除したときに警告はしてくれなかったと思いますが。
削除したら、それに関連するコードは削除・変更は手作業で行うしか
ないのでは。検索機能を使えば、テキストボックスを参照している
部分のコードは見つけることが出来ますよね。
もし削除・変更し忘れがあってエラーが出たときは、エラーが出た部分を
その都度変更するしかないのでは。

>  また、テキストボックスの名前を変更した場合でも動作してしまう。

例えば、どのような場合ですか。
具体例を挙げて、説明してもらえますか。
だれでも再現できる手順を示してもらうと
回答が得られやすいと思いますよ。

>  素人考えですが、最適化が正常動作していないのでは????

コードの動作に関しては、最適化は関係ないと思います。
・ツリー全体表示

【9852】Re:access202について
質問  はせ E-MAIL  - 07/9/18(火) 22:00 -

引用なし
パスワード
   ▼Gin_II さん:
>>○問題
>> 1.テキストボックスを削除してもエラーメッセージが出ません。
>> 2.テキストボックスの名前を間違えてもエラーが出ません。
>
>Access97 でもエラーはでないと思いますけど?
>
>> 1.2.の状態でソフト動作結果が違いが多発しており、目視して
>> 初めて判る状態です
>
>移行作業で、なぜ、テキストボックスの削除や名前の修正が発生するのでしょうか?

○ 質問が不明確で申訳御座いませんでした。

  移行作業中に発生したのではありません。
  access202に移行した後で、プログラムの変更を行った場合です。

  テキストボックスの削除を行って、関連部分のプログラムを削除し忘れても問題無く動作しているが、忘れた頃にエラーになる。
  また、テキストボックスの名前を変更した場合でも動作してしまう。

  素人考えですが、最適化が正常動作していないのでは????
・ツリー全体表示

【9851】Re:right、left関数が使えない
回答  小僧  - 07/9/18(火) 13:24 -

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

>クエリーで「クエリ式'right(またはleft)'この関数は式では使用できません」

上記メッセージでまず考えられるのは参照設定の問題ですね。
参照不可の項目がないか確認されてみて下さい。


またAccess2000についてですが、下記の様なバグも報告されております。

MSサポートオンライン
[ACC2000] 新しい VBA 関数を式で使用できない
h tp://support.microsoft.com/default.aspx?scid=kb;ja;225956&Product=accJPN
(こちらの掲示板では直リンクが禁止されておりますので補完して下さい)

今回の場合はLeft関数、Right関数という事で該当しませんが、
全てのクライアントのOfficeについてサービスパックが最新の状態でないと
他にも動作環境の違いが出てしまう可能性がありますね。
・ツリー全体表示

【9850】Re:access202について
回答  Gin_II  - 07/9/18(火) 12:42 -

引用なし
パスワード
   >○問題
> 1.テキストボックスを削除してもエラーメッセージが出ません。
> 2.テキストボックスの名前を間違えてもエラーが出ません。

Access97 でもエラーはでないと思いますけど?

> 1.2.の状態でソフト動作結果が違いが多発しており、目視して
> 初めて判る状態です

移行作業で、なぜ、テキストボックスの削除や名前の修正が発生するのでしょうか?
・ツリー全体表示

【9849】Re:レコードの登録のタイミング
お礼  さつき  - 07/9/18(火) 11:57 -

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

>DoCmd.RunCommand acCmdSaveRecord
>あるいは、
>Me.Refresh
>を登録ボタンの最初の方に入れておけば、テーブルに保存されますので、
>うまくいきそうなのですが。

Me.Refresh を最初に入れたら、上手く行きました。
いつも丁寧にお教え頂き、ありがとうございます。
また、わからないことがありましたら、よろしくお願いいたします。
・ツリー全体表示

【9848】right、left関数が使えない
質問  カダワン  - 07/9/18(火) 11:29 -

引用なし
パスワード
   おせわになります。ACCESS2000を使用しております。OSはXPです。
あるファイルサーバにおいてあるmdbを実行すると、クライアントによって
クエリーで「クエリ式'right(またはleft)'この関数は式では使用できません」
エラーが出てしまいます。クライアントによって普通に動くものもあります。
これは何が原因なのでしょうか?
今の所はright,left関数が動かない位しか分かりませんが、他の関数もエラー
になってしまいそうです。
教えて下さい。
・ツリー全体表示

【9847】Re:レコードの登録のタイミング
回答  hatena  - 07/9/18(火) 10:10 -

引用なし
パスワード
   ぱっと見たかぎりでは、

DoCmd.RunCommand acCmdSaveRecord

あるいは、

Me.Refresh

を登録ボタンの最初の方に入れておけば、テーブルに保存されますので、
うまくいきそうなのですが。

かなり複雑なことをしていそうで、かつ、こちらからは全体像が見えないので、
私には、これ以上のアドバイスは難しそうですね。
・ツリー全体表示

【9846】Re:アクセスVBAでエクセルを操作
お礼  ぼっちゃん  - 07/9/18(火) 9:02 -

引用なし
パスワード
   ご回答ありがとうございました。
また、いろいろ新しいこと(インスタンス等)を
おそわり感謝しています。
これをいかしてがんばりたいと思います。
・ツリー全体表示

【9845】access202について
質問  はせ E-MAIL  - 07/9/17(月) 20:28 -

引用なし
パスワード
    access97で作成したソフトをaccess202にバージョンアップしました。
○問題
 1.テキストボックスを削除してもエラーメッセージが出ません。
 2.テキストボックスの名前を間違えてもエラーが出ません。
 1.2.の状態でソフト動作結果が違いが多発しており、目視して初めて判る状態です

 どなたか対処方法を教えて下さい。
 お願い致します。
・ツリー全体表示

【9844】Re:レコードの登録のタイミング
質問  さつき  - 07/9/17(月) 19:18 -

引用なし
パスワード
   hatena さん、その節は大変お世話になり、ありがとうございました。
hatenaさんに教えていただいたシステムを運用しております。とても快適に使うことができ、助かっております。

>DoCmd.RunCommand acCmdSaveRecord
>で強制的にレコード保存すればいいかと。

DoCmd.RunCommand acCmdSaveRecordの使い方を調べて、コードを記述し、動かしてみました。
私がわかった範囲では、フォームの元になっているテーブルに保存する形にしかできませんでした。
今までは、下記のように記述して、「名簿」テーブルからのデータに「日付」や「出欠(yes/no)」を追加して「出欠」テーブルに保存していました。
「出欠」欄にチェックのないレコードにもdate()で、当日の日付を入れていく形です。これによっていつに欠席したかを検知し、色分けしています。
また、「名簿」テーブルにあるすべてではなく、一部のフィールドだけを抜粋して保存しております。
これと同じことをするために、何かよい方法ありますでしょうか?

Private Sub 登録_Click()

Dim CN As ADODB.Connection
Dim CMD As New ADODB.Command
Dim RS As New ADODB.Recordset
Dim RS2 As New ADODB.Recordset

  Set CN = CurrentProject.Connection

  Set RS2 = New ADODB.Recordset
  RS2.Open "出欠", CN, adOpenStatic, adLockOptimistic

  With CMD
    .ActiveConnection = CN
    .CommandText = "SELECT * FROM 名簿 " _
           & "WHERE クラス ='" & Me.クラス選択 & "' " _
            & "AND 曜日='" & Me.曜日選択 & "'"
    .CommandType = adCmdText
  End With
  
    Set RS = CMD.Execute
 
  Do Until RS.EOF
    RS2.AddNew
      RS2!生徒番号 = RS!生徒番号
      RS2!出席日 = Date
      RS2!出欠 = RS!出欠
      RS2!振替予定日 = RS!振替予定日
      RS2!チケット受講 = RS!チケット受講
    RS2.Update
    RS.MoveNext
  Loop
  RS.Close

End Sub
・ツリー全体表示

【9843】Re:アクセスVBAでエクセルを操作
回答  小僧  - 07/9/17(月) 17:20 -

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

直接の問題以外にも色々ありそうですね。

> Dim aaa As String
> 
> aaa = DCount("*", "Q_集計(製品名)A") + 2

DCount の戻り値は数値型ではないのでしょうか。


>  With objExcel
>  .Worksheets.Add
>   .Range("A2").CopyFromRecordset rst

Excel のオブジェクトは

Application - Workbook - WorkSheet - Cell(Range)

の様な順序です。

現在のコードではエラーが出ないのかもしれませんが、
潜在的なバグの元になるかと思われます。


>  End With
>  Set objExcel = Nothing

Excel を不可視にしたままの状態で
オブジェクトだけ破棄しようとすると
インスタンスが残りっぱなしになってしまいますよ。

インスタンスが残りっぱなしなのに
何回もこのExcelファイルを開こうとすると
最悪ファイルが破損する恐れもあります。


> Q_集計(製品名)A

クエリの名前に()がついているのは余り宜しくないかと思われます。
こちらの問題については Miona さんという方のサイトが
非常に参考になるかと思われますので、
是非一度目を通されてみてください。

Miona's Square
フィールド、コントロール、オブジェクトや変数などに付ける「名前」について
h tp://ww3.tiki.ne.jp/~kaya/Ac_tips.html#Tips0_001
(こちらの掲示板は直リンク禁止ですので補完して下さい)


> .Range("A1").Value = "製品名"
> .Range("B1").Value = "件数"
> ・・・

フィールド数にもよるのですが、
せっかくレコードセットがあるのですから、
フィールドをループさせた方が効率的かもしれませんね。


> "=SUM(R[-aaa]C:R[-1]C)"

例えば aaa が 6行目の時、R[-6] は 0行目 になり、
Excel が勝手に 65535 行目に変換してしまいますよ。
求めたいのはヘッダー行を除いた合計ではないのでしょうか。


Private Sub コマンド0_Click()
Dim objExcel As Excel.Application
Dim objWkb As Excel.Workbook
Dim objSht As Excel.Worksheet
Dim FName As String
Dim db As DAO.Database
Dim rst As DAO.Recordset
Dim qdf As DAO.QueryDef
Dim aaa As Long
Dim i As Long
 
  'FName = "C:\Documents and Settings\2103\デスクトップ\111.xls"
  'ファイル名が決め打ちの場合、下行をコメント化して上行のコメントを解除してください
  FName = CreateObject("WScript.Shell").SpecialFolders("DeskTop") & "\111.xls"
  
  Set db = CurrentDb
  Set qdf = db.QueryDefs("Q_集計_製品名_A")
  Set rst = qdf.OpenRecordset
  Set objExcel = CreateObject("Excel.Application")
  Set objWkb = objExcel.Workbooks.Open(FName)
  Set objSht = objWkb.Worksheets.Add

    With objSht
      For i = 0 To rst.Fields.Count - 1
        .Cells(1, i + 1).Value = rst(i).Name
      Next i
      .Range("A2").CopyFromRecordset rst
      rst.MoveLast
      aaa = rst.RecordCount + 2
      .Range("A" & aaa).Value = "合計"
      .Range("B" & aaa).Value = _
         "=Sum(R[-" & aaa - 2 & "]C:R[-1]C)"
    End With
  objWkb.Close True: Set objWkb = Nothing
  objExcel.Quit: Set objExcel = Nothing
  

  rst.Close: Set rst = Nothing
  qdf.Close: Set qdf = Nothing
  db.Close: Set db = Nothing
End Sub

こんな感じでいかがでしょうか。
・ツリー全体表示

【9842】Re:レコードの登録のタイミング
回答  hatena  - 07/9/16(日) 9:18 -

引用なし
パスワード
   >「名簿」というテーブルを元に、「出欠管理」というフォームを一覧表形式で作って、「出欠」フィールドにチェックを入れています。
>画面の中の登録というボタンを押すと、「出欠一覧」テーブルに「生徒番号」と「出欠」のチェックが保存されていく形なのですが、フォームの中でチェックを入れた後、他のレコードにフォーカスを移動してからでないと、登録ボタンを押したときに「出欠」のチェックが保存されていかないのです。これはどう対処したらよいでしょうか?

DoCmd.RunCommand acCmdSaveRecord
で強制的にレコード保存すればいいかと。
・ツリー全体表示

【9841】レコードの登録のタイミング
質問  さつき  - 07/9/15(土) 20:04 -

引用なし
パスワード
   こんにちは。さつきと申します。
以前、こちらで教えていただいたシステムを運用しておりますが、ちょっとわからない点があったので、どなたかご教示お願いいたします。

「名簿」というテーブルを元に、「出欠管理」というフォームを一覧表形式で作って、「出欠」フィールドにチェックを入れています。
画面の中の登録というボタンを押すと、「出欠一覧」テーブルに「生徒番号」と「出欠」のチェックが保存されていく形なのですが、フォームの中でチェックを入れた後、他のレコードにフォーカスを移動してからでないと、登録ボタンを押したときに「出欠」のチェックが保存されていかないのです。これはどう対処したらよいでしょうか?
・ツリー全体表示

【9840】アクセスVBAでエクセルを操作
質問  ぼっちゃん  - 07/9/14(金) 11:01 -

引用なし
パスワード
   お初にお目にかかります。VBA初心者です
アクセスのクエリで加工したデータをエクセルに貼り付け、
エクセルで合計をするVBAを作ろうとしていますが、エクセルの集計の
ところでうまくいきません。
Private Sub コマンド0_Click()
  Dim objExcel As Excel.Application
  Dim db As DAO.Database
  Dim rst As DAO.Recordset
  Dim qdf As DAO.QueryDef
  Dim aaa As String
 
  aaa = DCount("*", "Q_集計(製品名)A") + 2
 
  Set objExcel = CreateObject("Excel.Application")
  objExcel.Workbooks.Open Filename:="C:\Documents and Settings\2103\デスクトップ\111.xls"
  With objExcel
    .Worksheets.Add
     Set db = CurrentDb
     Set qdf = db.QueryDefs("Q_集計(製品名)A")
     Set rst = qdf.OpenRecordset
    .Range("A2").CopyFromRecordset rst
     rst.Close
     db.Close
     Set rst = Nothing
     Set qdf = Nothing
     Set db = Nothing
    .Range("A1").Value = "製品名"
    .Range("B1").Value = "件数"
    .Range("C1").Value = "問合せ"
    .Range("D1").Value = "クレーム"
    .Range("E1").Value = "提案"
    .Range("F1").Value = "その他"
    .Range("G1").Value = "%"
    .Cells(aaa, 1).Value = "合計"
    .Cells(aaa, 2).FormulaR1C1 = "=SUM(R[-aaa]C:R[-1]C)"←ここでうまくいきません。アプリケーション定義のエラーが出てきます。
  End With
  Set objExcel = Nothing
End Sub

詳しい方、返信お願いします。
・ツリー全体表示

【9839】Re:日付のnull値の扱い
お礼  じゃすみん  - 07/9/13(木) 11:46 -

引用なし
パスワード
   ありがとうございます。
ちゃんとブランク表示されました。

▼hatena さん:
>Nullかどうかの判断はIsNull関数使います。
>
>IIf(Min(IsNull([処理工完日])),Null,Max([処理工完日])) AS 工完日
・ツリー全体表示

【9838】Re:日付のnull値の扱い
回答  hatena  - 07/9/12(水) 15:47 -

引用なし
パスワード
   Nullかどうかの判断はIsNull関数使います。

IIf(Min(IsNull([処理工完日])),Null,Max([処理工完日])) AS 工完日
・ツリー全体表示

【9837】日付のnull値の扱い
質問  じゃすみん  - 07/9/12(水) 11:34 -

引用なし
パスワード
   WinXp
Access2002です。

おわかりになる方にお伺い致します。
以下のクエリの場合に処理工完日のいずれかにNullが含まれている場合には""を表示させて、Nullが含まれていない場合は処理工完日の最大値を表示させたいのですが、nzやNullの扱いに暗くてNullが完全に無視されて処理工完日の最大値が表示されます。修正点をご教授下さい。

SELECT T_工事台帳.工事番号, IIf(Min(nz([処理工完日]))='','',Max([処理工完日])) AS 工完日
FROM T_工事台帳
GROUP BY T_工事台帳.工事番号;
・ツリー全体表示

【9836】Re:フィールドに入力した値を判定したい
回答  Nao  - 07/9/11(火) 11:29 -

引用なし
パスワード
   hatenaさんへ
書き間違えです (^^)v

> 判定基準は10.5±0.1です。
>
>[長さ] が 10.4以上、10.6以下なら OK ということですね。
>なら、コントロールソースの式は、
>
>=IIf(Abs([長さ]-10.5)<=0.5,"OK","NG")
>
>です。

=IIf(Abs([長さ]-10.5)<=0.1,"OK","NG")
(0.5が0.1の間違え)
ですね


浩二さんへ

チェックする値はこれ 10.5±0.1 1種類だけですか?
そうであれば数値を固定している式で問題ないのですが
もし条件によって変わるのであればそれなりの対応が
必要になります。
・ツリー全体表示

【9835】Re:数値型データの抽出です
お礼  ゆっぴぃ  - 07/9/11(火) 0:52 -

引用なし
パスワード
   hatena さん! できました。

>フィールドは数値型でも、抽出条件式は文字列ですよね。

なるほど〜と納得です! 言われてみればそうですよね♪

またひとつ勉強させていただきました。ありがとうございました!!
・ツリー全体表示

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