teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

補足の追加

2017/06/26 09:03

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -16,7 +16,7 @@
16
16
 
17
17
  Sub PlaySound()
18
18
  Dim SoundFile As String, rc As Long
19
- SoundFile = "C:\Users\PC\Music\iTunes\iTunes Media\abc.mp3" '多分有るかと?
19
+ SoundFile = "C:\Users\PC\Music\iTunes\iTunes Media\abc.mp3"
20
20
 
21
21
  If Dir(SoundFile) = "" Then
22
22
  MsgBox SoundFile & vbCrLf & "がありません。", vbExclamation
@@ -86,4 +86,38 @@
86
86
 
87
87
  [JANコードのチェックデジットを計算する関数 ~ Access VBA自作関数 - Office Tanabe](http://www.mtanabe.com/tips.php?tips_id=1)
88
88
 
89
- バーコードリーダーでの読み取りエラーや、うっかりユーザーが編集してしまったりなども考慮すると、Worksheet_Change でデータが更新されたときに、チェックデジットを使って正しいバーコードかどうかをチェックして、正しくない場合に、警告音をだすというような仕様にするのがいいのではないでしょうか。
89
+ バーコードリーダーでの読み取りエラーや、うっかりユーザーが編集してしまったりなども考慮すると、Worksheet_Change でデータが更新されたときに、チェックデジットを使って正しいバーコードかどうかをチェックして、正しくない場合に、警告音をだすというような仕様にするのがいいのではないでしょうか。
90
+
91
+ 補足説明
92
+ --
93
+
94
+ 詳細な仕様が判明したようでので、それに合わせて補足です。
95
+
96
+ 判明している仕様。
97
+ - 「C4セル」にバーコードリーダーからJANコードを読み込む。
98
+ - 毎回入力するセルは「C4」となる。
99
+ - 「C4」をキーワードにして「D4」セルにVLOOKUPで表品名を表示している。
100
+
101
+ MP3再生のコードは、Windows APIの関数を参照してVBAから呼び出しているだけです。
102
+ 参照するコードは理解するのは難しいかもしれませんが、そういう魔法の呪文だと思って、コピーして使えばいいでしょう。そのままコピーして標準モジュールに貼り付けてください。
103
+
104
+ 今回の仕様なら、ワークシートのChangeイベントを使う方法でも問題ないでしょう。
105
+
106
+ その場合のコード例。
107
+ ```
108
+ Private Sub Worksheet_Change(ByVal Target As Range)
109
+ If Target.Address = "$C$4" And ActiveCell.Address = "$C$5" Then
110
+ If Not IsError(Range("D4").Value) Then
111
+ PlaySound 'MP3 再生処理
112
+ Range("C4").Select
113
+ End If
114
+ End If
115
+ End Sub
116
+ ```
117
+
118
+ コピー先は『「シート名」のあるタブ内で右クリックして、出てきたメニューの「コードの表示」をクリック。』して表示された場所です。
119
+
120
+ Enterキーの判定は、Changeイベントの発生したセル(Target.Address)、移動先のセル(ActiveCell.Address)で判定しています。
121
+ さらに、「D4」セルにエラーなく商品名が表示されているかどうか、で読み込まれたバーコードが正しいかどうか判断しています。
122
+
123
+ 完全な判定ではないですが、通常の運用なら問題はないと思われます。

1

書式の改善

2017/06/26 09:03

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -45,11 +45,13 @@
45
45
 
46
46
  エンターキーで何らかの処理をさせるには、他の方の回答にもありますワークシートのChangeイベントが簡単でしょう。
47
47
 
48
+ ```
48
49
  Private Sub Worksheet_Change(ByVal Target As Range)
49
50
  If Target.Address = "$C$4" Then
50
51
  PlaySound 'MP3 再生処理
51
52
  End If
52
53
  End Sub
54
+ ```
53
55
 
54
56
  ただし、Enterキー以外でも反応してしまいます。Deleteキーや貼り付けなどの操作でワークシートのデータが変更されたときに反応します。
55
57