Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Как правильно вызвать процедуру для настройки параметров формы?
 
Хотелось освоить передачу данных (объектов) в процедуру.
Как правильно записать данные из контролов на форме в ячейки?
 
1. На форме 4 текст бокса и один комбобокс. Процедура
Код
 Private Sub CommandButton1_Click()
  Dim NextRow As Long, NumMax As Long, i As Integer, CurCtrl As Control
  Sheets("Контакты").Activate
  NextRow = Application.WorksheetFunction.CountA(Range("A:A")) + 1
  Cells(NextRow, 1) = Application.WorksheetFunction.Max(Range("A:A")) + 1
  i = 1
  For Each CurCtrl In UserForm1.Controls
    i = i + 1
    If i > 5 Then Exit For
    Cells(NextRow, i) = CurCtrl.Value
  Next CurCtrl
  Cells(NextRow, 6) = ComboBox1.SelText
End Sub
работает, но не очень нравится, что для комбобокса (контрола, отличного от текстбокcа) код пришлось выносить за цикл, а в цикле вводить условия по i. Можно ли эту процедуру сделать лучше?
2. Хотелось бы дату рождения вводить из календаря, а не вручную забивать в поле ввода. Как это сделать?
3. При вводе в поле ввода "Дата рождения" даже обычных числовых данных они заносятся на лист. Я попробовал сделать проверку:
Код
 Private Sub TextBox4_Change()
  If Not TextBox4.Value.IsDate Then
    MsgBox "Ошибка"
  End If
End Sub
получаю ошибку "Необходим объект". Как правильно проверить Дату?
Файл прилагаю
Как правильно вызвать процедуру для настройки параметров формы?
 
Действительно, ошибка исчезла. Хотелось бы понять, почему, чтобы в будущем правильно передавать объекты.
Как правильно вызвать процедуру для настройки параметров формы?
 
В процедуре
Код
 Sub AddRecord()
'  With UserForm1
'    .ComboBox1.List = Sheets("Списки").Range("A2:A5").Value
'    .Show
'  End With
  UserForm1_Tuning UserForm1
End Sub
все нормально работает без вызова процедуры UserForm1_Tuning и при непосредственной установке параметров (закомментированный код)
Как только использую вызов процедуры
Код
 Sub UserForm1_Tuning(uf As UserForm)
  With uf
    .ComboBox1.List = Sheets("Nienee").Range("A2:A5").Value
    .Show
  End With
End Sub
возникает ошибка "Run-time error 438': Object doesn't support this property or method"
Подскажите, пожалуйста, как правильно передавать объекты в процедуры для работы с ними. Файл прикрепил.

Как правильно определить время выполнения кода?
 
Попробовал поработать с таймером, определить время выполнения кода.
Код
 Sub TestTimer()
  Dim TimeBeg As Date, TimeEnd As Date, TimeWork As Date, i, j, res
  TimeBeg = Timer
  For i = 0 To 100000
    res = res + 1
  Next i
  TimeEnd = Timer
  TimeWork = TimeEnd - TimeBeg
  Debug.Print TimeWork
End Sub
в результате получаю 0:11:15. Возникли следующие вопросы:
а) как трактовать эти значения? Это 11 милисекунд и 15 микросекунд?
б) как вывести данные в мили и микросекундах? Файл прикрепил.
Как передать результаты автофильтра в массив?
 
Хотелось бы на листе отобрать нужные строки и значения отобранных строк перенести в массив. Это можно сделать в цикле по строкам. А можно ли это сделать с помощью автофильтра?
При вводе в форме значения на листе появляются результаты фильтрации:
Код
 Private Sub CommandButton1_Click()
  Sheets("Контакты"  .Activate
  ActiveSheet.Range(ActiveSheet.UsedRange.Address).AutoFilter Field:=2, _
     Criteria1:=UserForm1.TextBox1.Text, VisibleDropDown:=False
End Sub
Можно ли каким-либо образом передать результаты работы автофильтра в массив? Файл прилагаю
VBA - снятие и установка защиты листа
 
Видимо, был глюк или я что-то делал неправильно. Сейчас пароль прекрасно снимается-ставится. Спасибо всем ответившим!
VBA - снятие и установка защиты листа
 
Спасибо за подсказку.
Сначала я установил пароль ПКМ по корешку листа. Затем с помощью подсказок данной темы снял и установил пароль 2015 в VBA. Затем я попробовал снять пароль с листа (правая кнопка по корешку листа), ничего не получилось, пишет, что неверный пароль. Правильно ли я понял, что пароль, установленный в VBA, можно снять только с помощью VBA?
VBA - снятие и установка защиты листа
 
Защитил лист "Контакты" паролем "2015" для того, чтобы добавить запись можно было бы только с помощью формы:
В процедуре
Код
 Private Sub CommandButton1_Click()
  Dim NextRow As Long, NumMax As Long
  Sheets("Контакты").Activate
  NextRow = Application.WorksheetFunction.CountA(Range("A:A")) + 1
  NumMax = Application.WorksheetFunction.Max(Range("A:A"))
  Cells(NextRow, 1) = NumMax + 1
  Cells(NextRow, 2) = UserForm1.TextBox1.Text
End Sub
нужно снять защиту и затем после добавления данных поставить ее снова. Подскажите, пожалуйста, как это сделать. Файл прикрепил.
Страницы: 1
Наверх