2017-02-17 2 views
-3

Ранее я задавал этот вопрос, но у меня была некоторая плохая обратная связь, так что я больше не могу задавать вопросы в переполнении стека, это я не знаю, задал ли я этот вопрос ненадлежащим образом? Пожалуйста помоги!! Если вы можете проголосовать за этот вопрос, это было бы потрясающе! Я очень благодарен за это. Ниже мой предыдущий вопрос.Не настоящая техническая проблема

Я создал пользовательскую форму с помощью Excel VBA, когда я дважды щелкните файл Excel и попробуйте запустить этот макрос, то он дал мне ошибку:

Тип dismatch показанный в всплывающем окне.

Имя форма MainForm и код в ThisWorkbook, как показано ниже:

Private Sub Workbook_Open()  
    ThisWorkbook.Application.Visible = False 
    MainForm.Show 
'MainForm is a Userform that former person created 
End Sub 

Я не знаю, что происходит не так с типом ... Как я могу это исправить?

+0

Запустите его в режиме отладки - шаг за шагом, чтобы увидеть ГДЕ, что на самом деле происходит ошибка. –

+0

Что такое ThisWorkbook.Application.Visible = False? Что вы пытаетесь достичь? –

+0

@Shai Rado скрывает все экземпляры excel, чтобы в итоге отображалась только пользовательская форма. –

ответ

-1

Я сам это понял, ошибка вызвана некоторым кешем (или старыми данными), оставшимся в форме. Я просто очищаю форму и снова открываю этот файл, и он работает правильно !!!

+0

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

1

Я считаю, что проблема может быть поднята, когда вы пытаетесь показать или скрыть пользовательскую форму. Я не могу получить ошибку для копирования в моем собственном коде, но я считаю, что это произошло раньше. Создание формы в качестве объекта может решить проблему:

Dim oForm as MainForm 
Set oForm = New MainForm 

oForm.Show 

Кроме того, я не знаю, почему MainForm уже будет открыта, когда вы открываете книгу, содержащую его (для еще заявление). Вам не нужно скрывать пользовательскую форму, если она не будет сохраняться между открытием и закрытием книги (это будет вопрос того, для чего вы используете код).

+1

Объявление «как объект» делает все последующие вызовы к нему поздними или разрешенными во время выполнения, что означает, что вы не получаете intellisense для '.Show', поэтому ваш код будет с удовольствием компилироваться, если вы наберете' .Snow' вместо этого ... Почему бы не объявить его «как MainForm»? –

+0

Это определенно было бы лучше. Я полностью забыл, что как только объект MainForm существует в рамках документа, он может использоваться как тип объекта. Я отредактировал код, чтобы исправить это. –

+0

FWIW Я думаю, что вопрос невозможен в его нынешнем виде - поскольку все, что мы знаем, может быть кодом в обработчике 'Activate' формы, который вызывает ошибку времени выполнения ... OP не говорит нам, где происходит ошибка, поэтому все, что мы можем сделать, это спекулировать. Я согласен с тем, что было бы (гораздо лучше) работать с новым экземпляром формы, а не с * экземпляром по умолчанию *, поэтому у вас есть надстройка для этого ... но я не думаю, что это изменит что угодно как особая проблема ОП. –

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