Ошибка VBA в Workbook_SheetChange: 458, тип автоматизации не поддерживается - PullRequest
0 голосов
/ 25 ноября 2018

Редактировать: я почти убежден, что это перенос из-за ошибки в Excel для Mac, задокументированный здесь

Сообщение об ошибке первоначально отображалось при нажатии раскрывающегося меню вОкно кода редактора VBA рабочего листа, как описано в ссылке выше.С тех пор не только начиналась ошибка, описанная ниже, но и другие попытки редактировать диапазон в определенной рабочей таблице приводили к тому же сообщению об ошибке.Даже что-то простое, например

Worksheets("Sheet2").Range("A1").Value = 3.14159

Что я сделал для решения проблемы:

  1. Создан новый лист
  2. Скопировано содержимое листа 2 на новый лист
  3. Скопировал фрагмент VBA в окно ThisWorkbook вместо окна нового листа.
  4. И это сработало - нет сообщения об ошибке 458

Спасибо QHarr за отзывы и исправления;Я включил и ваши предложения в код.

Оригинальный вопрос ниже

Я на Mac, пишу событие «Изменение листа рабочей книги».Он срабатывает корректно, но выдает ошибки в строке «DimservationRange As Range».Использование Excel 16.19 Вот ошибка:

Ошибка времени выполнения '458':

Переменная использует тип автоматизации, не поддерживаемый в Visual Basic

Вот код:

    Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
   With ThisWorkbook.Worksheets("Sheet2")
        Dim reservationRange As Range
        reservationRange = .Range("I16:N500")
            ' If change was made in Reservations section
            If Not Intersect(Target, reservationRange) Is Nothing Then
                Dim reservationRow As Integer
                reservationRow = Target.Row
                ' If weekly budget is less than 0
                If .Range("O" & reservationRow).Value < 0 Then
                    ' Output Message and undo
                    MsgBox ("Error")
                    Application.Undo
                End If
            End If
   End With
End Sub

1 Ответ

0 голосов
/ 25 ноября 2018

Вот несколько вещей, которые я хочу отметить:

  1. Вам необходимо ключевое слово Set при назначении объекта Range

    SetservationRange = .Range ("I16: N500 ")

  2. reservationRow должен быть объявлен как Long, чтобы избежать потенциального переполнения, так как количество строк в листе может быть больше, чем Integer Могу ли я удержать (я верю такжедля Mac, но дайте мне знать)

  3. Вам не нужно () около MsgBox ("Error")

  4. Что произойдет, если Targetбольше чем один ряд?Вы получите только первую ячейку в ряду диапазона.

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