Ошибка 430 Class не поддерживает автоматизацию или не поддерживает ожидаемый интерфейс? - PullRequest
0 голосов
/ 11 декабря 2018

У меня есть книга, которая при открытии не работает один из моих макросов.Если я захожу в редактор и пытаюсь перекомпилировать мой код, я получаю

Ошибка 430 Класс не поддерживает автоматизацию или не поддерживает ожидаемый интерфейс

в этой строкекода:

If Sheets("sheet1").Range("myRange").Cells(1,1) = 1 Then
    Sheets("mysheet").Move before:=Sheets("other sheet") **<<<-- ERROR HERE**
    If Sheets("mysheet (1)").Range("DA1").Value > 0 Then
        Dim n as long
        For n = 2 to Sheets("mysheet (1)").Range("DA1").Value + 1
            Sheets("mysheet (" & n & ")").Move before:=Sheets("other sheet")
        Next n
    End If
End If

1 Ответ

0 голосов
/ 11 декабря 2018

Этот однострочник делает слишком много вещей одновременно, что очень затрудняет правильную диагностику проблемы.

Начните с объявления переменных Worksheet, чтобы у вас был интерфейс с ранней привязкой, чтобы сделатьваш участник звонит против - учтите, что указание с ActiveWorkbook является предположением, которое я здесь делаю, что должно быть эквивалентно вашему неявно квалифицированному Sheets вызову:

Dim mySheet As Worksheet
Set mySheet = ActiveWorkbook.Worksheets("mySheet")

Dim otherSheet As Worksheet
Set otherSheet = ActiveWorkbook.Worksheets("other sheet")

mySheet.Move Before:=otherSheet

Если ваш код попадает в.Move вызов метода, он должен "просто работать".Если он взорвался до этого, проверьте:

  • Правильно ли написано имя листа в строковом литерале
  • Что родительской рабочей книгой этого листа является ActiveWorkbook

Если все эти листы существуют во время компиляции в ThisWorkbook (рабочая книга, содержащая ваш проект VBA), тогда вам не нужны никакие переменные - они у вас уже есть.

Посмотритев Project Explorer (Ctrl + R) все модули листов имеют два имени.В скобках указано свойство Name;перед ним - CodeName, который вы найдете в окне инструментов Properties (F4) в (Name).Измените его, например, на mySheet, и теперь идентификатор mySheet можно использовать в любом месте этого проекта VBA для ссылки на этот конкретный лист - независимо от того, что говорит его "имя вкладки".

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