Как решить переменную объекта ошибки или с переменной блока, не установленной? - PullRequest
0 голосов
/ 11 февраля 2019

Код приведен ниже.

Ошибка времени выполнения 91 объектная переменная или переменная блока не установлена.

Иногда он работает идеально, но иногда показывает данную ошибку,

Option Explict 

Public wb As Workbook
Private rowMsg As Integer

Public Sub showMsg(pMsg As String, Optional pColorError As Boolean,
     Optional pColorSuccessful As Boolean)

    With wb.sheets("Setup")
        .Rows(rowMsg).HorizontalAlignment = xlLeft
        .Rows(rowMsg).VerticalAlignment = xlBottom
        .Rows(rowMsg).WrapText = True
        .Rows(rowMsg).Orientation = 0
        .Rows(rowMsg).AddIndent = False
        .Rows(rowMsg).IndentLevel = 0
        .Rows(rowMsg).ShrinkToFit = False
        .Rows(rowMsg).ReadingOrder = xlContext
        .Rows(rowMsg).MergeCells = True

        .Cells(rowMsg, 1).Value = Now & Space(3) & pMsg

        If pColorSuccessful Then
            .Cells(rowMsg, 1).Interior.ColorIndex = 43
        End If
        If pColorError Then
            .Cells(rowMsg, 1).Interior.ColorIndex = 3
        End If
    End With

    rowMsg = rowMsg + 1
End Sub

Ответы [ 2 ]

0 голосов
/ 11 февраля 2019

В программе, которую вы перечисляете, есть только три объекта: wb, рабочий лист с именем «Setup» и ячейка, определенная Rowmsg.Чтобы получить ошибку в этом списке, один из этих трех не существует.Либо нет листа с именем «Setup», объект книги, на который указывает wb, не существует, или (и это наиболее похоже) переменная RowMsg содержит недопустимое значение для используемого вами использования.Предполагается, что вы используете Find для установки номера строки, и ошибка возникает, когда не удается найти результат.

Когда вы получаете ошибку, выберите debug и изучите строку, сообщающую об ошибке.Затем вы можете использовать «View, Call Stack» в редакторе vb, чтобы просмотреть вашу программу, чтобы увидеть, что не удалось правильно установить переменную

0 голосов
/ 11 февраля 2019

Возможно, проблема в том, что вы не инициализировали свои глобальные переменные:

Public wb As Workbook
Private rowMsg As Long '<-- needs to be long not integer.

Если вы в первый раз запускаете showMsg, wb равен Nothing, а rowMsg равен 0 (который не является допустимым номером строки, так как он начинается со строки = 1).

Поэтому проверьте, не инициализированы ли ваши переменные, прежде чем запускать на них какой-либо код.

Public Sub showMsg(pMsg As String, Optional pColorError As Boolean, Optional pColorSuccessful As Boolean)

    'test if global variables were initialized, if not do it.
    If wb Is Nothing Then 
        Set wb = ThisWorkbook
    End If

    If rowMsg = 0 Then rowMsg = 1

    'your code here …
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...