Использовать переменную из Useform в другом модуле - PullRequest
0 голосов
/ 07 декабря 2018

Я не смог найти то, что искал, но, может быть, вы все равно мне поможете.

Моя проблема в том, что у меня есть пользовательская форма, в которую пользователь должен внести свой вклад.Я хочу сохранить этот ввод и использовать его позже в другом модуле, т.е. вставить его в ячейку.Простое решение должно состоять в том, чтобы просто сделать его публичной переменной, но по какой-то причине она не будет работать.Вот код, который я пытался использовать:

Форма пользователя :

Option Explicit

Public VarBezeichnungReifenliste As String

Private Sub CommandButton3_Click()

    VarBezeichnungReifenliste = TextBox1.Value
    Call Übertragen

End Sub

Private Sub CommandButton2_Click()

    Unload Me

End Sub

Модуль :

Option Explicit

Public Sub Übertragen()

  Worksheets("XY").Cells(1, 1).Value = VarBezeichnungReifenliste

End Sub

в сообщении об ошибке говорится, что переменная не объявлена ​​(VarBezeichnungReifenliste), поэтому я думаю, что я не объявил ее достаточно публично?

Сама пользовательская форма открывается с помощью простой кнопки на рабочем листе, используя Userform1.Show.Так что здесь ничего особенного.

Ответы [ 2 ]

0 голосов
/ 07 декабря 2018

Достаточно публично

Solution1

UserForm1 :

Option Explicit

Private Sub CommandButton3_Click()
    VarBezeichnungReifenliste = TextBox1.Value
    Module1.Übertragen
End Sub

Private Sub CommandButton2_Click()
    Unload Me
End Sub

Module1 :

Option Explicit

Public VarBezeichnungReifenliste As String

Sub Übertragen()
    Worksheets("XY").Cells(1, 1).Value = VarBezeichnungReifenliste
End Sub

Заключение

Просто переместите объявление переменной

Public VarBezeichnungReifenliste As String

в «обычный» модуль.

Solution2

UserForm1 :

Option Explicit

Public VarBezeichnungReifenliste As String

Private Sub CommandButton3_Click()
    VarBezeichnungReifenliste = TextBox1.Value
    Module1.Übertragen
End Sub

Private Sub CommandButton2_Click()
    Unload Me
End Sub

Module1 :

Option Explicit

Sub Übertragen()
    Worksheets("XY").Cells(1, 1).Value = UserForm1.VarBezeichnungReifenliste
    Worksheets("XY").Cells(1, 1).Select
End Sub

Вывод

Просто используйте

Worksheets("XY").Cells(1, 1).Value = UserForm1.VarBezeichnungReifenliste

вместо

Worksheets("XY").Cells(1, 1).Value = VarBezeichnungReifenliste

в Module1.

Solution3

UserForm1 :

Option Explicit

Public VarBezeichnungReifenliste As String

Private Sub CommandButton3_Click()
    VarBezeichnungReifenliste = TextBox1.Value
    Übertragen
End Sub

Private Sub CommandButton2_Click()
    Unload Me
End Sub

Sub Übertragen()
    Worksheets("XY").Cells(1, 1).Value = VarBezeichnungReifenliste
End Sub

Заключение

Переместить все в UserForm1.

0 голосов
/ 07 декабря 2018

VBA странно хранит переменные в долгосрочной перспективе.Как общее практическое правило, если вы можете взаимодействовать с книгами Excel между сохраняемой переменной и когда вам нужно получить значение, вы не можете рассчитывать на эту переменную, сохраняя ее значение.

Самый безопасный способ обойти это - просто сохранить свое значение в ячейке скрытого листа и читать его оттуда, когда вам это нужно.

...