设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 3262|回复: 8
打印 上一主题 下一主题

[窗体] 求助:如何遍历窗体所有列,并返回该列字段名?

[复制链接]
跳转到指定楼层
1#
发表于 2010-2-25 20:43:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

如图,要批量把表转换成WORD表格,如何得到各列的字段名(产品ID,产品名称,供应商ID...等),从而写入WORD表格的首行

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2010-2-25 21:08:42 | 只看该作者
本帖最后由 todaynew 于 2010-2-25 21:11 编辑
41567
如图,要批量把表转换成WORD表格,如何得到各列的字段名(产品ID,产品名称,供应商ID...等),从而写入WORD表格的首行
caibo_T 发表于 2010-2-25 20:43

请参见《遍历--Access常用手段》一文。如果字段名是已知的,可参见《Word文件的导入导出》一文。
3#
 楼主| 发表于 2010-2-25 21:28:37 | 只看该作者
需要批量转换,所以字段名未知,看了《遍历--Access常用手段》,对我这个问题没有帮助啊
4#
发表于 2010-2-25 21:40:13 | 只看该作者
本帖最后由 todaynew 于 2010-2-25 21:51 编辑
需要批量转换,所以字段名未知,看了《遍历--Access常用手段》,对我这个问题没有帮助啊
caibo_T 发表于 2010-2-25 21:28

我想至少有两个方法:
1、用一个组合框或列表框,设其数据行来源类型为“字段列表”,行来源为所需的表,然后用组合框或列表框的Column属性取值来获得字段名。
2、用ADO中的Field对象的name属性获得字段名。

其中方法二可写成如下函数:
Function Fieldname(tbname As String) As String
'参数:tbname为表或查询名称
Dim rs As New ADODB.Recordset
Dim i As Long
rs.Open tbname, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
For i = 1 To rs.Fields.Count
    Fieldname = Fieldname & rs.Fields(i).Name & ";"
Next
End Function


得到字段名字符串后,可用Split函数分解为数组,以便在导出Word时使用。
5#
 楼主| 发表于 2010-2-25 23:04:16 | 只看该作者
谢谢楼上,运行通过,但要求遍历窗体中的列字段,而不是表,虽然窗体的数据源是表,但在窗体中隐藏了某些列,我只想得到窗体中显示的列字段名称(隐藏列不显示)
6#
发表于 2010-2-26 08:44:50 | 只看该作者
.........
你可以用ADO打开窗体(或子窗体)上的记录源啊
7#
发表于 2010-2-26 11:18:09 | 只看该作者
谢谢楼上,运行通过,但要求遍历窗体中的列字段,而不是表,虽然窗体的数据源是表,但在窗体中隐藏了某些列,我只想得到窗体中显示的列字段名称(隐藏列不显示)
caibo_T 发表于 2010-2-25 23:04

可把参数tbname写为一个查询的字符串,如:
"select 字段1,字段2,字段5 from 表名 where 字段5 = ‘中国导弹制造股份公司'"
8#
发表于 2010-2-26 12:42:36 | 只看该作者
学习。
9#
 楼主| 发表于 2010-2-27 11:12:23 | 只看该作者
问题解决了
Function ToWordFields() As String
    Dim ctl As Control
    Dim strSQL As String
    Dim strTemp(100) As String
    Dim i As Integer
   
   
    ToWordFields = ""
    '扫描子窗体上所有的控件,如果是文本框或者组合框,就判断是否被用户隐藏了
    For Each ctl In Me.自动生成word表格_人员信息_子窗体.Form.Controls
        '注意,这个判断还能继续添加,比如复选框也可以
        If ctl.ControlType = acTextBox Or _
            ctl.ControlType = acComboBox Then
            '如果用户隐藏了列,就说明用户不需要打印,在组织SQL语句的时候也不加进去了
            
            If ctl.ColumnHidden = False Then
                strTemp(ctl.ColumnOrder - 1) = "[" & ctl.ControlSource & "]"
            Else
                strTemp(ctl.ColumnOrder - 1) = ""
            End If
         End If
    Next
   
    For i = 0 To 99
      If (strTemp(i) <> "") Then
        If (ToWordFields = "") Then
          ToWordFields = strTemp(i)
        Else
          ToWordFields = ToWordFields & "," & strTemp(i)
        End If
      End If
    Next i
    'Debug.Print ToWordFields
End Function
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-11-15 13:10 , Processed in 0.103925 second(s), 34 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表