2016-06-01 23 views
1

すべて、アプリケーション定義またはオブジェクト定義のエラー

私はエラーが発生します「アプリケーション定義またはオブジェクト定義のエラー」私が書かれているプラ​​イベートサブのために。以下のコードは次のとおりです。

Private Sub CommandButton3_Click() 

Dim MyLastRow As Long 
Dim i As Long 
Dim cellmatch 

'Find the last row 
MyLastRow = Cells(Rows.Count, "A").End(xlUp).Row 

'Define our comparison 
cellmatch = Application.Match(Cells(i, "A").Value, Range(Cells(i, "C")).Value, 0) 

'Compare Raw Data cell to Stock column and find a match 
For i = 2 To MyLastRow 
    If IsError(cellmatch) Then 
     Cells(i, 2) = "Not in Stock" 
    Else 
     Cells(i, 2) = "-" 
    End If 
Next i 

End Sub 

が、私はまた、セルまたは範囲にポイントをしようとしたワークシート

Application.WorksheetFuncion.Match..... 

を指定して、私たち、このようなフォーラムで見つかったいくつかのことを試してみましたような:

Range(.Cells(i,"C")).... 

または .Match(.Cells(I、 "A"))...

しかし、私はトンを得続けます彼は同じエラー。これはすべて同じシート上で起こっていて、私はコピーのようなすてきなことをしようとはしていません。私は単にマッチが見つからないかどうかを尋ねるだけで、そのようにラベル付けし、そうでなければダッシュでラベル付けします(分かりやすくするためにこのようにします)。私はそれが非常にシンプルなものだと確信していますが、私はVBAでコーディングするのが初めてです。どんな助けも大歓迎です。

ありがとうございます!

+2

あなた細胞マッチラインは、あなたのループではありませんが、 'i'を使用していますか? – micstr

+0

また、あなたのマッチ関数はあるセルを別のセルと比較しているだけですが、セルではなくカラムをチェックしているように見えます... –

+0

対応する行をこの〜cellmatch = Applicationに変更するとエラーにならない場合があります。一致(セル(i、 "A")。値、ワークシート( "Sheet1")。列(3)、0)〜。私は@Macro Manもあなたのコーディングで同じ欠点を指摘していると思います。 – skkakkar

答えて

1

コードでは、このコード行を変更する必要があります。

cellmatch = Application.Match(Cells(i, "A").Value, Range(Cells(i, "C")).Value, 0) 

EDIT

'Adjust Sheetname as per your requirements instead of "Sheet1" cellmatch = Application.Match(Cells(i, "A").Value, Worksheets("Sheet1").Columns(3), 0) 

TO

主な問題は、次のコードをあなたのプログラムに来ています。

Range(Cells(i, "C")).Value 

我々はMSDN Documenation Range.Cells Property (Excel)

を参照する場合は、使用の正しい構文のexammplesに言及しています。 典型的な例は、だから、スナップショットに示すように、それが正しい結果を与えるRange("myRange").Cells(n,1)
なく

Range(Cells(i, "C")) 

に変換

Set r = Range("myRange") 
For n = 1 To r.Rows.Count 
    If r.Cells(n, 1) = r.Cells(n + 1, 1) Then 
     MsgBox "Duplicate data in " & r.Cells(n + 1, 1).Address 
    End If 
Next n 

あります。

Snapshot showing results

+0

それは働いた!おかげさまで@skkakkar! – Rumble1701a

+0

@ Rumble1701aそれはあなたのために働いてうれしいです。 – skkakkar

0

私は、これはあなたが探しているものであると信じて:

Option Explicit 

Private Sub CommandButton3_Click() 

Dim lngRow As Long 
Dim rngFound As Range 
Dim lngLastRow As Long 
Dim shtCurrent As Worksheet 

'Set the sheet to work on 
Set shtCurrent = ThisWorkbook.Worksheets("Sheet1") 

With shtCurrent 
    'Find the last row 
    lngLastRow = .Cells(.Rows.Count, "A").End(xlUp).Row 
    'Exit if the last row is 2 or smaller 
    If lngLastRow <= 2 Then 
     MsgBox "Nothing to compare!" & Chr(10) & "Aborting..." 
     Exit Sub 
    End If 

    'Compare Raw Data cell to Stock column and find a match 
    For lngRow = 2 To lngLastRow 
     'Only compare if there is something in column A to compare 
     If .Cells(lngRow, "A").Value2 <> vbNullString Then 
      'This is the actual MATCH/FIND 
      Set rngFound = .Range("C:C").Find(What:=.Cells(lngRow, "A").Value2, LookIn:=xlValues, LookAt:=xlWhole) 
      'Evaluate the result of the FIND = rngFound 
      If rngFound Is Nothing Then 
       .Cells(lngRow, 2).Value2 = "Not in Stock"       'not found 
      Else 
       .Cells(lngRow, 2).Value2 = "In stock in row " & rngFound.Row  'found 
      End If 
     End If 
    Next lngRow 
End With 

End Sub 

は、あなたが持っている問題/質問なら、私に教えてください。

+0

Ralphさん、ありがとうございました。彼らが働いていました! – Rumble1701a

関連する問題