【问题标题】:Changing datasheet cell based on form comboxes根据表单组合更改数据表单元格
【发布时间】:2015-03-02 08:57:20
【问题描述】:

我试图弄清楚如何创建一个带有组合框的表单,该组合框使用主表,而组合框使用查询。我想要做的是让组合框在更改后更新。它们是 65 个组合框,每个组合框都有自己的默认值 (1 - 65)。主表有一个名为“Recall_Position”的列,查询从中提取“Lastname”和“Firstname”。打开表单时,每个组合框都会自动填充“Recall_Position”等于组合框默认值的行中的姓氏。

示例 1:在“Recall_position”中包含数字 1 的行在“Lastname”下的同一行中的名称为 Smith,当打开表单时,默认设置为“1”的组合框将与 Smith 一起打开在组合框中选择。这已经设置并且没有问题。

我想要得到的是,当在组合框中选择不同的“姓氏”时,它将清除“姓氏”中的数字并使用该组合框的默认数字设置新的“姓氏”。

Example2:当combobox从Smith变为Woods时,使用Example1,会在“Lastname”中找到Smith,并到“Recall_position”下的同一行,清除Smith的号码,然后找到Woods并将“Recall_position”设置为“ 1"。

如果我必须在更改时为每个组合框添加 VBA,它不会打扰我。这背后的原因是我正在创建一个报告,该报告将根据“Recall_position”提取信息以创建姓名和电话号码名册。

【问题讨论】:

  • 不确定我是否理解 - 你能上传截图吗?您要更改哪个组合框?全部 50 个?
  • 这个过程很难从文字上理解。尝试用一些图片和分步描述更新您的问题。我认为其他人也觉得很难,因为到目前为止没有人回复。
  • 更新了问题。
  • 据我了解示例 1,您希望默认值是一个变量。根据最新选择的名称设置的变量。如果默认值中有 =“1”,则无法更改默认值。你需要通过VBA。先看看这个msdn.microsoft.com/en-us/library/office/…
  • 示例 2 听起来可能。您需要从 VBA 输入记录集(您知道怎么做吗?)。然后,您可以在 Combobox_1(您所说的组合框)中搜索值,然后交换数字或您想做的任何事情。你知道记录集是如何工作的吗?

标签: ms-access combobox datasheet


【解决方案1】:

尝试使用此示例 2:

Dim dbs As New ADODB.Connection
Dim rst As New ADODB.Recordset

Set dbs = CurrentProject.Connection
  With rst
       Set .ActiveConnection = CurrentProject.Connection
       .Source = "TheTableYouHave"
       .CursorLocation = adUseClient
       .CursorType = adOpenKeyset
       .LockType = adLockOptimistic
       .Open
   End With
rst.MoveFirst

rst.Find "[Recall Position] "27"" ' Will go to line number that hold 27
OldLastName = rst!LastName ' Save the old last name
rst!LastName = NewLastName ' Replace lastname in line 27 with new last name

set dbs = Nothing
set rst = Nothing

等等。等等

您也可以将第一个![Recall Position] 替换为另一个数字。这只是为了让您了解如何执行此操作。 当您使用 rst. 时,您告诉记录集要移动到什么,搜索等等,当它是 rst! 时,您进入记录集以读取单元格或替换单元格。它不像excel。你不能做一个细胞(2,5)。在这种情况下,它将是:

rst.move 5
rst![Column 2 Name] = NewValue

对应

cells(2,5) = NewValue 

在 excel 中(对不起,如果我混淆了行和列)。我希望你明白。 尝试在 VBA 中使用 Debug.Print rst!WhateverYouLike 并了解代码。

最好的问候,埃米尔。

【讨论】:

  • 差不多了。除了 Recall_position 中的数字之外,我不会尝试更改行上的任何信息。我试图寻找或获得帮助的是,将“1”设置为其默认值的组合框命名为combo1。因此,以 Private Sub Combo1_Change() 开头的代码在表(“Userdata”)列“Recall_Position”中找到“1”并清除它。然后找到组合框更改为的姓氏,并在“Recall_position”下的同一行中输入数字1
  • 或者我在想 Private Sub Combo1_AfterUpdate()
  • 我仍然会说你需要我提供的代码。如果你想在表格中移动数字,你需要上面的代码。除了进行查询并与之相关之外,您不能这样做……如果您想交换 f.x.数字1和5,这样5到第1行,1到第5行,需要用上面写的代码。
  • 首先要更改行中的数字![Recal_Position] = 5(如果您希望它是 5)。
猜你喜欢
  • 2022-08-06
  • 2017-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-28
  • 2012-01-29
  • 1970-01-01
相关资源
最近更新 更多