2017-01-13 3 views
1

、およびプログラミングといくつかの経験があるかどうかを確認するために、Excelでバーコードを読み取ります。私はアプリケーションのためのVBAの経験ちょっぴりを持って、私はエクセル2016で働いている試合

私はバーコードスキャナーから入力を受け取り、スプレッドシートの列と比較しようとしています。一致するものがあれば、いくつかの文字と日付スタンプをいくつかのセルに入れます(イニシャルと日付は別々に列)。

This questionは非常によく似たユースケースを有し、サンプルコードを含みます。私はコードサンプルを試して、動作させることができません。最初は、配列に問題がありました。最終的に私はあなたが「C2:C8」をやることができたと考えていましたが、それはどこにも書かれていませんが(おそらく、基本コース/クラスの一部ですが、そこMatch()のために定義されたサブまたは関数についてのエラーがあったので、私はsecurity centerSolverアドインが有効。それはそれを修正していないので、一致がVBA関数ではないと説明したforum postが見つかりました。

は今、私は「WorksheetFunctionクラスのマッチプロパティを取得できません実行時エラー1004」ボタンをクリックした後、エラーを取得し、デバッグをクリックすると、同じ行に私を取ります。ここで

は私が巻き上げているコードです:

Private Sub CommandButton1_Click() 

code = InputBox("Please scan a barcode and hit enter if you need to") 
matchedCell = Application.WorksheetFunction.Match(code, Range("C2:C8"), 0) 
matchedCell.Offset(0, 2) = Now 

End Sub 

私は、これは簡単なものだったし、すでに解決思ったので、これは非常にイライラさせられます。問題を解決してソフトウェアを開発する代わりに、私は構文や環境と戦っているようだ。私は間違って何をしていますか?

+0

'Match'は行番号を返します(一致したとき)、' matchedCell'を 'Range'と設定することはできません。 Range( "C2:C8")のどのセルにあなたの 'InputBox'と一致するものがあるかを調べようとしていますか?そのセルの右側の2列にあるセルに現在の時間を挿入しますか? –

+0

"matchedcell ="で始まる最初の行の前に "Debug.print code"を追加すると、範囲内の値になりますか?あなたはまた、完全に範囲、すなわちワークブック(「mybook.xlsx」)を修飾する必要がありますシート(「シート1」)の範囲(「C2:C8を」)。。 – User632716

答えて

2

二つの可能性:

Applicationオブジェクト

  • 使用Match()関数と(値が見つからない場合)エラーをチェックするバリアント変数にその戻り値を格納

    Private Sub CommandButton1_Click() 
        Dim code As Variant 
        Dim matchedCell As Variant 
    
        code = InputBox("Please scan a barcode and hit enter if you need to") 
        matchedCell = Application.Match(code, Range("C2:C8"), 0) 
        If Not IsError(matchedCell) Then Range("C2:C8").Cells(matchedCell, 1).Offset(0, 2).Value = Now 
    End Sub 
    
  • Rangeオブジェクトの
  • 使用Find()機能

    Private Sub CommandButton1_Click() 
        Dim code As Variant 
        Dim matchedCell As Range 
    
        code = InputBox("Please scan a barcode and hit enter if you need to") 
        Set matchedCell = Range("C2:C8").Find(what:=code, LookIn:=xlValues, lookat:=xlWhole, MatchCase:=True) 
        If Not matchedCell Is Nothing Then matchedCell.Offset(0, 2).Value = Now 
    End Sub 
    
+0

はそれに私を打つ、高速なキーボード:) –

+0

@ShaiRadoに、時には(まあ、何度も)それは反対です! – user3598756

+0

Match()を動作させることができませんでした。おそらく "#N/A"のエラー2402が返されています。コードの印刷ステートメント(現在はscannedInputに名前変更されました)は正しかったですし、matchedCellは私にエラーを返しました。私はmatchedCellの変数型をdoubleに変更しようとしましたが、それは役に立たなかった。 2番目のコードサンプルは修正せずにすぐに動作しました。ありがとう!それはうまくいけば私を悩まされてしまいました、そして、今私はいくつかの仕事をすることができます! – YetAnotherRandomUser

0

Application.Matchを使用し、成功したMatchがある場合にのみ、あなたのコードを実行し続けます。

Option Explicit 

Private Sub CommandButton1_Click() 

Dim MatchRow As Variant 
Dim code As Variant 
Dim matchedCell As Range 

code = InputBox("Please scan a barcode and hit enter if you need to") 

' verify that there is a successful match in the searched range 
If Not IsError(Application.Match(code, Range("C2:C8"), 0)) Then 
    MatchRow = Application.Match(code, Range("C2:C8"), 0) '<-- get the row number 
    Set matchedCell = Range("C" & MatchRow + 1) '<-- set the range (add 1 row since you are starting from row 2) 
    matchedCell.Offset(0, 2).Value = Now 

    'option 2: without setting the range 
    Range("C" & MatchRow).Offset(1, 2).Value = Now 
End If 

End Sub 
関連する問題