投稿

ラベル(ACCESS)が付いた投稿を表示しています

Translate

ACCESSでバーコードスキャンしたら自動でイベントを起こす方法

イメージ
ACCESSでバーコードスキャンをしたら自動でデータベースの登録や検索を行う方法 前回紹介したマクロに、追加する形で紹介しています。 前回:ACCESSでバーコードをスキャンして登録更新する簡単なサンプル バーコードリーダーの機能をまずは確認。 最近のバーコードリーダは、スキャンをした後に<TAB>ボタンのコードを自動で送信してくれるものが殆どですが、高機能なバーコードリーダ程、スキャン後の動作を細かく設定出来るが為、初期はスキャン後に追加のアクションがされていない物がある。 バーコードリーダの設定で、スキャン後に<TAB>ボタンや<Enter>ボタンのコードを細かく設定できる場合はこれを設定しておく。 バーコードスキャン後に<TAB>キーが送信される設定例 、入力ボックス側のイベントの[LostFocus](画像の箇所)に、ボタンを押した時の処理に飛ばすコードを埋め込むだけで、バーコードスキャン後に、自動で処理を行う事が出来ます。 Private Sub Bar1_LostFocus()                  Call Button1_Click End Sub

ACCESSでバーコードをスキャンして登録更新する簡単なサンプル

イメージ
ACCESSでバーコード値等をスキャンや入力して、テーブルに登録、検索、更新する方法。 テーブルの内容 Bar = バーコード値等 FillingDate = スキャンした日付 (登録ボタンを押した日付) フォーム テーブルのBar値に登録が無い場合、フォームに入力された値と、今日の日付を登録 フォームに入力された値を、テーブルのFillingDateから検索し、登録された日付を表示 フォームに入力された値を、テーブルのFillingDateから検索し、FillingDateにボタンが押された日付で更新 ソース aOption Compare Database '① Start ------------------------------------------------------------------- Private Sub Button1_Click()     If Bar1.Value = "" Or IsNull(Bar1.Value) Then         MsgBox "入力してください。"         Exit Sub     End If     Dim sql_con As New ADODB.Connection     Dim sql_rs As New ADODB.Recordset     Dim sql_cmd As New ADODB.Command     Dim sql_prm As New ADODB.Parameter               Set sql_con = CurrentProject.Connection     '既存チェック     Dim sql As String          sql = ""     sql = "SELECT COUNT(*) FROM [Data] WHERE Bar = :Bar1"     sql_cmd.CommandText = sql     Set sql_prm = sql_cmd.CreateParamete

ACCESSのフォームで、ヘッダーと明細フォーム(サブフォーム)をVBA無しで紐づける方法

イメージ
ACCESSビギナー向け・フォーム、サブフォームの紐づけ方法 ACCESSでフォームのヘッダーと明細を紐づける方法 データーベース初心者がACCESSの操作に慣れ始めたころ、次に直面するのが、複数のテーブルを使って、フォーム内でデータを紐づける方法になるだろう VBAプログラムのSQLで全解決する方法もあるけれど、折角アクセスを使っているので、ACCESSの機能で紐づける方法を説明 下記のような売上ヘッダーテーブル、明細テーブルがある前提で説明。 売上ヘッダー  売上明細 売上ヘッダーと明細は、売上番号、種別で紐づけられる前提で、最初に作成するフォームは、ヘッダー側で、売上ヘッダーと紐づくフォームを用意する。 テキストボックスは、ヘッダーと、明細が紐づいている事が分かりやすいように、売上番号と割り当てておく。 もう一つフォーム作成の画面を開き、もう一つのフォームは、売上明細テーブルと紐づけし、フォーム名を売上明細として保存する。 それぞれのテキストボックスは、明細の中から表示したい内容を割り当てる事になるが、今回は、売上番号が連動している事を分かりやすくする為に、敢えて売上明細にも売上番号のテキストボックスを用意している。 また、売上明細の[既定のビュー]は、帳票フォームとしておいた方が、今回の売上入力画面で見やすい画面になるだろう。 次に、最初に作成したフォーム側で、サブフォームのコントロールを配置する。 サブフォームウィザードでは、テーブルからでも、フォームからでもどちらからでも紐づけしたい子のデータを選択しても良いが、今回は、売上明細を先に保存して作ったので、フォームから売上明細フォームを選択。 サブフォームのリンク親フィールド編集画面を表示し、親フィールドと子フィールドにそれぞれ、売上番号、種別と割り当てを行う。 すると、売上ヘッダーのフォームを一度閉じ、開きなおすと売上入力画面が表示され、最初のレコードは、売上番号1と、次のレコードボタンを押すと、売上番号2と紐づけられている事が確認出来る。 こうすれば、わざわざ、VBAでヘッダーと明細をデータを取得するSQLを作ってデータを取得して表示するとかしなくても、簡単に紐づけが可能である。 実際は、商品コー

ACCESSのVBAを実行するとACCESSが強制終了する事がある

イメージ
ACCESSのVBAを実行すると、ACCESSが強制終了する事がある ACCESSのVBAを実行すると強制終了 DoCmd.OpenQuery を疑え ACCESSのVBAを実行するといくつかACCESS自体が突然強制終了する事がある。 基本的にエラーがあれば、デバッグするか、終了するかを確認するダイアログが表示される筈だが、中にはエラーも表示されず、ACCESS自体が突然強制終了する事があるケースについて確認個所を紹介。 ACCESSが強制終了する事があるVBAのマクロの組み方は、Win APIを利用する時など起こりやすいけれど、中には、複雑なVBAのコードを組んでいないにも関わらずエラーも出ず、音も無く強制終了するパターンがある。 まずは、その個所は大抵の場合 DoCmd.OpenQuery で、ACCESSに作成しているクエリーを実行する時である場合がある為、そこにブレークポイントを張って、強制終了している箇所がそこであるか確認を行う。 強制終了している箇所が、  DoCmd.OpenQuery  だった場合は、クエリーの中身を確認する。 ACCESSのクエリーも、EXCELみたいな関数が使えるのだが、特に InStrRev関数とMID関数を使っている 場合に起きやすい。 もしも、InStrRev関数の検索文字に記号のような物を利用している場合には(㈱、№ 等の環境依存文字)、これを違うものに変更してみて実行してみよう もう一つは、InStrRev関数とMID関数の組み合わせで、InStrRev関数で検索した文字位置から、 MID関数で指定した文字だけ取得するような計算ロジックを入れたりしている場合 、InStrRevで検索対象にヒットしない、つまり 成立しない偽のデータが存在していないか確認 しよう。 その場合、クエリー側を修正するか、データ側を修正すると改善する場合がある。 こういった場合は、 大抵の場合、クエリーの設計に問題があると考えるのが適切なので、そもそも成立せず、関数エラーになるような組み方を改善させる と、ACCESSの強制終了が無くなる場合がある。

ACCESSのVBAでリストビュー(ListView)を使う為の設定 | Office365

イメージ
ACCESSでListView(リストビュー)コントロールを使う   標準のコントロールにはListView(リストビュー)は無い ACCESSでフォームをデザインする場合には、リストビュー(ListView)に変わる、表型のフォームをサブフォームとして使うことで賄えてしまう為、わざわざListViewを利用する機会も少ないのだけれども、ListViewでデザインする必要がある場合には、最初にコントロールの参照設定が必要である。 ACCESSのリボン.コントロールから、上図のようなボタンを押下する。 ACTIVEXコントロールを選択する。 参照設定から[Microsoft ListView Control, version 6.0]を選択すると、フォームのデザイン画面にコントロールが貼り付けされる。 VBAでリストビューを使う時は、注意が必要だ。 インテリセンスを使ってコーディングをする時代だが、捨て去られるVBA(VB6系)プログラムのリストビューは、インテリセンスに候補が表示されないメソッドが殆どだ。 コードのサンプル       With Me!ListView                  .ColumnHeaders.Clear         .ListItems.Clear         .View = lvwReport         .FullRowSelect = True         .GridLines = True                                    With .ColumnHeaders             .Add , , "商品コード"             .Add , , "商品名"             .Add , , "在庫数"         End With              .ColumnHeaders(2).Width = 3000          Dim itm As ListItem          Set itm = ListView.ListItems.Add(, , "1000000")     it

ACCESSA-VBA | DLookupでテーブルから特定の値を取得する方法

イメージ
ACCESSのDLookup関数でテーブルから特定の値を取得する方法 1.DLookup関数でテーブルやクエリ内を検索して値を取得する方法 概要 DLookup関数は、ACCESS固有の関数で、テーブルやクエリーからデータを検索して取得する為の関数。 ExcelにもLookup関数があるが、使い方が違うだけで機能自体はほぼ同じで、検索対象から検索文字にヒットした検索結果を取得出来る。 ExcelのLookupと違うところは、検索条件がもう少し細かく指定出来る。 メリット・デメリット メリット SQLを書かなくても簡単にデータが取得できる。 テーブルからだけじゃなく、もう少し条件を絞ったクエリーからもデータが取得できる。 完全一致だけじゃなく、あいまい検索も可能 デメリット DLookupは、ACCESS専用の関数である為、EXCELのVBAでもコードを再利用したい場合は、EXCELのマクロでも利用できるように書き直す必要がある。 使い方 Private Sub btnSearch_Click() Dim CommodityCode As String Dim CommodityName As String CommodityCode = DLookup("[商品コード]", "[商品マスター]", "[商品名] LIKE '*" & txtCommodity.Value & "*'") -1 CommodityName = DLookup("[商品名]", "[商品マスター]", "[商品コード] = '" & CommodityCode & "'") -2 Dim ITM As ListItem Set ITM = lvView.ListItems.Add(, , CommodityCod