Текстовое поле пользовательской формы Excel VBA, содержащее динамические сценарии c с использованием различных текстовых полей - PullRequest
2 голосов
/ 14 апреля 2020

Я новичок в Excel VBA Userform .. Я хочу решить следующие 2 проблемы:

1) У меня три имени в текстовом поле: имя клиента, номер мобильного телефона и идентификатор электронной почты -> Я получаю это данные из Sheet1, которые похожи на базу данных, в которой хранятся все эти три столбца и которые время от времени меняются Далее у меня есть зависимый комбинированный список с другим текстовым полем -> Эти два выступают как родитель и дочерний элемент, где комбинированный список является родительским, а текстовое поле является дочерним элементом любого элемента, выбранного в комбинированном списке, который скрипт элемента отобразит в текстовом поле.

Для экзамена: Combobox если я выберу пункт «машина», то его сценарий будет отображаться в дочернем текстовом поле как «имя с новым автомобилем, его номер мобильного телефона: & идентификатор электронной почты:», так же, как у меня такие сценарии до 200.

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

Если имя клиента - Джон, номер мобильного телефона 132132132 и идентификатор электронной почты test@test.com Когда пользователь выбирает автомобиль из родительского списка. затем в этом текстовом поле будут заполнены данные типа «У Джона новая машина, его номер мобильного телефона: 132132132 и идентификатор электронной почты: test@test.com», чтобы я мог сохранять данные в Sheet2

и из этих 200 сценариев данные клиента изменят свою позицию в сценарии. означает, что имя клиента в нескольких сценариях будет отображаться в конце сценария.

2) У меня есть еще два текстовых поля в той же форме с кнопкой обновления только для них: одно текстовое поле для ввода языка, на котором говорит пользователь, и другое текстовое поле для даты и время (текущее или заданное c дата и время). Как только я ввожу язык клиента говорит по-английски sh и текущую дату и время, я нажимаю кнопку обновления, и эти два значения в текстовом поле должны быть сохранены в нескольких сценариях, которые я объяснил выше.

Примеры:
"У Джона новая машина, номер его мобильного телефона: 132132132 и идентификатор электронной почты: test@test.com, язык общения был английский sh, время посещения, текущая дата и время" "I встретиться с Кираном по дате и времени, затем он попросил мой контактный номер и идентификатор электронной почты. Язык общения был Германия "

в приведенном выше примере два, я должен использовать все значения текстового поля в каком-то сценарии, мне нужно использовать только имя клиента.

Я вызываю данные клиента с помощью кнопки поиска, которая будет извлекать данные из листа1. Все работает как извлечение и сохранение данных на листах, но я не смог найти опцию, которая подходит для двух вышеупомянутых сценариев ios.

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

Большое спасибо заранее

Редактировать: Конечно, вы найдете подробности ниже и спасибо за ваше обновление

Ниже приведен вид пользовательской формы. enter image description here Итак, кадр сведений о клиенте, который я использовал для листа1, где хранится моя база данных, и будет отображаться в форме при нажатии кнопки поиска. Для кода кнопки поиска -

`Private Sub CommandButton3_Click()
    Dim Cust_Name As String
    Cust_Name = Trim(TextBox1.Text)
    LastRow = Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row
    For i = 2 To LastRow
    If Worksheets("Sheet1").Cells(i, 1).Value = Cust_Name Then
    TextBox1.Text = Worksheets("Sheet1").Cells(i, 2).Value
    TextBox2.Text = Worksheets("Sheet1").Cells(i, 3).Value
    TextBox3.Text = Worksheets("Sheet1").Cells(i, 4).Value
    End If
    Next
End Sub`

Для дополнительных сведений. Ниже у меня есть код для двух текстовых полей, в которые нам нужно ввести вручную язык, на котором будет говорить, введите Engli sh или любой другой язык и дату и время

Итак, для отображения времени я использовал код Me.TextBox10.Value = Format(Now, "dd/mm/yyyy hh:mm:ss")

И для сценария Windows фрейм для зависимого поля со списком и текстовое поле скрипта ниже кода, используемого

`Private Sub ComboBox1_Change()
Dim i As Long, LastRow As Long
LastRow = Sheets("Sheet2").Range("F" & Rows.Count).End(xlUp).Row
For i = 2 To LastRow
    If Sheets("Sheet2").Cells(i, "F").Value = (Me.ComboBox1) Then
        Me.TextBox5 = Sheets("Sheet2").Cells(i, "G").Value
    End If
Next
End Sub`

`Private Sub ComboBox1_DropButtonClick()
Dim i As Long, LastRow As Long
LastRow = Sheets("Sheet2").Range("F" & Rows.Count).End(xlUp).Row
If Me.ComboBox1.ListCount = 0 Then
    For i = 2 To LastRow
        Me.ComboBox1.AddItem Sheets("Sheet2").Cells(i, "F").Value
    Next i
End If
End Sub`

Итак, из фрейма «Сведения о клиенте» я хочу, чтобы все детали помещались внутри скрипта. когда я выбираю сценарий из раскрывающегося списка, а также из фрейма «Extra Details», когда я вручную вводю данные и нажимаю кнопку «Обновить», эти данные также необходимо обновить в этом текстовом поле «Сценарий».

В соответствии с изображением, которым я поделился, и подробностями выше, это то, что мне нужно получить в конечном результате. У Джона новая машина, номер его мобильного телефона: 123456789 и идентификатор электронной почты: test@test.com, язык общения был английский sh, время посещения текущее 14-04-2020 12:46:33

Это что мне нужно в моем последнем модифицированном скрипте, который я могу сохранить в листе с кодом ниже.

`Private Sub CommandButton1_Click()     
Dim sh As Worksheet
Set sh = ThisWorkbook.Sheets("Sheet4")
Dim n As Long
n = sh.Range("A" & Application.Rows.Count).End(xlUp).Row
sh.Unprotect "test"
sh.Range("A" & n + 1).Value = Me.TextBox1.Value
sh.Range("B" & n + 1).Value = Me.TextBox2.Value
sh.Range("C" & n + 1).Value = Me.TextBox3.Value
sh.Range("E" & n + 1).Value = Me.TextBox5.Value
sh.Protect "test"
End Sub`

Что-нибудь еще нужно, дайте мне знать спасибо.

1 Ответ

1 голос
/ 14 апреля 2020

Код ниже показывает, как вы можете подойти к решению вашей проблемы. Пожалуйста, изучите его.

Option Explicit


Private Sub Demo_Of_Method()

    Const MyScript = "|having new||. " & vbCr & _
                     "His mobile number is||. " & vbCr & _
                     "Email is||. " & vbCr & _
                     "Language spoken was||. " & vbCr & _
                     "Time of conversation:||"
    Dim Script() As String
    Dim CustDetail As Variant
    Dim i As Integer, n As Integer

    CustDetail = Array("John", "car", "123123123", "John@test.com", "German", Now())
    Script = Split(MyScript, "|")
    For i = 0 To UBound(CustDetail)
        Script(n) = CustDetail(i)
        n = n + 2           ' every other element of 'Script' is blank.
    Next i

    MsgBox Join(Script)     ' the default separator is a single space
End Sub

Массив Script состоит из чередующихся заполненных и пустых элементов. В вашем проекте он, вероятно, готов в вашей базе данных и доставлен оттуда. Это обрабатывается путем разделения на «|», символ, который не встречается в тексте. Следовательно, где два || следуя друг за другом, создается пустой элемент, а также ведущий «|».

В вашем проекте вы должны построить массив CustDetail из значений вашего текстового поля. Затем присоедините их к аль oop, используя алгоритм, на котором они были построены. Возможно, приведенный выше код можно преобразовать в функцию, которая возвращает объединенный массив, готовый для вставки в вашу форму.

Кстати, глядя на ваш код, Exit For отсутствует. Это необходимо, чтобы остановить выполнение кода даже после того, как имя клиента было найдено.

For i = 2 To LastRow
    If Worksheets("Sheet1").Cells(i, 1).Value = Cust_Name Then
        TextBox1.Text = Worksheets("Sheet1").Cells(i, 2).Value
        TextBox2.Text = Worksheets("Sheet1").Cells(i, 3).Value
        TextBox3.Text = Worksheets("Sheet1").Cells(i, 4).Value
        Exit For
    End If
Next
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...