2016-06-22 2 views
1

Я получаю определенную или определенную объектами ошибку в моей строке Msgbox. У меня есть переменные InputBox, объявленные как String. Я попытался изменить листы (имя листа1) на фактическое имя листа, но с той же ошибкой. Я пробовал все, что знаю, я озадачен этой ошибкой. Любая помощь приветствуется.Ошибка Excel VBA на моей строке Msgbox

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

просто: палки слова Option Explicit в верхней части каждый модуль вы когда-либо видеть, и VBA откажется компилировать код где вы используете необъявленную переменную.

В этом случае, вы имеете в виду i1 и j1, которые оба содержат не-значение Empty, так как они незадекларированные и неинициализированным варианты.

Вот переменные, которые нужно объявить:

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

Без Option Explicit, VBA счастливо компилирует опечатка и принимает это как: «О, я никогда не видел этого парня, должно быть новая переменная!»

+0

Да! Лучшая практика! Хороший ответ amigo. (Забавный факт: вы можете использовать 'Dim myVar &' для 'Dim myVar as Long' и' Dim myString $ 'для' Dim myString as String'). – BruceWayne

+2

@BruceWayne yep. Это * типы подсказок *, унаследованные от древних диалектов VB - в [Rubberduck] (https://github.com/rubberduck-vba/Rubberduck) Я внедрил проверку, которая их обнаруживает, и «быстро исправить», который автоматически удаляет их везде, где они есть, и заменяет их в объявлениях явным типом =) –

+0

@bubs, пожалуйста, рассмотрите отметку галочки. – findwindow

Смежные вопросы