Да, этого можно ожидать время от времени. В то время как new
резервирует место для данных, delete
просто делает недействительным указатель, созданный с помощью new
, позволяя записывать данные в ранее зарезервированных местах; он не обязательно удаляет данные. Однако вы не должны полагаться на это поведение, поскольку данные в этих местах могут меняться в любое время, что может привести к неправильной работе вашей программы. Вот почему после использования delete
указателя (или delete[]
в массиве, выделенном с помощью new[]
), вы должны назначить ему NULL, чтобы вы не могли вмешиваться в неправильный указатель, если вы не будете выделите память с помощью new
или new[]
перед повторным использованием этого указателя.
Есть несколько способов достижения вашей цели, но вот тот, который не требует, чтобы я задавал какие-либо вопросы.
Private Sub CommandButton2_Click()
If Me.TextBox1.Text <> "" Then
Sheets("Sheet1").Range("A1").Value = Me.TextBox1.Text
End If
End Sub
В основном, в приведенном выше тестовом коде, когда CommandButton2
, VBA проверяет, TextBox1
на UserForm1
(который я назвал Me
, поскольку мой код написан в модуле UserForm) не равен ""
(пустая строка).
Другими словами, он проверяет, содержит ли TextBox
хотя бы один символ или нет. Если он содержит хотя бы один символ, он записывает TextBox1.Text
в ячейку A1
на листе Sheet1
. Если TextBox
пуст, ничего не происходит.
Вы можете повторить этот оператор If
для каждого TextBox
, который у вас есть на вашем UserForm
(не забудьте обновить любые ссылки на управление и листы для каждого оператора If
!) [/ g3 ]