Access VBA質問箱 IV

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

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


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

【4458】Re:必須項目に対する入力チェックの仕組み
回答  クロ  - 05/2/23(水) 17:33 -

引用なし
パスワード
   Dim CHECK As String
Dim i As Integer

Entrychk = 0
CHECK = ""

For i = 1 To 5
  If IsNull(Forms!登録フォーム!("項目" & i)) Then
   CHECK = CHECK & "," & "項目" & i
  End If
Next i

If Len(Nz(CHECK, "")) = 0 Then
  Exit Function
Else
  MsgBox Mid(CHECK, 2) & " が未入力です。"
  Forms!登録フォーム!(Mid(CHECK, 2, 3)).SetFocus
End If

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

【4457】Re:SQL更新のWHERE句
お礼  nssnkg  - 05/2/23(水) 17:13 -

引用なし
パスワード
   クロさん、いろいろと親切に教えて頂き本当に有難うございました。
一人で悩んでいたのですが、なんか自信が沸いてきました。(他力本願ですが)
いろいろ試して、もっと勉強します。
・ツリー全体表示

【4456】Re:SQL更新のWHERE句
回答  クロ  - 05/2/23(水) 16:52 -

引用なし
パスワード
   >クロさん、本当に有難うございました。さっそく試しました。
>データーの競合・・は表示されますがテーブルを開くと
>レコードは更新してました。エラー表示は無視してもかまいません
>でしょうか。もしそうならエラー表示を回避する方法はありますか?

当方でのテストはテーブルで行ったのでクエリだと出る可能性は
ありますね。特にリレーションなど組んでいると
クエリの状況が分からないので何とも言えませんが...

>それと、更新後にレコードがとんでもない日付の位置まで(たぶん
>最初ごろのレコード)飛んで表示したりします。更新した位置で
>フォームに表示してあるレコードを保持する方法はありますか?

Private Sub コマンド102_Click()
  Dim mySQL As String  'SQLステートメント
  Dim cn As New ADODB.Connection
  Dim com As New ADODB.Command
  Dim varBM As Variant '現在のレコード位置取得のための変数

  '現在位置取得
  varBM = Me.Bookmark
     '更新クエリを作成
    mySQL = "update 受注伝票 set 集計月 = #" & 伝票日付 & "# " _
       & "WHERE ((顧客コード = " & 顧客コード & ") and (伝票日付 Between #" & Me!date2 & "# And #" & Me!伝票日付 & "#));"
   
    '接続
    Set cn = CurrentProject.Connection
   
    '更新クエリを実行
    Set com.ActiveConnection = cn
    com.CommandText = mySQL
    com.Execute
    
    'フォームの再クエリ
    Me.Requery
    '取得した位置を元に戻す
    Me.Bookmark = varBM
    If Me.NewRecord Then
     DoCmd.GoToRecord , , acNext
    End If
End Sub
・ツリー全体表示

【4455】Re:必須項目に対する入力チェックの仕組み
質問  牛乳  - 05/2/23(水) 16:43 -

引用なし
パスワード
   返事が遅くなり申し訳ありませんでした。
説明に言葉が足りませんでした。

登録ボタンを押すと1〜5の項目をチェックして、未入力分をまとめてメッセージを
出るようにしたいです。
例えば、項目1と4と5が未入力であれば、
「項目1・項目4・項目5が未入力です」というメッセージを表示。
OKボタンを押すと、未入力の項目の先頭へカーソルを移動する

下記の様な文にしているのですが、項目1〜5全てを入力しないで登録ボタンを
クリックすると、メッセージは「項目1,,,,,を入力してください」
と表示されています。

Function Entrychk() As Integer

Dim CHECK1 As String
Dim CHECK2 As String
Dim CHECK3 As String
Dim CHECK4 As String
Dim CHECK5 As String
Dim msg As String


Entrychk = 0
CHECK1 = ""
CHECK2 = ""
CHECK3 = ""
CHECK4 = ""
CHECK5 = ""

If IsNull(Form_登録フォーム.項目1) = True Then
  Entrychk = 1
  CHECK1 = "項目1"
Else
If IsNull(Form_登録フォーム.項目2) = True Then
  Entrychk = 1
  CHECK2 = "項目2"
  Else
If IsNull(Form_登録フォーム.項目3) = True Then
  Entrychk = 1
  CHECK3 = "項目3"
 Else
If IsNull(Form_登録フォーム.項目4) = True Then
  Entrychk = 1
  CHECK4 = "項目4"
  Else
If IsNull(Form_登録フォーム.項目5) = True Then
  Entrychk = 1
  CHECK5 = "項目5"
  End If
End If
End If
End If
End If

 msg = CHECK1 & "," & CHECK2 & "," & CHECK3 & "," & CHECK4 & "," & CHECK5

If Entrychk = 1 Then
  MsgBox msg & "を入力してください。", vbCritical, "警告"
Else
  Entrychk = 0
End If

End Function
・ツリー全体表示

【4454】Re:SQL更新のWHERE句
お礼  nssnkg  - 05/2/23(水) 16:32 -

引用なし
パスワード
   クロさん、本当に有難うございました。さっそく試しました。
データーの競合・・は表示されますがテーブルを開くと
レコードは更新してました。エラー表示は無視してもかまいません
でしょうか。もしそうならエラー表示を回避する方法はありますか?
それと、更新後にレコードがとんでもない日付の位置まで(たぶん
最初ごろのレコード)飛んで表示したりします。更新した位置で
フォームに表示してあるレコードを保持する方法はありますか?
たびたびお手数を掛けますが宜しくご指導お願いします。
・ツリー全体表示

【4453】Re:SQL更新のWHERE句
回答  クロ  - 05/2/23(水) 14:57 -

引用なし
パスワード
   ADOは不得手なので...

>Private Sub コマンド102_Click()
>  Dim mySQL As String  'SQLステートメント
>  Dim cn As New ADODB.Connection
>  Dim com As New ADODB.Command
>  
>     '更新クエリを作成
>    mySQL = "update 受注伝票 set 集計月 = #" & 伝票日付 & "# " _
>       & "WHERE ((顧客コード = " & 顧客コード & ") and (伝票日付 Between #" & Me!date2 & "# And #" & Me!伝票日付 & "#));"
>   
>    '接続
>    Set cn = CurrentProject.Connection
>   
>    '更新クエリを実行
    Set com.ActiveConnection = cn

     ↑ここかな

>    com.CommandText = mySQL
>    com.Execute
>    
>    'フォームの再クエリ
>    Me.Requery
>End Sub
・ツリー全体表示

【4452】Re:SQL更新のWHERE句
質問  nssnkg  - 05/2/23(水) 12:23 -

引用なし
パスワード
    クロさん 先程は大変有難うございました!本当にど素人の私にはVBAは敷居が高すぎです。しかしお陰様で2日越しの悩みが晴れました。
 ところが他で応用を利かせようとしたらまた問題が発生しました。。トホ、、
フォームから更新させようとすると ”データーの競合”で”このレコードは他の
ユーザーによって更新されています”というメッセージが出てしまいます。
フォームのレコードソースは 顧客マスター、受注伝票、のクエリです。受注明細っていうサブフォームもくっついてます。
良い方法があれば是非ご指導願います。お手間を取らせて申し訳ありません。

Private Sub コマンド102_Click()
  Dim mySQL As String  'SQLステートメント
  Dim cn As New ADODB.Connection
  Dim com As New ADODB.Command
  
     '更新クエリを作成
    mySQL = "update 受注伝票 set 集計月 = #" & 伝票日付 & "# " _
       & "WHERE ((顧客コード = " & 顧客コード & ") and (伝票日付 Between #" & Me!date2 & "# And #" & Me!伝票日付 & "#));"
   
    '接続
    Set cn = CurrentProject.Connection
   
    '更新クエリを実行
    com.ActiveConnection = cn
    com.CommandText = mySQL
    com.Execute
    
    'フォームの再クエリ
    Me.Requery
End Sub
・ツリー全体表示

【4451】Re:SQL更新のWHERE句
回答  クロ  - 05/2/23(水) 8:32 -

引用なし
パスワード
   mySQL = "update T_商品 set 商品グループ = '" & Me!txtB & "' " _
       & "WHERE 日付 BETWEEN #" & Me!dateA & "# AND #" & Me!dateB & "#;"

かな?
※dateAとdateBともに日付書式で入力しているとして...
・ツリー全体表示

【4450】SQL更新のWHERE句
質問  nssnk  - 05/2/22(火) 23:59 -

引用なし
パスワード
   更新クエリを作成してWHERE句の書き方が分かりません。悩んでます。
どなたか教えて頂けないでしょうか。
Me!txtB(テキスト型) Me!dateA(日付) Me!dateB(日付) は
フォームのテキストボックスから入力できるようにしたいのですが・・


'テキストボックスに入力した値を使って抽出したレコードを更新

Private Sub cmd更新_Click()
  Dim mySQL As String    'SQLステートメント
  Dim cn As New ADODB.Connection
  Dim com As New ADODB.Command
  
  
    '更新クエリを作成
    mySQL = "update T_商品 set 商品グループ = '" & Me!txtB & "' " _
       & "WHERE 日付 BETWEEN Me!dateA AND Me!dateB "
   
    '接続
    Set cn = CurrentProject.Connection
   
    '更新クエリを実行
    com.ActiveConnection = cn
    com.CommandText = mySQL
    com.Execute
    
    'フォームの再クエリ
    Me.Requery
   

End Sub
・ツリー全体表示

【4449】改めてお礼申します。
発言  EBI E-MAIL  - 05/2/22(火) 20:47 -

引用なし
パスワード
   ご注意いただきましたとおり、On Error GoTo でやることにしました。
実は、家でやっていたときは気がつかなかったのですが、会社のマシンへこのコードを書いた時に、間違いに気がつかずに実行していたのです。どうやってもExcelへエクスポートが出来ませんでした。
言われたとおり、On Error Goto にしてみると、「オブジェクトをサポートしていません」 と、エラーが出ました。
原因は CopyFromRecordset rs 
         ↓
        Form
になっていました。これだけのことでした。
改めてお礼申します。
・ツリー全体表示

【4448】Access2003でのストアドプロシージャへの...
質問  えいぞー  - 05/2/22(火) 18:26 -

引用なし
パスワード
   こんにちは。
初めて投稿させていただきます。
皆様のお力をお借りできればと思います。

Access2003(ADP)にて、以下のように引数有りのストアドプロシージャで
求めた値をExcelに出力したいのですが、どうしても出来ず、困っております。
Access2000では出力できたのですが。。。。

DoCmd.OutputTo acOutputStoredProcedure, "EXEC [ストアド名] '引数'", acFormatXLS

です。エラーメッセージも何も表示されず、正常終了?してしまいます。
何か調べる方法や、別な方法などありますでしょうか?
宜しくお願いします。
・ツリー全体表示

【4447】Re:レコード抽出について
回答  クロ  - 05/2/22(火) 16:24 -

引用なし
パスワード
   コンボボックス(仮称cmbA)のプロパティで
値集合タイプ:値リスト
値集合ソース:"1〜5";1;"6〜10";2;"11〜15";3
列数:2
列幅は適宜に変更

既にフォームのレコードソースとなるテーブル/クエリには
1〜3の値が数値型でフィールドA(仮称)に入っているものとします。

抽出ボタン(コマンドボタン)のクリック時のイベントにコード(イベント
プロシージャ)で

Me.Filter = "[フィールドA]=" & Me.cmbA.Column(1)
Me.FilterOn = True

でどうでしょうか?
・ツリー全体表示

【4446】Re:テーブルのデータ型について
回答  クロ  - 05/2/22(火) 16:14 -

引用なし
パスワード
   長整数型    -2,147,483,648 〜 2,147,483,647
は可能かと思います。
※小数点以下は設定しても表示しないですよ。

テーブルのフィールドサイズ欄でF1キーでヘルプを
見てください。
・ツリー全体表示

【4445】レコード抽出について
質問  たくぽ  - 05/2/22(火) 16:05 -

引用なし
パスワード
   すみません、よくわからないので、以下のご回答お願いします。

例えば。。。

1〜5   を 1
6〜10  を 2
11〜15 を 3 のように、範囲でコード値を振っています。

で、フォーム上で、コンボボックスから「1〜5」「6〜10」「11〜15」のように
選択し、抽出ボタンを押下でその範囲内の値をフォームに表示したいのですが、その場合、どのようにしたらいいのかさっぱり分かりません。

初心者申し訳ないのですが、教えてください。
・ツリー全体表示

【4444】テーブルのデータ型について
質問  もも  - 05/2/22(火) 15:49 -

引用なし
パスワード
   こんにちは。
テーブルのデータ型を数値の長整数型に設定していますが、9桁〜数値が入力できません。
回避法を教えてください。
宜しくお願いします。
・ツリー全体表示

【4443】Re:フォームについて教えてください。
回答  クロ  - 05/2/22(火) 13:53 -

引用なし
パスワード
   フォームの開く時のイベントに
Me.Filter = "[適当なフィールド名]=''"
Me.FilterOn = True
といるとか?
・ツリー全体表示

【4442】フォームについて教えてください。
質問  クポ  - 05/2/22(火) 13:17 -

引用なし
パスワード
   超〜、初心者です。

フォームで4つくらいのテキストボックスやコンボボックスの値をパラメータ
として抽出し、同じフォームの詳細のところにクエリの結果を表示しています。

詳細のところは、クエリに連結しているので、一番最初はクエリの結果全件が
表示されてしまいます。

一番最初は詳細のところには、何も表示したくないのですが、それはできませんか?
・ツリー全体表示

【4441】Re:ExcelへのExportについて
お礼  SakaiII  - 05/2/21(月) 21:11 -

引用なし
パスワード
   YU-TANGさん
 回答をいただき、ありがとうございます。
 確かに「DoCmd.TransferSpreadsheet acExport」でクエリをエクスポートしま
した。
 最初、理解できなかったのは二回目の出力のファイル名は一回目と同様です
から、二回目の出力によって、当然一回目のファイル自体はなくなり、同時に
編集した列幅・行間もなくなります。今回のレッスンを通して、内部処理の仕組み
について、分かりました。
 本当に感謝しています。
・ツリー全体表示

【4440】Re:ExcelへのExportについて
回答  YU-TANG WEB  - 05/2/21(月) 20:36 -

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

> 質問:3.の動作は同じファイル名(ABC.xls)で出力されるから、
> つまり前回のABC.xlsに対してかぶせる形になると思います。
> なぜ一回目調整した情報はそのまま残りますか?

たぶん TransferSpreadsheet の話かと想像しますが。
とりあえず、そういう前提と仮定して。

TransferSpreadsheet は、ファイルは別に置き換えませんので、
正常動作です。

文面から察するに、内部的に

1. 既存の Excel シートを削除
2. 新たに Excel シートを作成

…という流れになっているものと誤解されているような気がしますが。
実際には 2 度目以降の出力では、

1. 前回の出力範囲をクリア
2. 前回の出力範囲にデータを出力

…という流れです。
シート自体は入れ換えも何も起きませんし、書式も手付かずです。
TransferSpreadsheet は、あくまでデータ(のみ)の出力なので。

TransferSpreadsheet の話ではないようでしたら、何の話か明示
されると適切なレスが付きやすいと思います。

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

【4439】ExcelへのExportについて
質問  SakaiII  - 05/2/21(月) 10:08 -

引用なし
パスワード
   お世話になります。
 クエリ_AをExcelへエクスポートするとき、奇妙な現象が発生しています。なかなか
理解できなくて、ここに投稿しました。 
操作の手順
1.クエリ_AをマクロのエクスポートでEXCEL(ABC.xls)へ出力しました。
2.EXCELの環境にて出力されたABC.xlsを開き、列幅・行間を調整し、上書き保存した。
3.上記の1.を再度実行しました。
4.再度出力されたABC.xlsを開いたら、2.で調整した列幅・行間はそのままです。
質問:3.の動作は同じファイル名(ABC.xls)で出力されるから、つまり前回のABC.xls
に対してかぶせる形になると思います。なぜ一回目調整した情報はそのまま残りますか?
教えていただきたいです。よろしくお願いします。
・ツリー全体表示

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