2016-12-30 39 views
0

我有主页,从其中包含许多导航按钮的水平导航,在NavigationButton7下我拥有employeesfrm,并且我需要在我在家时导航下一个或上一个形成。水平选项卡,从导航按钮中获取文本值

该ID嵌入在employeesFrm中,因此在卸载Employeesfrm时(而不是在主窗体上),VBA代码在我处于主窗体时未提供正确的ID。

我已经试过Froms!home!navigationSubform!ID,但是这会给出错误,因为任何其他NavigationButton8或9中的任何ID都会给出另一个结果,而且我不想知道其他按钮中其他窗体的ID 。

我担心的是在employeesfrm中的ID和Home窗体文本之间有一个链接。

没有从下面

Dim MyIDS As Integer 

' this is giving only the first ID number all the time. 
MyIDS = Me.ID 

' this is giving error. 
MyIDS = Forms![Home]![NavigationSubform].[Form]![employeesfrm]![ID] 

' this is giving error. 
MyIDS = Forms![Home]![NavigationSubform]![Navigationform]![studentsfrm]![ID] 

' this one works but if I am on another Navigation button, 
' lets say 8 not 7, I am not interested in the number. 
MyIDS = Forms![Home]![NavigationSubform].Form![ID] 

我需要这个数量的工作,我的书签,它工作正常,如果我直接本人对employeesfrm,但不是在家里形式

enter image description here

+1

您应该使用Tab控件而不是导航窗体控件。可能更适合你的需求。 –

+0

我现在无法改变设计......对吧? – zee

+0

如果你愿意,你可以改变设计。遍历设计而达到实现目标的目标是很常见的。 –

回答

0

我不确定我完全理解你要达到的目标,但如何在Home窗体上创建一个名为EmpID的未绑定文本框,然后在Employees表单的OnCurrent事件中设置

Me.Parent!EmpID = ID 

如果您正在使用此功能尝试恢复与您在查看其他子窗体之前所用的相同记录,那么您还需要一种方法来检测您是否回到这个子表单,否则OnCurrent事件将会把你重新设置回第一个记录。因此,您可能需要在主窗体上使用复选框(chkGoToBookmark,默认值为False),以便NavigationButton7(这是加载Employees子窗体的权利?)可以在此框中打勾。然后雇员窗体的成为当前事件是:

If Me.Parent!chkGoToBookmark = True And Not IsNull(Me.Parent!EmpID) Then 
    Me.RecordsetClone.FindFirst "ID=" & Me.Parent!EmpID 
    Me.Bookmark = Me.RecordsetClone.Bookmark 
Else 
    Me.Parent!EmpID = ID 
End If 

请注意,如果你是雇员窗体上直接再到Me.Parent任何引用会导致错误,所以你可能要捕获此。

+0

非常感谢。我被困住了,我与All共享我的解决方案,但是,Horizo​​ntal Form很痛苦,而是真正转到Tab控件, – zee

0

非常感谢。我被卡住了,我与All共享我的解决方案,但是,横向表单很痛苦,真正转到Tab控件,而我的问题是书签,如果您处于相同的表单上,很容易处理书签,但是当表单是在导航控制的主要(主)形式,那么这是不容易的,我所做的是以下几点: 在主窗体上创建了一个名为Txtv的txt,这将从我的水平按钮中的窗体托管我的ID ,并在卸载和装载事件我用下面,

私人小组Form_Unload(取消作为整数)

昏暗RS作为DAO。记录

If Not IsNull(Me.Parent!txtv) Then 

    Set rs = CurrentDb().OpenRecordset("bookmarktb", dbOpenDynaset) 
    With rs 
     .FindFirst "[Variable] = 'CustomerIDLast'" 
     If .NoMatch Then 
      .AddNew  'Create the entry if not found. 
       ![Variable] = "CustomerIDLast" 
       ![Values] = Me.Parent!txtv 
       ![Description] = "Last customerID, for form " & Me.Name 
      .Update 
     Else 
      .Edit   'Save the current record's primary key. 
       ![Values] = Me.Parent!txtv 
      .Update 
     End If 
    End With 
    rs.Close 
End If 
Set rs = Nothing 

私人小组的Form_Load()

昏暗VARID为Variant 昏暗strIIZ作为字符串

varID = DLookup("Values", "bookmarktb", "[Variable] = 'CustomerIDLast'") 
If IsNumeric(varID) Then 
    With Me.RecordsetClone 
     .FindFirst "[ID] = " & strIIZ & varID & strIIZ 
     If Not .NoMatch Then 
      Me.Bookmark = .Bookmark 
     End If 
    End With 
End If 

末次

不要忘记取悦于对当前事件增加形式为me.parent.txtv = ID ,因此它将更新主窗体的ID。

我想我会在分裂数据库后受到影响,因为我听说findfirst在分割数据库时无法正常工作。 我不确定,但它应该可以在整合的数据库中正常工作,