【问题标题】:Search Engine - finding a value in a txtbox in an excel sheet and writing data搜索引擎 - 在 Excel 工作表的 txtbox 中查找值并写入数据
【发布时间】:2017-02-03 09:33:23
【问题描述】:

这是我在这里的第一篇文章,也许很难。

我正在为一位朋友的治疗师诊所创建一个日程安排工具。

我有一个名为 frmschedule 的表单,当用户选择日期和时间时,它会在 Excel 工作表上找到匹配项并写入姓名等数据。

用户将从预加载的列表框 (lstboxdate) 中选择一个日期,说明从 2017 年 1 月 1 日到 2017 年 12 月 31 日。

然后用户将从预加载的列表框 (lstboxtime) 中选择一个时间,说明 8:00 / 8:20 / 8:40 / 9:00 等。

我有一个包含所有 365 天的列表的 Excel 电子表格,并且每天都给了一个“序列号”,例如 1 月 1 日将是“1”

我还有一个列出所有时间的范围和每个时间段的序列号。例如 8:00 将是 800

用户选择日期和时间后,将为该日期和时间创建一个“序列号” - 例如,2017 年 1 月 1 日 8:00 的约会将返回序列号 1800。约会序列号number 存储在一个文本框中,该文本框中结合了日期序列号和时间序列号的值。

当用户选择命令按钮时,我希望 vba 在我的日程安排电子表格中找到该特定序列号(其中已经有每天和时间的日期/时间序列号)并从 txtname / txtphone 写入数据。

有没有人可以帮助我,或者我把这弄得太复杂了。

我不熟悉循环和搜索引擎,但已尝试找到解决方案

提前致谢

【问题讨论】:

  • 如果您知道日期和时间以及每天的时隙数,那么您应该能够在不进行搜索的情况下计算行数。约会日期 - 1 月 1 日得到天数减 1 并乘以每天的时间段数并添加所选时间段应该会给您工作表上的行号。使用 cells() 引用要更新的单元格。或者您可以在 excel VBA 中查找范围查找功能。
  • 您的项目听起来很复杂。我很想知道你对我不久前在没有使用任何 VBA 或表单的情况下制作的这个约会跟踪器scotlang.com/AppointmentTracker.xlsx 的看法。它至少可以向您展示另一种记录约会数据的方法。
  • 戈登,真的很喜欢你在那里整理的东西。我的计划是像你一样包括每周视图,但还没有达到那个点。至于你的建议,我认为这是一个好主意,但不知道该怎么做。

标签: vba excel


【解决方案1】:

我不确定您是用序列号写入工作表还是在表单上显示数据——如果是后者,一个非常简单的解决方案是使用 vlookup 或索引/匹配。例如,假设命令按钮名为 CommandButton1,使用单击事件从不同页面查找您的序列号并返回名称/电话组合。

假设: 文本框被称为 TextBox1 命令按钮=命令按钮 1 带有姓名/电话的序列号在 Sheet2 上

Private Sub CommandButton1_Click()
Dim sName$, sPhone$
sName = WorksheetFunction.VLookup(Me.ComboBox1.Value, Sheets("Sheet2").Range("A1:B100"), 2, False)
sPhone = WorksheetFunction.VLookup(Me.ComboBox1.Value, Sheets("Sheet2").Range("A1:C100"), 3, False)
Me.TextBox1 = "Name: " & sName & vbCrLf & "Phone: " & sPhone
End Sub

【讨论】:

  • 我想他想写信到与他的序列号匹配的单元格旁边的表格中,以记录约会。
  • 你好,是的,我想根据用户表单上约会的序列号与excel电子表格匹配,将数据写入excel表格。
  • 如果它有助于了解究竟需要做什么,我已将文件放入保管箱..app.box.com/s/2tr5uy269mdcb9rl4d46f73q2d9ldqgn.
  • 如果我要求太多,我真诚的道歉
【解决方案2】:

如果您的组合框有序列号并且您正在写入日程表,您可以尝试这样的操作:

Private Sub CommandButton1_Click()
Dim rngName As Range
Dim rngPhone As Range
Dim i As Integer

i = WorksheetFunction.Match(cint(Me.cboSerial), Sheets("Sheet2").Range("A1:A100"), True)

Set rngName = Sheets("Sheet2").Cells(i, 2)
Set rngPhone = Sheets("Sheet2").Cells(i, 3)

rngName = Me.txtName
rngPhone = Me.txtNumber
End Sub

基本上,您正在运行 Match() 工作表函数来返回存储序列号的单元格地址,然后您正在写入同一行中的单元格。

cboSerial 是存储您的序列号的组合框
txtName 是预约持有人的姓名
txtNumber 是预约持有人的电话号码

【讨论】:

  • 嗨,Ryan,我已将您的代码与确认对话框代码一起放在命令按钮中。我没有收到任何错误,但没有写入 excel 表?难道是excel序列号和userform序列号格式不一样?
  • Ryan,我查看了代码,但找不到我选择命令按钮没有任何操作的原因。
  • 抱歉,一直按回车键向下移动一行。我已将文件放在保管箱上,因为由于字符长度,我无法将代码放在这里。再次感谢app.box.com/s/soca9h0bvt0pqrjpyfzorrdtqeqlfb4w
  • 我认为您的文本框中的数字可能实际上是文本,但是您运行匹配功能的字段是数字,因此找不到匹配项。您可以尝试将文本框中的值转换为整数吗?例如 Cint(me.cboSerial)
  • 谢谢瑞恩。我已接受上述建议并将其添加到日期和时间序列号连接的代码中,但收到一条错误消息,说明需要标识符。我将在哪里或如何将序列号更改为整数? Cint(Me.txtserial1.Value) = txtdate1serial.Value & txttime1serial.Value 再次感谢您的帮助...我正在从中学习
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多