Как сказано в моем комментарии, вы должны использовать Option Explicit
, тогда staff_name не будет определяться локально в каждой подпрограмме.
Я предполагаю, что код, который вы разместили, находится в модуле для пользовательской формы. Тогда следующие изменения могут исправить ваш код
Option Explicit
Dim staff_name as string
Private Sub txtstaffname_Change()
staff_name = txtstaffname.Value
End Sub
_________________________________________________________________________
Private Sub Done_Click()
dim r as long
'Updat Maintenance Sheet'
Application.EnableEvents = False
r = Application.CountA(Range("A:A")) + 1
With Worksheets("For Maintenance Propose")
.Cells(1, r).Value = staff_name
End With
Application.EnableEvents = True
End Sub
PS Я также думаю, что вы действительно хотели бы заполнить ячейки, идущие вниз по столбцу, так что это должно быть
.Cells(r,1).Value = staff_name