2015-07-06 3 views
0

У меня возникли проблемы разрешающей этот вопрос оExcel VBA определяется приложение или объект определенных ошибок

application-defined or object-defined error 

Моих кодов ниже

Dim intX as integer 
Dim Uname As String 
Dim Pword As String 
Dim Epin As String 

intX = 9 
Uname = Cells(intX, 5) 

Do 
If Cells(intX, 4).Value > 0 Then 
    Uname = Cells(intX, 5) 
    Pword = Cells(intX, 6) 
    Epin = Cells(intX, 7) 
    Else 
    GoTo Skips 
    End If 

'Bunch of codes 

Skips: 
    intX = intX + 1 
Err_Clear: 
    If Err <> 0 Then 
    Err.Clear 
    Resume Next 
    End If 

Loop Until IsEmpty(Uname) 

Моей таблица в основном имеет столбец вход Infos и а столбец да не сообщается через 1 = да и 0 или нуль = нет системы, поэтому, если ячейки (intX, 4) имеют 1, он будет выполнять кучу кодов

Uname или Cells (intX, 5) имеет значение до конца (Или пустая ячейка)

код не работает отлично до последнего цикла (он завершает задачу, но вернуть приложение -определенные или объекта определенных ошибок, следовательно, код не будет работать после Loop До IsEmpty (Uname)

точки ошибок в

If Cells(intX, 4).Value > 0 Then 

Любая помощь, пожалуйста?

+0

Я подозреваю, что 'intX' (любопытное имя для' Long') выше, чем количество доступных строк. – Rory

+0

Каковы значения 'intX' и' Cells (intX, 4) 'при возникновении ошибки? Я подозреваю, что @Rory отвечает правильно, поскольку у вас нет верхней границы для проверки intX. –

+0

intX в момент ошибки 16, я сделал настройку и сделал intX обратно целым, я сделал это Long, потому что, когда он работает, он дает проблему переполнения и указывает на intX = intX + 1 – Crays

ответ

0

Хотя я не смог проверить этот код, я надеюсь, что он сможет работать без проблем.

Dim intX As Integer 
Dim Uname As String 
Dim Pword As String 
Dim Epin As String 

For intX = 9 To 1000000 
    If Trim(Sheet1.Cells(intX, 5).Value2) = vbNullString Then Exit Sub 
    If IsNumeric(Sheet1.Cells(intX, 4).Value2) Then 
     If Sheet1.Cells(intX, 4).Value2 > 0 Then 
      Uname = Sheet1.Cells(intX, 5).Value2 
      Pword = Sheet1.Cells(intX, 6).Value2 
      Epin = Sheet1.Cells(intX, 7).Value2 
     End If 
    Else 
     GoTo Skips 
    End If 

    'Bunch of codes 

Skips: 
Err_Clear: 
    If Err <> 0 Then 
     Err.Clear 
     Resume Next 
    End If 

Next lngrow 

Вот то, что я изменилась: - явное кодирование против неявного кодирования с использованием Sheet1. (или то, что когда-либо лист вы имеете в виде фронта, чтобы гарантировать, что Excel использует лист вы хотите его - явное кодирования снова используя .value2 в конце - перед проверкой .Cells(intX, 4).value2, если он находится выше нуля, я добавил еще один чек, если это на самом деле числовой - обмен бесконечный цикл в течение определенного одного - замена IsEmpty для сравнения с vbNullString в IsEmpty в файле справки должны используется только для проверки того, имеет ли переменная beee n инициализирован. Но ячейка на самом деле не является переменной.

Надеюсь, это помогло.

+0

Спасибо, узнал много здесь, но это не дало мне результаты, которые я хочу, он продолжал давать мне полную строку диапазона Cells (intX, 5), который он отказался от IsNumeric (Sheet1.Cells (intX, 4).Value2) Условие Также следующий intX я предполагаю – Crays

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