确定要应用于Excel工作表的DAO访问表字段的格式

时间:2014-03-04 18:08:09

标签: vba ms-access excel-vba access-vba excel

我在Access中使用CopyFromRecordset命令将一系列表复制到Excel中。不用担心这个过程。我的问题是使这个例程能够确定应该为工作簿的每个工作表列分配什么格式。我已经提取了表的字段对象类型值,并将它们与Field.Type属性的参考Microsoft Reference进行了比较。 (http://msdn.microsoft.com/en-us/library/ms526865(v=EXCHG.10).aspx)。不幸的是,与MS声明的值相比,返回的内容并不能准确反映Access中的定义。

1)日期字段返回与vbString

对应的Type值8

2)货币字段返回与vbDouble

对应的Type值5

3)文本字段返回Type值10,甚至没有列出

4)格式化的vbDouble返回Type值7,与vbDate相对应

对于Type值为3的整数字段,唯一似乎提供有效引用的返回值

如何获取有效的表字段格式参考,以便我可以正确格式化相应的工作表列?我真的不想创建一个引用表,它将为每个要提取的表中的每个字段提供所需的格式。很好的解决方案,但肯定不是很灵活,因为提取的表格结构是动态的,通过一系列CrossTab查询,而不是我可以轻松使用Excel模板,因为我读作一个解决方案。

我在这里误解了什么吗?

1 个答案:

答案 0 :(得分:1)

感谢您通过我的努力与我走向错误方向的链接和说明。 Ted上面引用的链接引导我Allen Brown's函数返回表格字段的格式化。结果,我能够实现我的目标。以下是具体的代码作为参考。

    'Write the Table Field Names to the Named Worksheet as Column Headers
    'and format the columns for the Table.Field format

        intRowCount = rst3.RecordCount
        intColumnCount = rst3.Fields.Count
        For i = 0 To intColumnCount - 1
            xlSheet.Cells(1, i + 1).Value = rst3.Fields(i).Name

            If i = 0 Then
                .Sheets(strTable).Columns(i + 1).EntireColumn.AutoFit
            End If

            If i < 3 Then
                .Sheets(strTable).Columns(i + 1).EntireColumn.HorizontalAlignment = xlCenter
            End If

            intFormat = CLng(rst3.Fields(i).Type)
            .Sheets(strTable).Columns(i + 1).EntireColumn.Select
            Select Case intFormat
                Case 3
                    Selection.NumberFormat = "00"
                Case 5
                    Selection.NumberFormat = "$#,##0.00"
                Case 7
                    Selection.NumberFormat = "#,##0"
                Case 8
                    Selection.NumberFormat = "yyyy-mm-dd"
                Case 10
                    Selection.NumberFormat = "@"
            End Select

        Next i      'Next Column - Table Field to be copied

它可能不是最有效的,因为我仍然在开发从Access中最好地使用Excel对象的方法。

如果有人改进了代码,我肯定会接受建议。再次感谢所有人。