2015-07-24 1 views
0

У меня есть sub, который работает, чтобы очистить значения из текстового поля userform, но я попытался преобразовать его в функцию, чтобы я мог использовать его с несколькими пользовательскими формами.VBA (excel) - Как я могу использовать текстовое поле UserForm?

Вот мой UserForm код (кнопка код команды)

Private Sub pdclear_Click() 
    Dim passform As UserForm 
    Set passform = NoteEntryForm1 

    Dim inputtext As TextBox 
    Set inputtext = frmBigInputBox 

Call clear(passform, inputtext) 
End Sub 

Вот моя функция

Function clear(passform As UserForm, inputbox As TextBox) 
     passform.inputbox.Value = vbNullString 
End Function 

Попытка выполнить возвращает ошибку "Тип missmatch".

Я установил его как пользовательскую форму и текстовое поле. Что я делаю не так?

спасибо :)

+1

Я не думаю, это ваша проблема, но вы никогда не должны использовать имена, которые использует VB. IE Userform Userform или Sheet Sheet. Иногда это смущает. –

+0

Как указывает @DavidGM, назовите ваш userform что-то еще (а не «userForm1», но как «theForm» или такой). – BruceWayne

+0

да, я думал об этом. Действительно плохая форма. Тем не менее, это все еще не делает эту работу. –

ответ

0

Вы определяете функцию для двух параметров. Затем в функции вы объединяете параметры, как если бы они были членами другого. Это даст ошибку. Для решения поля ввода на пользовательской форме, используйте:

Function clear(passform As UserForm, inputbox As TextBox) 
    passform.Controls(inputbox.Name).Value = vbNullString 
End Function 

или еще проще:

Function clear(inputbox As TextBox) 
    inputbox.Value = vbNullString 
End Function 

(я не был в состоянии проверить это, как у меня нет тестового модуля с формами в Excel .)

+0

Я не думаю, что это важно для функции. Несоответствие типа происходит в процедуре вызова. Я не знаю, почему и как пройти мимо него. –

+0

один является членом другого. Если я называю элементы управления конкретно, он работает просто отлично \t NoteEntryForm1.frmBigInputBox.Value = vbNullString –

+0

Вместо 'Dim passform As UserForm' попробуйте' Dim passform As Object' и для других переменных типа объекта. –

0

ошибка Type Mismatch очень ясно, вы настраиваете в переменной, объявленной в TextBox то, что, по-видимому, является неTextBox. Мои предложения:

  1. Проверьте тип с помощью функции TypeName(object), и убедитесь, что это на самом деле TextBox:

    Debug.Print TypeName(frmBigInputbox) 
    
  2. Если TextBox является дочерним passform, то скажите об этом VBA :

    Set inputtext = passform.frmBigInputBox 
    
+0

NoteEntryForm1.frmBigInputBox, конечно, текстовое поле –

+0

, однако, Set inputtext = passform.frmBigInputBox запускает ошибку несоответствия такого же типа. :( –