ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 847|回复: 1

[求助] excel 2007 宏 cnn.open 开机运行第一次时可以用,关了再打开就不行了

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-1-23 17:18 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 ibilong 于 2019-1-23 18:05 编辑

excel 2007 开机运行第用宏时可以正常运行,关了再打开就不行了,执行到    cnn.Open Str_cnn  这句就卡住了,
2013,2016没问题

以下是代码
--------------------------------------------------------------------------

Sub DoSql_Execute1()

    Dim TT
    TT = Timer



    Application.ScreenUpdating = False
    Application.DisplayAlerts = False

    Sheets(2).Cells.ClearContents
    Sheets(3).Cells.ClearContents
    Sheets(4).Cells.ClearContents
    Sheets(5).Cells.ClearContents
    Sheets(6).Cells.ClearContents
    Sheets(9).Cells.ClearContents

    Dim Sql1 As String, Sql2 As String, Sql3 As String, Sql4 As String, Sql5 As String, Sql6 As String, Sql7 As String, Sql8 As String
    Sql1 = Sheets(1).Range("B3").Value
    Sql2 = Sheets(1).Range("C3").Value
    Sql3 = Sheets(1).Range("D3").Value
    Sql4 = Sheets(1).Range("B5").Value
    Sql5 = Sheets(1).Range("C5").Value
    Sql6 = Sheets(1).Range("B7").Value
    Sql7 = Sheets(1).Range("C7").Value
    Sql8 = Sheets(1).Range("B9").Value


    if1 = Sheets(1).Range("A19").Value
    if2 = Sheets(1).Range("A21").Value
    if3 = Sheets(1).Range("A23").Value



Dim a
With Application.FileDialog(msoFileDialogFilePicker)
.AllowMultiSelect = False
.InitialFileName = ThisWorkbook.Path


If .Show = 0 Then
    MsgBox ("已取消打开文件,并清空本工作薄"): Exit Sub '判断是否打开文件,点击确定返回-1,点击取消返回0,若返回0 则取消打开文件,显示弹窗并停止运行。

Else
    Sheets(2).Select

Set a = Workbooks.Open(.SelectedItems(1))
a.Sheets(1).AutoFilterMode = False
a.Sheets(1).Range("A:XFD").Copy ThisWorkbook.Sheets(2).Range("A1")
a.Close False

End If
End With



    Dim cnn As Object, rst As Object
    Dim Mypath As String, Str_cnn As String, Sql As String

    Dim i As Long
    Set cnn = CreateObject("adodb.connection")
    '以上是第一步,后期绑定ADO
    '
    Mypath = ThisWorkbook.FullName
    If Application.Version < 12 Then
        Str_cnn = "Provider=Microsoft.jet.OLEDB.4.0;Extended Properties=Excel 8.0;Data Source=" & Mypath
    Else
        Str_cnn = "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0;Data Source=" & Mypath
    End If
    cnn.Open Str_cnn
    '以上是第二步,建立链接


    Sql = "SELECT a,b,c,d,e FROM [sheet2$] where e>" & Sql1 & " and (c>" & Sql2 & " or d>" & Sql3 & ") ORDER BY e DESC "
    'Sql语句,查询Sheet1表成绩大于80……姓名和成绩的记录
    Set rst = cnn.Execute(Sql)
    'cnn.Execute()执行SQL语句,始终得到一个新的记录集rst
    '以上是第三步,编写并使用SQL语句
    '


    Sheets(3).Select
    [a:z].ClearContents
    '清空[d:e]区域的值
    For i = 0 To rst.Fields.Count - 1
    '利用fields属性获取所有字段名,fields包含了当前记录有关的所有字段,fields.count得到字段的数量
    '由于Fields.Count下标为0,又从0开始遍历,因此总数-1
        Cells(1, i + 1) = rst.Fields(i).Name
    Next
    Range("a2").CopyFromRecordset rst
    '使用单元格对象的CopyFromRecordset方法将rst内容复制到D2单元格为左上角的单元格区域
    '以上是第四步,将SQL查询结果和字段名写入表格指定区域
    Columns("A:A").Select
    Selection.NumberFormatLocal = "yyyy/m/d h:mm"
    Range("a1").Select


    cnn.Close
    '关闭链接
    Set cnn = Nothing
    '释放内存



    MsgBox ("完成!并已另存为新工作薄!" & vbCrLf & "保存路径为宏工具所在位置" & vbCrLf & "用时:" & Format(Timer - TT, "#0.00") & " 秒")
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub


TA的精华主题

TA的得分主题

 楼主| 发表于 2019-1-24 10:03 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
宏是用office365做的
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-5-2 05:25 , Processed in 0.035366 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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