2010-08-06 74 views
3

我从MS Query中创建的查询中导入数据。 可以说,查询编辑器中的列按A,B,C,D,E,F顺序排列。 一旦我保存查询,返回数据到Excel,导入的数据有一个新的列顺序Excel导入SQL数据,但一旦导入就更改1列的顺序

A,B,C,F,D,E - 注意F列移到D处。

有关如何解决此问题的任何想法?

谢谢你们。假设变量正确定义,而忽视了代码试图做的,如果你愿意,在保留部分没有工作

For Each wks In ThisWorkbook.Worksheets 

    Set qt = wks.QueryTables(1) 
    qt.PreserveColumnInfo = True 
    qt.PreserveFormatting = True 


     If wks.Name <> "Master" And wks.Name <> "Parameters" Then 


     wks.Range("A2:A1000").EntireRow.Copy Destination:=Worksheets("Master").Range("A65536").End(xlUp).Offset(1, 0) 




     End If 
    Next wks 

回答

4

有叫PreserveColumnInfoPreserveFormattingQueryTable对象,这将有助于你出的两个属性。 (还有AdjustColumnWidth,但我不确定是否需要担心这一点)。你应该能够使用类似的代码如下,以帮助保护列的信息:

Sub PreserveQueryTable() 
    Dim ws As Worksheet 
    Dim qt As QueryTable 

    Set ws = ActiveSheet 

    Set qt = ws.QueryTables(0) ' <== I am not sure if this should be a  ' 
           '  0 or a 1. I think it is a 0.   ' 

    qt.PreserveColumnInfo = True 
    qt.PreserveFormatting = True 

End Sub 
+0

哈哈大家好本,有0,我得到的对象定义的错误,用1我拿到剧本超出范围的错误...有什么想法吗?谢谢! – EKet 2010-08-06 19:01:29

+0

@Ehsan你知道哪一行会抛出错误吗?如果您在使用1时遇到脚本超出范围错误,则可能使用0的正确数字。请确保在包含数据的工作表上使用此数字。我希望我能记得还有什么要检查,但没有数据库连接的Excel工作表,我不知道还有什么要看。 – 2010-08-06 19:11:05

+0

它将它抛出Set qt = ws.QueryTables(0)...我正在为每个循环做一个。我提供了代码。谢谢本 – EKet 2010-08-06 19:52:02