2013-10-03 4 views
2

Пользователь вводит текст в txtAddNote, затем нажимает кнопку cmdAddNote, VBA запускает и добавляет примечание к txtNotes с отметкой времени и даты.Строка добавляется только в текстовое поле, когда текстовое поле уже содержит текст

Но он работает только тогда, когда уже есть текст в txtNotes. Что мне нужно сделать, чтобы заставить его работать, когда txtNotes пуст?

Private Sub cmdAddNote_Click() 
Dim MyDate As String 

MyDate = Now() 

Form_ClientF.txtNotes = vbCrLf + MyDate + vbCrLf + vbCrLf + Form_ClientF.txtAddNote + vbCrLf + vbCrLf + Form_ClientF.txtNotes 

Form_ClientF.txtAddNote = "" 

End Sub 
+0

Смотрите мой [ ** ответ **] (http://stackoverflow.com/a/19163157/1253219) по вашему предыдущему вопросу о том, как это сделать. Он проверяет Комментарий, если он уже содержит что-то. Если это так, то добавляет к нему новый комментарий, иначе он просто назначает ему новый комментарий. Он также гарантирует, что новый комментарий содержит что-то перед добавлением комментария. – Linger

ответ

1

Contatenating значение Null и строка может очень хорошо сделать все это Null, так что попробуйте вместо этого:

Form_ClientF.txtNotes = vbCrLf + MyDate + vbCrLf + vbCrLf + Nz(Form_ClientF.txtAddNote, "") + vbCrLf + vbCrLf + Nz(Form_ClientF.txtNotes, "") 
2

Используйте метод .Value, а не непосредственно со ссылкой на текстовые поля.

В этом случае используйте его всякий раз, когда ссылаетесь на объект Excel VBA - флажки и т. Д. Это сэкономит вам массу разочарований позже с такими проблемами.

Private Sub cmdAddNote_Click() 
Dim MyDate As String 

MyDate = Now() 

Form_ClientF.txtNotes.value = vbCrLf + MyDate + vbCrLf + vbCrLf + Form_ClientF.txtAddNote.value + vbCrLf + vbCrLf + Form_ClientF.txtNotes.value 

Form_ClientF.txtAddNote.value = "" 

End Sub 
2

Я предполагаю, что вы убедитесь, что вы не участвуете cmdAddNote_Click если txtAddNote не содержит что-то добавить (см пример кода ниже).

Если это так, то вы можете сделать это ...

Form_ClientF.txtNotes = vbCrLf & MyDate & vbCrLf & vbCrLf & _ 
Form_ClientF.txtAddNote & (vbCrLf + vbCrLf + Form_ClientF.txtNotes) 

Этот подход использует разницу между + и &, когда используется для конкатенации строки с Null. Вот пример из окна Immediate, иллюстрирующего разницу.

? "a" + Null 
Null 
? "a" & Null 
a 

Вот захват экрана в форме, которая использует этот подход ...

enter image description here

И код, используемый в форме ...

Option Compare Database 
Option Explicit 

Private Sub cmdAddNote_Click() 
    Me.txtnotes = Format(Now, "mmm dd, yyyy h:nn:ss ampm") & vbCrLf & _ 
     Me.txtAddNote & (vbCrLf + vbCrLf + Me.txtnotes) 
    Me.txtAddNote = vbNullString 
    Me.txtAddNote.SetFocus 
    Me.cmdAddNote.Enabled = False 
End Sub 

Private Sub Form_Current() 
    Me.cmdAddNote.Enabled = (Len(Trim(Nz(Me.txtAddNote, vbNullString))) > 0) 
End Sub 

Private Sub txtAddNote_Change() 
    Me.cmdAddNote.Enabled = (Len(Trim(Nz(Me.txtAddNote.Text, vbNullString))) > 0) 
End Sub 
+1

Ага. '&' и '+' ведут себя по-разному, когда задействовано значение «Null». Хорошо знать! +1 –

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