2016-06-22 6 views
1

Msgbox行にアプリケーション定義またはオブジェクト定義のエラーが発生しました。私は両方のInputBox変数をStringとして宣言しています。シート(sheetname1)を実際のシート名に変更しようとしましたが、同じエラーが発生しました。私は知っているすべてを試しました、私はこのエラーに困惑しています。どんな助けもありがとうございます。Msgbox行のExcel VBAエラー

sheetname1 = Application.InputBox("Enter the name of your first sheet.") 
sheetname2 = Application.InputBox("Enter the name of your second sheet.") 
For i = 1 To 100 
    For j = 1 To 100 
     If Not Sheets(sheetname1).Cells(i, j).Value = Sheets(sheetname2).Cells(i, j).Value Then 
      Sheets(sheetname1).Select 
      Cells(i, j).Select 
      With Selection.Interior 
       .Pattern = xlSolid 
       .PatternColorIndex = xlAutomatic 
       .Color = 65535 
       .TintAndShade = 0 
       .PatternTintAndShade = 0 
      End With 
      ans = MsgBox("Cells " & i & "," & j & " do not match." & vbNewLine & "The value on " & sheetname1 & " is " & Sheets(sheetname1).Cells(i, j).Value & " and the value on " & sheetname2 & " is " & Sheets("sheetname2").Cells(i, j).Value, vbOKCancel + vbQuestion) 
      If ans = vbCancel Then Exit Sub 
      Else 
       GoTo skip1 
     End If 
skip1: 
    Next j 
Next i 
+4

'Cells(i1、j1)'とはどういう意味ですか?それがあなたの問題です。それはちょうど 'セル(i、j)'であるべきですか?または 'セル(i&1、j&1)'? – BruceWayne

+1

ありがとう@BruceWayne、あなたは素晴らしい目を持っています!それは、セル(i、j)であると考えられます。簡単な質問ですが、コメントに青色で強調表示されたコードタイプのテキストをどのように入力しますか? – Bubs

+1

'\' backticks \ '' –

答えて

3

@BruceWayne correctly identifiedは、宣言されていない変数を使用しています。 Option Explicitを使用してください。

私はそれを修正してくださいしてみましょう...

は常にシンプル

明示的なオプションを使用します。 のトップにあなたが表示されごとに単一のモジュールを言葉 Option Explicitスティック、およびVBAコードどこをコンパイルすることを拒否します宣言されていない変数を使用しています。この場合

、あなたは彼らが宣言されていないと初期化されていない変形しているので、両方は、非値Emptyを含んでいる、i1j1に言及しています。ここで

はあなたが宣言する必要がある変数です:

Dim i As Long 
Dim j As Long 
Dim ans As vbMsgBoxResult 
Dim sheetName1 As String 
Dim sheetName2 As String 

Option Explicitがなければ、VBAは喜んでタイプミスをコンパイルし、としてそれを取る「ああ、私はその男を見たことがない、新しい変数でなければなりません!」

+0

はい!ベストプラクティス!ニースはアミーゴに答える。 (面白い事実: 'Dim myVar&'には 'Dim myVar long'、' Dim myString $ 'は' Dim myString as String'として使用できます)。 – BruceWayne

+2

@ BruceWayne yep。これらはVBの古代の方言から継承された*タイプヒントです。[Rubberduck](https://github.com/rubberduck-vba/Rubberduck)で私はそれらを見つける検査を実装しました。明示的にtype =) –

+0

@bubsの宣言でそれらを置き換えます。チェックマークを付けることを検討してください。 – findwindow