Function 使用函数在ms access中搜索整行并返回列名

Function 使用函数在ms access中搜索整行并返回列名,function,ms-access,vba,Function,Ms Access,Vba,我需要一点帮助。以前我一直使用IIF语句来获得这个输出,但是IIF有一些限制,现在我正在寻找一个函数(在MS Access中)来满足要求 挑战:需要在一行中搜索条件(例如标题00\Question..),如果/当找到匹配项时,它将使用带有查询的函数返回列名(例如FieldCategorization(标题00\Question))。单击下面的链接以查看表和所需输出 Microsoft access表: 查询的所需输出: 到目前为止,我搜索的是整个表,而不是每行搜索一行: Public Fun

我需要一点帮助。以前我一直使用IIF语句来获得这个输出,但是IIF有一些限制,现在我正在寻找一个函数(在MS Access中)来满足要求

挑战:需要在一行中搜索条件(例如标题00\Question..),如果/当找到匹配项时,它将使用带有查询的函数返回列名(例如FieldCategorization(标题00\Question))。单击下面的链接以查看表和所需输出

Microsoft access表:

查询的所需输出:

到目前为止,我搜索的是整个表,而不是每行搜索一行:

Public Function FieldCategorization(TblName As String, Criteria As Long) As String
    Set dbs = CurrentDb
    Set rs = dbs.OpenRecordset(TblName)
    Dim fld As DAO.Field

    ' MyValue = 224803 ' T00 = Title 00\Question\First Name Text
    ' MyValue = 224814 ' AB00 = Abbreviation 00
    MyValue = Criteria

    'MsgBox "TblName: " & TblName & vbCrLf & "Criteria: " & Criteria

    rs.MoveFirst
    ' Move through each row in the recordset
    'Do While Not rs.EOF
        For Each fld In rs.Fields
            If fld = MyValue Then
                FieldCategorization = fld.Name
            End If
        Next fld
    rs.MoveNext
    'Loop

End Function

今天我们做了一些类似的事情。下面的例子非常简单,但我认为它包含了您要查找的所有元素

    dim fld as fields
    dim rst, rstW as recordset

    MyValue = "Title 00\Question"

    Set dbs = currentdB
    Set rst = dbs.openrecordset ("table1")
    Set rstW = dbs.openrecordset  ("table2")

    rst.movefirst
    Do while not rst.eof
       for each fld in rst.fields
           if me(fld.name) = MyValue then
               rstW.addnew
               rstW!Title00 = fld.name
               rstW.update
           end if
       next fld
       rst.movenext
   Loop

你的IIF是什么样子的?你所需要的只是两个相似的IIF表达式,比如:
Title 00:IIF(左([T_Val_00_AV],8)=“Title 00”,“T_Val_00_AV”,IIF(左([T_Val_01_AV],8)=“Title 00”,“T_Val_01_AV”,等等…)
。抱歉,我懒得把这一切都说出来。iif声明是错误的。然而,这个表有超过14列,因此触及了驱动函数解决方案需求的iif语句的限制。我不知道你是如何产生你想要的结果的。请将示例数据和预期结果添加为文本,听起来好像您试图将数据库视为电子表格。在标准化数据库(可以使用本机查询)或电子表格(可以使用VBA搜索“行”和“列”)中会容易得多。geeFlo,感谢您的输入。我不想创建一个表,只想在找到搜索条件时搜索一行并返回列的名称(基于每行)。例如,这是一个很好的开始,但它正在尝试处理孔表,而不是一行。WHILE循环应该带您遍历整个表(所有记录),因为循环会遍历每个字段。如果要搜索更多值,只需展开If语句如果只需要该行,则删除while-loopgeeFlo,这是非常有用的指导。我还是卡住了(谢谢你的耐心)。最终需要在查询中多次使用该函数,例如(在查询中):FieldCategorization(“TblName”)例如(在查询中):Title 00:FieldCategorization(“TblName”,“Title 00\Question”)缩写00:FieldCategorization(“TblName”,“缩写00”)查询(将while循环从函数中取出)位于“Title 00”处,返回所有字段的“T_Val_00_AV”(不正确,根据上述示例,部分字段应为“T_Val_03_AV”),然后“缩写词00”列为空