用sql语句查询excel中的数据

 
'--**************************************************************************************************************
'--**************************************************************************************************************
Public Sub P02_核算项目汇总_页签_获取_P01_凭证_页签中的_辅助核算数据()
'**********根据查询条件,对数据源进行查询***********************
'--------------调用jch01-03过程,最后一次检查和设置查询条件
'    Application.ScreenUpdating = False        '关闭屏幕刷新
    '---被调用
    '--该过程,一般放在<明细过程>----的<开端处>
    '--******************************************----进度条初始化--开始
     If Zong_BuZhou = 0 Then
         Zong_BuZhou = 10
     End If
     DangQian_BuZhou = DangQian_BuZhou + 1
     MDF_进度条.Label1.Caption = "  步    骤:第 < " & DangQian_BuZhou & " > 步  "                        '--进度条--(第×步)
     MDF_进度条.Label2.Caption = "  过 程 名:P02_核算项目汇总_页签_ADO汇总表查询_模拟透视表  "            '--**进度条--(×××过程)
     MDF_进度条.Label3.Caption = "  当前记录:< >  "                                                      '--进度条
     MDF_进度条.Label4.Caption = "  记录总数:< >  "                                                      '--进度条
        MDF_进度条.TextBox5.Text = "记录名称:< >  "                                                      '--进度条
     MDF_进度条.Label8.Width = 0                                                                          '--进度条---(刚开始长度为0)
     MDF_进度条.Label8.Caption = " "                                                                      '--进度条---(一般为空,只是用来展示)
     MDF_进度条.Label9.Caption = " "                                                                      '--进度条
     MDF_进度条.Label10.Width = 405 * ((DangQian_BuZhou) / (Zong_BuZhou))                                 '--汇总--进度条---(刚开始长度为0)/其中440是最大长度
     MDF_进度条.Label11.Caption = CStr(Int((DangQian_BuZhou) / (Zong_BuZhou) * 100)) + "%"                '--汇总--进度条
     DoEvents                                                                                             '--释放资源
     XunHuan_CiShu = 1
     'Sleep 3000                                                                                          '--暂停时间(1000表示等待1秒 / 3000表示等待3秒)
    '--******************************************----进度条初始化--结束
'1-----------------定义和数据库相关的变量-----------------------
    JianCha_TongGuo = True
    YanSe_1 = RGB(174, 170, 170)                                     '--标题行,第1行---深灰色:
    YanSe_2 = RGB(189, 215, 238)                                     '--aj--as/---------深蓝色:
    YanSe_3 = RGB(248, 203, 173)                                     '--at--av/---------橘红色:
    YanSe_4 = RGB(180, 198, 231)                                     '--aw--ba/--------灰蓝色:
    YanSe_5 = RGB(198, 224, 180)                                     '--bb--bh/--------绿色:
    YanSe_6 = RGB(255, 230, 153)                                     '--bi--br/----------橘黄色:
    Dim ZhHang_1 As Long                   '数据源表的最后行
    Dim Lie_1 As Long                      '数据源表的列号
    Dim ZhLie_1 As Long                    '数据源表的最后列
    
    Dim GeShu As Long                      '数据源表的核算项目类型的个数
    Dim Hang_2 As Long                     '目的数据表的行
    Dim ZhHang_2 As Long                   '目的数据表的最后行
    Dim Lie_2 As Long                      '目的数据表的列
    Dim mudiyeqian As String               '目的数据工作簿页签的类型
    Dim mydata As String                   '数据源工作簿名字
    Dim mytable As String                  '数据源工作簿的页签的名字
    Dim SQL As String                      '查询语句
    Dim BL_核算项目列号 As String
    Dim BL_核算项目类型 As String
    Dim BL_核算项目编码 As String
    Dim BL_核算项目名称 As String
    '-------------------------------------
    Dim cnn As ADODB.Connection            '定义一个ADO的Connection对象
    Dim rs As ADODB.Recordset              '定义一个ADO的Recordset对象
    '-------------------------------------
    mudiyeqian = "P02_核算项目汇总"                                               '--目的数据工作簿页签的名字
    mytable = "P01_凭证"                                                      '--数据源工作簿的工作表(页签的)名字(worksheets(2).name)
    With Worksheets(mudiyeqian)
        .Cells.Interior.ColorIndex = xlNone                                          '--取消颜色
         If .AutoFilterMode = True Then                                              '--原来有自动筛选的按钮,则取消
               .Rows("1:1").AutoFilter
         End If
    End With
    With Worksheets(mytable)
         If .AutoFilterMode = True Then                                              '--原来有自动筛选的按钮,则取消
               .Rows("1:1").AutoFilter
         End If
    End With
    '-------------------------------------
    With Worksheets(mudiyeqian)
        .Rows("2:1001234").Delete                                                    '--删除数据,而不是清除数据,以为清除数据,可能会造成空记录的情况
        .Cells(1, 1).Value = "核算项目列号"
        .Cells(1, 2).Value = "核算项目类别"
        .Cells(1, 3).Value = "核算项目编码"
        .Cells(1, 4).Value = "核算项目名称"
    End With
    Dim BL_mdf标志_行是否存在  As Boolean                                             '--判断mdf标志行是否存在,如果存在,则继续,不存在则增加一行
    Dim BL_mdf标志_列号  As Integer                                                   '--强制在第2行,增加mdf标志行,作为数值引导行
    Dim BL_mdf标志_字符  As String
    BL_mdf标志_字符 = "mdf_SQL查询_引导标志"                                                  '--主要为了避免有的字段有数据,但是查询不到的情况
    With Worksheets(mytable)
         ZhLie_1 = .Range("DZ1").End(xlToLeft).Column                                 '--从DZ列开始向右计算,判断最后列的列号
         For Lie_1 = 1 To ZhLie_1
              If .Cells(2, Lie_1).Value = BL_mdf标志_字符 Then
                     BL_mdf标志_行是否存在 = True
                    .Rows("2:2").Delete
                     GoTo AAA
              End If
         Next
    End With
AAA:
    With Worksheets(mytable)
       .Rows("2:2").Insert Shift:=xlDown                                             '--插入标志行
       '--插入mdf引导标志的列,请根据实际情况调整
        For Lie_1 = 1 To ZhLie_1
             If InStr(.Cells(1, Lie_1).Value, "核算项目") > 0 Then
                  .Cells(2, Lie_1).Value = BL_mdf标志_字符
             End If
             If InStr(.Cells(1, Lie_1).Value, "编码") > 0 Then
                  .Cells(2, Lie_1).Value = BL_mdf标志_字符
             End If
             If InStr(.Cells(1, Lie_1).Value, "名称") > 0 Then
                  .Cells(2, Lie_1).Value = BL_mdf标志_字符
             End If
        Next
    End With
    With Worksheets(mytable)
          ZhHang_1 = 0
          ZhHang_1 = .Cells(.Rows.Count, 1).End(xlUp).Row
          If ZhHang_1 < .Cells(.Rows.Count, 2).End(xlUp).Row Then
               ZhHang_1 = .Cells(.Rows.Count, 2).End(xlUp).Row
          End If
          If ZhHang_1 < .Cells(.Rows.Count, 3).End(xlUp).Row Then
               ZhHang_1 = .Cells(.Rows.Count, 3).End(xlUp).Row
          End If
          If ZhHang_1 < .Cells(.Rows.Count, 4).End(xlUp).Row Then
               ZhHang_1 = .Cells(.Rows.Count, 4).End(xlUp).Row
          End If
          If ZhHang_1 < .Cells(.Rows.Count, 5).End(xlUp).Row Then
               ZhHang_1 = .Cells(.Rows.Count, 5).End(xlUp).Row
          End If
          If ZhHang_1 < .Cells(.Rows.Count, 6).End(xlUp).Row Then
               ZhHang_1 = .Cells(.Rows.Count, 6).End(xlUp).Row
          End If
          If ZhHang_1 < .Cells(.Rows.Count, 7).End(xlUp).Row Then
               ZhHang_1 = .Cells(.Rows.Count, 7).End(xlUp).Row
          End If
          If ZhHang_1 < .Cells(.Rows.Count, 8).End(xlUp).Row Then
               ZhHang_1 = .Cells(.Rows.Count, 8).End(xlUp).Row
          End If
         .Rows(ZhHang_1 + 1 & ":1001234").Delete                                       '--删除数据,而不是清除数据,以为清除数据,可能会造成空记录的情况
    End With
 
'2----------------连接数据库-----------------------------------
'   mydata = ThisWorkbook.Path & "数据源.xls"              '数据源工作簿的名字
    mydata = ThisWorkbook.FullName                          '数据源工作簿的名字
    Set cnn = New ADODB.Connection
    With cnn
         '--*****************************************************************************************************excel不同版本需要不同的驱动
          '---excel2003版本(office2003版本)---该驱动查询的数据范围较小(只能查询数据源低于8022行记录)
         '.Provider = "microsoft.jet.oledb.4.0"
         '.ConnectionString = "Data Source=" & mydata & ";Extended Properties=""Excel 8.0;HDR=YES;IMEX=1;"""
          '---excel2010版本(office2010版本)---该驱动查询的数据范围较大(可以查询数据源低于10万行记录)
         .Provider = "Microsoft.ACE.OLEDB.12.0"
         .ConnectionString = "Data Source=" & mydata & ";Extended Properties=""Excel 12.0;HDR=YES;IMEX=1;"""
          '---执行连接
         .Open
    End With
   '参数解释:
   'IMEX=1 解决数字与字符混合时,识别不正常的情况
   'HDR=YES 有两个值:YES/NO,表示第一行是否字段名,默认是YES,第一行是字段名
   '--为了解决一个字段中,既有数字,又有文本的情况,还需要对注册表做如下处理
   '--32位操作系统
   '--Excel 97--HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Jet/3.5/Engines/Excel
   '--Excel 2000 and later versions---HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Jet/4.0/Engines/Excel
   '--64位操作系统
   '--HKEY_LOCAL_MACHINESOFTWAREWow6432NodeMicrosoftJet.0EnginesEXCEL
   '--将键值TypeGuessRow改为0
   '--但是,如果大的数据在表的后面位置的话,这个问题还是有可能发生的。所以要彻底的解决的话,在打开一个recordset前,就要先定义好它的字段长度了
   '--或者,把包含一个字段中,特别长的数据的记录放置到第2行中,即第1条记录中
    With Worksheets(mytable)                                                           '--重要;设置相关字段区域的单元格格式,
          .Columns("AH:BE").NumberFormatLocal = "@"
    End With
   For GeShu = 1 To 8                                                                               '---*****************************************指定查询的字段序号
         BL_核算项目列号 = "凭证_核算项目列号" & GeShu                                              '---为什么个数= 4查询不到数据???
         BL_核算项目类型 = "核算项目" & GeShu
         BL_核算项目编码 = "编码" & GeShu
         BL_核算项目名称 = "名称" & GeShu
        '----------------------------------------------------------------------
         SQL = " select   '" & BL_核算项目列号 & "'  AS  核算项目列号 " _
             & "           ,  '''' +   ltrim(rtrim(" & BL_核算项目类型 & "))  AS  核算项目类别  " _
             & "           ,  '''' +   ltrim(rtrim(" & BL_核算项目编码 & "))  AS  核算项目编码  " _
             & "           ,  '''' +   ltrim(rtrim(" & BL_核算项目名称 & "))  AS  核算项目名称  " _
             & " from   [" & mytable & "$]  " _
             & " where   " & BL_核算项目类型 & " <>  '' and   " & BL_核算项目类型 & "  <>  '" & BL_mdf标志_字符 & "'   "
         Set rs = New ADODB.Recordset
         rs.Open SQL, cnn, adOpenKeyset, adLockOptimistic
        '--如果提示:运行时错误 '-2147467259 (80004005)' 用于查看已链接的Microsoft Excel工作表的连接,已经丢失。/
        '--有一列的数据其实是“数字字符串”(只有0-9的数字符),但不小心将那一列的数据格式设定为日期格式,导致出现了“负日期”
        '--处理方法是:将该列改回 文本或数值 格式以后,就没有上述问题了。,建议通过程序在连接前,先自动设置格式就可以避免了
        '4-------------复制字段名(即复制标题)-------------------------
        'Worksheets(mudiyeqian).Rows("1:1").ClearContents                                                    '--清除标题行的数据,准备重写标题
        'Hang_2 = 1
        'For Lie_2 = 0 To rs.Fields.Count - 1
              'Sheets(mudiyeqian).Cells(Hang_2, Lie_2 + 1) = rs.Fields(Lie_2).Name                            'sheets(1)表示在工作簿中排在第二位的工作表
        'Next
        '---------------以上内容也可以的,但是效率会非常低,所以用拷贝的方法--------------------------
         With Worksheets(mudiyeqian)
              ZhHang_2 = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
             .Cells(ZhHang_2, 1).CopyFromRecordset rs
              ZhHang_2 = .Cells(.Rows.Count, 1).End(xlUp).Row
             .Range(.Cells(ZhHang_2, 1), .Cells(ZhHang_2, 4)).Interior.Color = YanSe_6
         End With
        '----------------------------------------
        '--只清除记录,不断开连接
         rs.Close
         Set rs = Nothing
    Next
'6-----------------------------------------------------
    '--因为上面已经清除记录了,这里只需要关闭数据库即可
    cnn.Close
    Set cnn = Nothing
'------------------根据jch01_01和jch01_03设置jch01_05的格式-------------------------------------------------
'      Sheets("P02_核算项目汇总").Activate                    '激活选择jch01-05
         With Worksheets(mudiyeqian)
              .Rows("1:1").RowHeight = 50
         End With
'6-----------------------------------------------------
    '--删除引导标志行
    With Worksheets(mytable)
         ZhLie_1 = .Range("DZ1").End(xlToLeft).Column                                 '--从DZ列开始向右计算,判断最后列的列号
         For Lie_1 = 1 To ZhLie_1
              If .Cells(2, Lie_1).Value = BL_mdf标志_字符 Then
                     BL_mdf标志_行是否存在 = True
                    .Rows("2:2").Delete
                     GoTo BBB
              End If
         Next
    End With
BBB:
'---------------------------------------------------------------------------------------------
'      Application.ScreenUpdating = True        '开启屏幕刷新
 
End Sub
 
 
Public Sub P02_核算项目汇总_页签_获取_Q02_期初_页签中的_辅助核算数据()
'**********根据查询条件,对数据源进行查询***********************
    '---A03_辅助项透视---P03_核算项目透视_4.将[A00_会计科目]和[P01_凭证]进行替换
     Dim YesNo_XuanZe As String                                                                    '选择的按钮
     YesNo_XuanZe = MsgBox("凭证列表中的---[辅助核算明细] ,已获取到完成 " _
               & vbCrLf & "" _
               & vbCrLf & "---是否[同时]获取 " _
               & vbCrLf & "" _
               & vbCrLf & "---工作表[Q02_期初]---[辅助核算明细]数据" _
               & vbCrLf & "" _
               & vbCrLf & "注意:" _
               & vbCrLf & "" _
               & vbCrLf & "如果,工作表[Q02_期初]中---[无数据], " _
               & vbCrLf & "" _
               & vbCrLf & "建议,点击[否], 跳过该步骤" _
               & vbCrLf & "" _
               & vbCrLf & "" _
               & vbCrLf & "点击 [是] , 获取 [期初核算明细]" _
               & vbCrLf & "" _
               & vbCrLf & "点击 [否] , 跳过 [期初核算明细]" _
               & vbCrLf & "    ", vbYesNo + vbDefaultButton1 + vbInformation, "提醒")
     If YesNo_XuanZe = vbNo Then
          Exit Sub                                            '点击<否>,停止运行
     ElseIf YesNo_XuanZe = vbYes Then
          '---                                                '点击<是>,继续运行
     End If
'--------------调用jch01-03过程,最后一次检查和设置查询条件
'    Application.ScreenUpdating = False        '关闭屏幕刷新
    '---被调用
    '--该过程,一般放在<明细过程>----的<开端处>
    '--******************************************----进度条初始化--开始
     If Zong_BuZhou = 0 Then
         Zong_BuZhou = 10
     End If
     DangQian_BuZhou = DangQian_BuZhou + 1
     MDF_进度条.Label1.Caption = "  步    骤:第 < " & DangQian_BuZhou & " > 步  "                        '--进度条--(第×步)
     MDF_进度条.Label2.Caption = "  过 程 名:P02_核算项目汇总_页签_ADO汇总表查询_模拟透视表  "            '--**进度条--(×××过程)
     MDF_进度条.Label3.Caption = "  当前记录:< >  "                                                      '--进度条
     MDF_进度条.Label4.Caption = "  记录总数:< >  "                                                      '--进度条
        MDF_进度条.TextBox5.Text = "记录名称:< >  "                                                      '--进度条
     MDF_进度条.Label8.Width = 0                                                                          '--进度条---(刚开始长度为0)
     MDF_进度条.Label8.Caption = " "                                                                      '--进度条---(一般为空,只是用来展示)
     MDF_进度条.Label9.Caption = " "                                                                      '--进度条
     MDF_进度条.Label10.Width = 405 * ((DangQian_BuZhou) / (Zong_BuZhou))                                 '--汇总--进度条---(刚开始长度为0)/其中440是最大长度
     MDF_进度条.Label11.Caption = CStr(Int((DangQian_BuZhou) / (Zong_BuZhou) * 100)) + "%"                '--汇总--进度条
     DoEvents                                                                                             '--释放资源
     XunHuan_CiShu = 1
     'Sleep 3000                                                                                          '--暂停时间(1000表示等待1秒 / 3000表示等待3秒)
    '--******************************************----进度条初始化--结束
'1-----------------定义和数据库相关的变量-----------------------
    YanSe_1 = RGB(174, 170, 170)                                     '--标题行,第1行---深灰色:
    YanSe_2 = RGB(189, 215, 238)                                     '--aj--as/---------深蓝色:
    YanSe_3 = RGB(248, 203, 173)                                     '--at--av/---------橘红色:
    YanSe_4 = RGB(180, 198, 231)                                     '--aw--ba/--------灰蓝色:
    YanSe_5 = RGB(198, 224, 180)                                     '--bb--bh/--------绿色:
    YanSe_6 = RGB(255, 230, 153)                                     '--bi--br/----------橘黄色:
    Dim ZhHang_1 As Long                   '数据源表的最后行
    Dim GeShu As Long                      '数据源表的核算项目类型的个数
    Dim Hang_2 As Long                     '目的数据表的行
    Dim ZhHang_2 As Long                   '目的数据表的最后行
    Dim Lie_2 As Long                      '目的数据表的列
    Dim mudiyeqian As String               '目的数据工作簿页签的类型
    Dim mydata As String                   '数据源工作簿名字
    Dim mytable As String                  '数据源工作簿的页签的名字
    Dim SQL As String                      '查询语句
    Dim BL_核算项目列号 As String
    Dim BL_核算项目类型 As String
    Dim BL_核算项目编码 As String
    Dim BL_核算项目名称 As String
    '-------------------------------------
    Dim cnn As ADODB.Connection            '定义一个ADO的Connection对象
    Dim rs As ADODB.Recordset              '定义一个ADO的Recordset对象
    '-------------------------------------
    mudiyeqian = "P02_核算项目汇总"                                               '--目的数据工作簿页签的名字
    mytable = "Q02_期初"                                                      '--数据源工作簿的工作表(页签的)名字(worksheets(2).name)
    With Worksheets(mudiyeqian)
        .Cells.Interior.ColorIndex = xlNone                                          '--取消颜色
         If .AutoFilterMode = True Then                                              '--原来有自动筛选的按钮,则取消
               .Rows("1:1").AutoFilter
         End If
    End With
    With Worksheets(mytable)
         If .AutoFilterMode = True Then                                              '--原来有自动筛选的按钮,则取消
               .Rows("1:1").AutoFilter
         End If
    End With
    '-------------------------------------
'    With Worksheets(mudiyeqian)
'        .Rows("2:1001234").Delete                                                    '--删除数据,而不是清除数据,以为清除数据,可能会造成空记录的情况
'        .Cells(1, 1).Value = "核算项目列号"
'        .Cells(1, 2).Value = "核算项目类别"
'        .Cells(1, 3).Value = "核算项目编码"
'        .Cells(1, 4).Value = "核算项目名称"
'    End With
    Dim BL_mdf标志_行是否存在  As Boolean                                             '--判断mdf标志行是否存在,如果存在,则继续,不存在则增加一行
    Dim BL_mdf标志_列号  As Integer                                                   '--强制在第2行,增加mdf标志行,作为数值引导行
    Dim BL_mdf标志_字符  As String
    BL_mdf标志_字符 = "mdf_SQL查询_引导标志"                                                  '--主要为了避免有的字段有数据,但是查询不到的情况
    With Worksheets(mytable)
         ZhLie_1 = .Range("DZ1").End(xlToLeft).Column                                 '--从DZ列开始向右计算,判断最后列的列号
         For Lie_1 = 1 To ZhLie_1
              If .Cells(2, Lie_1).Value = BL_mdf标志_字符 Then
                     BL_mdf标志_行是否存在 = True
                    .Rows("2:2").Delete
                     GoTo AAA
              End If
         Next
    End With
AAA:
    With Worksheets(mytable)
       .Rows("2:2").Insert Shift:=xlDown                                              '--插入标志行
       '--插入mdf引导标志的列,请根据实际情况调整
        For Lie_1 = 1 To ZhLie_1
             If InStr(.Cells(1, Lie_1).Value, "核算项目") > 0 Then
                  .Cells(2, Lie_1).Value = BL_mdf标志_字符
             End If
             If InStr(.Cells(1, Lie_1).Value, "编码") > 0 Then
                  .Cells(2, Lie_1).Value = BL_mdf标志_字符
             End If
             If InStr(.Cells(1, Lie_1).Value, "名称") > 0 Then
                  .Cells(2, Lie_1).Value = BL_mdf标志_字符
             End If
        Next
    End With
    
    With Worksheets(mytable)
          ZhHang_1 = 0
          ZhHang_1 = .Cells(.Rows.Count, 1).End(xlUp).Row
          If ZhHang_1 < .Cells(.Rows.Count, 2).End(xlUp).Row Then
               ZhHang_1 = .Cells(.Rows.Count, 2).End(xlUp).Row
          End If
          If ZhHang_1 < .Cells(.Rows.Count, 3).End(xlUp).Row Then
               ZhHang_1 = .Cells(.Rows.Count, 3).End(xlUp).Row
          End If
          If ZhHang_1 < .Cells(.Rows.Count, 4).End(xlUp).Row Then
               ZhHang_1 = .Cells(.Rows.Count, 4).End(xlUp).Row
          End If
          If ZhHang_1 < .Cells(.Rows.Count, 5).End(xlUp).Row Then
               ZhHang_1 = .Cells(.Rows.Count, 5).End(xlUp).Row
          End If
          If ZhHang_1 < .Cells(.Rows.Count, 6).End(xlUp).Row Then
               ZhHang_1 = .Cells(.Rows.Count, 6).End(xlUp).Row
          End If
          If ZhHang_1 < .Cells(.Rows.Count, 7).End(xlUp).Row Then
               ZhHang_1 = .Cells(.Rows.Count, 7).End(xlUp).Row
          End If
          If ZhHang_1 < .Cells(.Rows.Count, 8).End(xlUp).Row Then
               ZhHang_1 = .Cells(.Rows.Count, 8).End(xlUp).Row
          End If
         .Rows(ZhHang_1 + 1 & ":1001234").Delete                                       '--删除数据,而不是清除数据,以为清除数据,可能会造成空记录的情况
    End With
'2----------------连接数据库-----------------------------------
'   mydata = ThisWorkbook.Path & "数据源.xls"              '数据源工作簿的名字
    mydata = ThisWorkbook.FullName                          '数据源工作簿的名字
    Set cnn = New ADODB.Connection
    With cnn
         '--*****************************************************************************************************excel不同版本需要不同的驱动
          '---excel2003版本(office2003版本)---该驱动查询的数据范围较小(只能查询数据源低于8022行记录)
         '.Provider = "microsoft.jet.oledb.4.0"
         '.ConnectionString = "Data Source=" & mydata & ";Extended Properties=""Excel 8.0;HDR=YES;IMEX=1;"""
          '---excel2010版本(office2010版本)---该驱动查询的数据范围较大(可以查询数据源低于10万行记录)
         .Provider = "Microsoft.ACE.OLEDB.12.0"
         .ConnectionString = "Data Source=" & mydata & ";Extended Properties=""Excel 12.0;HDR=YES;IMEX=1;"""
          '---执行连接
         .Open
    End With
   '参数解释:
   'IMEX=1 解决数字与字符混合时,识别不正常的情况
   'HDR=YES 有两个值:YES/NO,表示第一行是否字段名,默认是YES,第一行是字段名
   '--为了解决一个字段中,既有数字,又有文本的情况,还需要对注册表做如下处理
   '--32位操作系统
   '--Excel 97--HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Jet/3.5/Engines/Excel
   '--Excel 2000 and later versions---HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Jet/4.0/Engines/Excel
   '--64位操作系统
   '--HKEY_LOCAL_MACHINESOFTWAREWow6432NodeMicrosoftJet.0Engines
   '--将键值TypeGuessRow改为0
   '--但是,如果大的数据在表的后面位置的话,这个问题还是有可能发生的。所以要彻底的解决的话,在打开一个recordset前,就要先定义好它的字段长度了
   '--或者,把包含一个字段中,特别长的数据的记录放置到第2行中,即第1条记录中
   For GeShu = 1 To 8
         BL_核算项目列号 = "期初_核算项目列号" & GeShu
         BL_核算项目类型 = "核算项目" & GeShu
         BL_核算项目编码 = "编码" & GeShu
         BL_核算项目名称 = "名称" & GeShu
        '----------------------------------------------------------------------
         SQL = " select   '" & BL_核算项目列号 & "'  AS  核算项目列号 " _
             & "           ,  '''' +   ltrim(rtrim(" & BL_核算项目类型 & "))  AS  核算项目类别  " _
             & "           ,  '''' +   ltrim(rtrim(" & BL_核算项目编码 & "))  AS  核算项目编码  " _
             & "           ,  '''' +   ltrim(rtrim(" & BL_核算项目名称 & "))  AS  核算项目名称  " _
             & " from   [" & mytable & "$]  " _
             & " where   " & BL_核算项目类型 & " <>  '' and   " & BL_核算项目类型 & "  <>  '" & BL_mdf标志_字符 & "'   "
         Set rs = New ADODB.Recordset
         rs.Open SQL, cnn, adOpenKeyset, adLockOptimistic
        '--如果提示:运行时错误 '-2147467259 (80004005)' 用于查看已链接的Microsoft Excel工作表的连接,已经丢失。/
        '--有一列的数据其实是“数字字符串”(只有0-9的数字符),但不小心将那一列的数据格式设定为日期格式,导致出现了“负日期”
        '--处理方法是:将该列改回 文本或数值 格式以后,就没有上述问题了。,建议通过程序在连接前,先自动设置格式就可以避免了
        '4-------------复制字段名(即复制标题)-------------------------
        'Worksheets(mudiyeqian).Rows("1:1").ClearContents                                                    '--清除标题行的数据,准备重写标题
        'Hang_2 = 1
        'For Lie_2 = 0 To rs.Fields.Count - 1
              'Sheets(mudiyeqian).Cells(Hang_2, Lie_2 + 1) = rs.Fields(Lie_2).Name                            'sheets(1)表示在工作簿中排在第二位的工作表
        'Next
        '---------------以上内容也可以的,但是效率会非常低,所以用拷贝的方法--------------------------
         With Worksheets(mudiyeqian)
              ZhHang_2 = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
             .Cells(ZhHang_2, 1).CopyFromRecordset rs
              ZhHang_2 = .Cells(.Rows.Count, 1).End(xlUp).Row
             .Range(.Cells(ZhHang_2, 1), .Cells(ZhHang_2, 4)).Interior.Color = YanSe_6
         End With
        '----------------------------------------
        '--只清除记录,不断开连接
         rs.Close
         Set rs = Nothing
    Next
'6-----------------------------------------------------
    '--因为上面已经清除记录了,这里只需要关闭数据库即可
    cnn.Close
    Set cnn = Nothing
'------------------根据jch01_01和jch01_03设置jch01_05的格式-------------------------------------------------
'      Sheets("P02_核算项目汇总").Activate                    '激活选择jch01-05
         With Worksheets(mudiyeqian)
              .Rows("1:1").RowHeight = 50
         End With
'6-----------------------------------------------------
    '--删除引导标志行
    With Worksheets(mytable)
         ZhLie_1 = .Range("DZ1").End(xlToLeft).Column                                 '--从DZ列开始向右计算,判断最后列的列号
         For Lie_1 = 1 To ZhLie_1
              If .Cells(2, Lie_1).Value = BL_mdf标志_字符 Then
                    .Rows("2:2").Delete
                     GoTo BBB
              End If
         Next
    End With
BBB:
 
'---------------------------------------------------------------------------------------------
'      Application.ScreenUpdating = True        '开启屏幕刷新
 
End Sub