Страницы: 1
RSS
Вод данных из ячейки в UserForm в TextBox и обратно
 
За сегодня с толкнулся с такой проблемой. Нужно чтобы, когда я ввожу данные в ячейку они сразу отображались в UserForm в TextBox. И на оборот из TextBox в UserForm. У меня есть код
Код
Private Sub TextBox1_Change()
TextBox1.Text = Range("Лист1!A3").Value
End Sub
Получается когда я ввожу данные в ячейку данные вводятся в UserForm в TextBox,  только тогда когда  я начинаю вводить, в TextBox, А как сделать, чтобы автоматически вводились?
С этим кодом все в порядке, привел в пример, чтобы можно было их совместить, Нужно чтобы работало и туда и обратно.
Код
Private Sub CommandButton1_Click()
Sheets("Лист1").[A3] = Me.TextBox1
End Sub
 
Добрый день. А где там в примере TextBox в UserForm?
Я не волшебник, я только учусь.
 
Исправил описание проблемы
Цитата
Нужно чтобы, когда я ввожу данные в ячейку они сразу отображались в UserForm в TextBox. И на оборот из TextBox в UserForm. У меня есть код
вот так
Цитата
И на оборот из TextBox который находится в  UserForm отправить данный в ячейку.
Изменено: Djoni - 17.01.2020 14:42:35
 
В простом модуле
Код
Option Explicit 'Не обязательно, но крайне рекомендую

Public bEvents As Boolean
В модуле листа:
Код
Option Explicit 'Не обязательно, но крайне рекомендую

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Sheets("Лист1").[A3]) Is Nothing Then
        bEvents = True
        UserForm1.TextBox1 = Sheets("Лист1").[A3]
        bEvents = False
    End If
End Sub
В модуле формы:
Код
Option Explicit 'Не обязательно, но крайне рекомендую

Public bEvents As Boolean

Private Sub TextBox1_Change()
    If not bEvents Then
        Application.EnableEvents = False
        Sheets("Лист1").[A3] = (Me.TextBox1)
        Application.EnableEvents = True
    End If
End Sub
Огород с bEvents горожу из-за того, что я почему-то считаю, что Application.EnableEvents не влияет на элементы формы и ячейка/комбобокс будут менять друг-дружку в замкнутом цикле. Могу ошибаться.
Изменено: Wiss - 17.01.2020 15:41:34
Я не волшебник, я только учусь.
 
Спасибо то что надо а как сделать, чтобы при закрытии формы и открытии данные на ней сохранялись?, если не сложно
 
Цитата
Wiss написал:
Могу ошибаться.
Можете. Но не ошибаетесь.
Код
Private Sub TextBox1_Change()

наименее подходящее событие для реализации связи формы и листа, а уж вкупе с
Код
Private Sub Worksheet_Change(ByVal Target As Range)

вообще жесть.

Цитата
Djoni написал:
как сделать, чтобы при закрытии формы и открытии данные на ней сохранялись?, если не сложно
Не сложно. Перед закрытием формы сохраните куда-либо требуемое. При повторной загрузке формы верните на место.
 
Ну, для начала: одна тема - один вопрос :)
Во-вторых: у Вас же уже всё сделано: при инициализации формы подгружаются данные с листа (кстати, а не будут ли там ошибок, если форма ещё не загружена, а значения на листе уже меняются?..). Если не работает - попробуйте использовать UserForm_Activate вместо UserForm_Initialize.
В-третьих: Значения элементов формы, которые не берутся с листов нужно где-то сохранять, если форма закрывается. Или в глобальных переменных (умрут при закрытии книги) или на служебных листах.
Я не волшебник, я только учусь.
 
Цитата
RAN написал:
Перед закрытием формы сохраните куда-либо требуемое
Сохранить куда. Мои данные которые вводятся через TextBox находятся в ячейки. Нужно чтобы при открытии он брал данные из них
 
При вашей постановке задачи макросы вообще без нать.  :)
 
Когда для одного TextBox и для одной ячейки, то данные сохраняются в TextBox при закрытии UserForm. А вот добавляю для второго TextBox, то не сохраняет делаю вот так
Код
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Sheets("Лист1").[A3,B3]) Is Nothing Then
        bEvents = True
        UserForm1.TextBox1 = Sheets("Лист1").[A3]
        UserForm1.TextBox2 = Sheets("Лист1").[B3]
        bEvents = False
    End If
End Sub

Код
Private Sub TextBox1_Change()
    If Not bEvents Then
        Application.EnableEvents = False
        Sheets("Лист1").[A3] = (Me.TextBox1)
        Application.EnableEvents = True
        'UserForm_Initialize
        'чтобы формат выводился текстовый удаляем CDbl вводим (Me.TextBox1) '
    End If
End Sub

Private Sub TextBox2_Change()
    If Not bEvents Then
        Application.EnableEvents = False
        Sheets("Лист1").[B3] = (Me.TextBox2)
        Application.EnableEvents = True
        'UserForm_Initialize
        'чтобы формат выводился текстовый удаляем CDbl вводим (Me.TextBox1) '
    End If
End Sub
Изменено: Djoni - 17.01.2020 16:55:34
 
Понял спасибо
 
Подскажите, а в данном случае, как указать "денежный формат" и  формат "дата"
Страницы: 1
Наверх