我是Excel VBA用户表单的新手。我想实现以下2个问题:
1)我有三个文本框名称,客户名称,手机号码和电子邮件ID->我从Sheet1获得此数据,它就像一个数据库,其中存储了所有这三列数据,并且会不时变化。接下来,我将组合框依赖到另一个文本框->这两个充当父级和子级,组合框是父级,文本框是子级,在组合框中选择的任何项目都将在文本框中显示。
对于考试:如果我选择项目“汽车”,则组合框的脚本将在子文本框中显示为“拥有新汽车的名称,他的手机号码为:&电子邮件ID为:”同样,我有多达200个这样的脚本。
我想将显示在此用户窗体上的前三个文本框数据直接填充到此脚本中,如下面的示例所示
如果客户名为John,手机号码为132132132,电子邮件ID为[email protected]当用户从父组合框中选择汽车时,此文本框将填充“ John拥有新车,他的手机号码为:132132132,电子邮件ID为:[email protected]”之类的数据,这样我就可以将数据保存在Sheet2中
并且在这200个脚本中,客户详细信息将更改其在脚本中的位置。表示几个脚本中的客户名称将显示在脚本的末尾。
2)我还有两个带有更新按钮的相同格式的文本框,只是其中一个文本框用于输入客户所说的语言,另一个文本框用于输入日期和时间(当前日期或特定日期和时间)。输入客户语言后,说英语和当前日期和时间,然后选择“更新”按钮,这两个文本框值就需要保存在上面我解释过的一些脚本中。
示例:“约翰有新车,他的手机号码是:132132132,电子邮件ID是:[email protected],说的语言是英语,访问时间是当前日期和时间”“我在日期和时间遇到Kiran,然后他问我的联系电话和电子邮件ID。说的语言是德国”
在上面的两个示例中,我必须在某些脚本中使用所有文本框值,我只需要使用客户名称。
我正在使用搜索按钮呼叫那些客户数据,这将从sheet1中提取数据。一切都像在表格上提取和保存数据一样工作,但是我找不到与上述两种情况相匹配的选项。
请,如果您可以共享确切的代码,将很有帮助,因为我尝试使用修剪选项将其直接串联在工作表上,这完全出错了,所以我对如何处理有了了解。
非常感谢
编辑:当然,请在下面找到详细信息,并感谢您的更新
下面是用户窗体的视图。因此,我用于工作表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`
有关其他详细信息,我在下面的代码中有两个文本框,我们需要手动输入语言以输入英语或其他任何语言以及日期和时间
所以,为了显示时间,我使用了代码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`
因此,从“客户详细信息”框架中,当我手动输入详细信息并单击“更新”按钮时,我希望从下拉列表中选择脚本以及从“其他详细信息”框架中选择所有脚本,这些所有详细信息应适合脚本自动化需要在该脚本文本框中进行更新。
根据我共享的图像以及下面上面的详细信息,我需要获得最终输出。约翰有新车,他的手机号码是:123456789,电子邮件ID:[email protected],语言是英语,访问时间当前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`
还有其他需要让我知道的感谢。
下面的代码显示了如何解决问题。请研究它。
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", "[email protected]", "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
数组。然后,使用构建它们的算法通过循环将两者结合在一起。也许上面的代码可以转换为一个函数,该函数返回连接的数组redy以便在您的表单中插入。
顺便说一句,查看您的代码,缺少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