ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 各位大师帮忙看下,谢谢!

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-7-5 08:15 | 显示全部楼层 |阅读模式
Function ExportToExcelCopyFromRecordset(ByVal WorkbookName As String, ByVal strSQL As String)
On Error GoTo Err_ExportToExcel
    Dim objExcel As Object
    Dim objBook  As Object
    Dim objSheet As Object
    Dim objRange As Object
    Dim rst      As Object
    Dim cnn      As Object
    Dim strFileName As String


    Dim lngRow As Long
    Dim lngColumn As Long
    Dim FirstRange As String


    Const xlLastCell = 11
    Const xlCenter = -4108
    Const xlEdgeLeft = 7
    Const xlEdgeTop = 8
    Const xlEdgeBottom = 9
    Const xlEdgeRight = 10
    Const xlInsideVertical = 11
    Const xlInsideHorizontal = 12
    Const xlContinuous = 1
    Const xlDiagonalDown = 5
    Const xlDiagonalUp = 6
    Const xlNone = -4142

    '根据当前版本取得对应的文件扩展名
    strExtName = ".xls"
    If Val(Application.Version) > 11 Then strExtName = ".xlsx"
    '取得另存为文件名
    With Application.FileDialog(2) 'msoFileDialogSaveAs
        .InitialFileName = WorkbookName & strExtName
        If Not .Show Then Exit Function
        strFileName = .SelectedItems(1)
        If Not strFileName Like "*" & strExtName Then
            strFileName = strFileName & strExtName
        End If
        If Len(Dir(strFileName)) > 0 Then Kill strFileName
    End With

    DoCmd.Hourglass True
    Set cnn = CurrentProject.Connection

    Set objExcel = CreateObject("Excel.Application")
    objExcel.Visible = False
    Set objBook = objExcel.Workbooks.Add
    'objBook.Worksheets.Add().Select
    Set objSheet = objBook.Worksheets.Add
    'Set objSheet = objBook.Worksheets("sheet1")
    objSheet.Name = WorkbookName '工作表名称
    '由于CopyFromRecordset 方法不返回字段标题,需要自己处理增加字段标题
    Set rst = CurrentProject.Connection.Execute(strSQL)
    For intI = 0 To rst.Fields.Count - 1
'        strName = ""
'        strName = rst.Fields(intI).Properties("Caption")
'        If strName = "" Then strName = rst.Fields(intI).Name
        objExcel.ActiveSheet.Cells(3, intI + 1) = rst.Fields(intI).Name
    Next
    objExcel.ActiveSheet.Range("A4").CopyFromRecordset cnn.Execute(strSQL)

    With objExcel.ActiveSheet.PageSetup
   ' .Orientation = xlLandscape
         '.LeftMargin = Application.CentimetersToPoints(2) '页边距:左(L)_1.9厘米
'    .RightMargin = Application.InchesToPoints(0.75)     '页边距:右(R)_1.9厘米
   ' .TopMargin = InchesToPoints(1)          '页边距:上(T)_2.5厘米
'    .BottomMargin = Application.InchesToPoints(1)       '页边距:下(B)_2.5厘米
    .PrintTitleRows = "$1:$2"
    .RightFooter = "第 &P 页,共 &N 页"   '页脚右设置为:页码
        '.PrintTitleColumns = "A:G"
    End With

    cnn.Close

objExcel.ActiveCell.SpecialCells(xlLastCell).SELECT
    lngRow = objExcel.ActiveCell.row
    lngColumn = objExcel.ActiveCell.Column

     objExcel.Cells(lngRow + 1, 6).formula = "=sum(F4:F" & lngRow & ")"
objExcel.Cells(lngRow + 1, 1) = "合计:"

    '格式化Excel
    Set objRange = objSheet.Range("A2", objExcel.ActiveCell).Offset(1, 0)
    objRange.SELECT

    With objRange
        .RowHeight = 16
        '.ColumnWidth = 50
        '.EntireColumn.AutoFit
        .VerticalAlignment = xlCenter      '垂直对齐 不引用excel控件的话只能使用xlCenter
        .HorizontalAlignment = xlCenter    '水平对齐 不引用excel控件的话只能使用xlCenter
        .WrapText = True                   '文字自动换行
        '.Font.Name = "Calibri"
        .Font.Size = 12
        .Borders(xlDiagonalDown).LineStyle = xlNone
        .Borders(xlDiagonalUp).LineStyle = xlNone
        .Borders(xlInsideVertical).LineStyle = xlContinuous
        .Borders(xlInsideHorizontal).LineStyle = xlContinuous
        .Borders(xlEdgeLeft).LineStyle = xlContinuous
        .Borders(xlEdgeTop).LineStyle = xlContinuous
        .Borders(xlEdgeBottom).LineStyle = xlContinuous
        .Borders(xlEdgeRight).LineStyle = xlContinuous

    End With
                      D = Now
                    objSheet.Rows(1).RowHeight = 29
                objExcel.Range("A1") = "乡镇卫生院发票汇总表"
               ' objExcel.Range("B2") = "录入日期:" & D

              objSheet.Columns("G:G").ColumnWidth = 20
            objExcel.ActiveWindow.SplitRow = 3      '拆分第一行
        objExcel.ActiveWindow.FreezePanes = True   '固定拆分
    objExcel.Range("A1:G1").Merge
    objExcel.Range("A2:G2").Merge
  objExcel.Range("A1").Font.Size = 20
objSheet.Range("A1:G1").Borders.LineStyle = 0
objExcel.Visible = True
    objBook.SaveAs strFileName

Set objRange = objSheet.Range("A1:G1")
    objRange.SELECT

    With objRange
    .VerticalAlignment = xlCenter      '垂直对齐 不引用excel控件的话只能使用xlCenter
        .HorizontalAlignment = xlCenter    '水平对齐 不引用excel控件的话只能使用xlCenter
       .Columns("B").ColumnWidth = 26
        .Columns("C").ColumnWidth = 18.5
         .Columns("D").ColumnWidth = 15
         .Columns("E").ColumnWidth = 22
         .Columns("F").ColumnWidth = 17
         .Columns("G").ColumnWidth = 20

    End With

       objSheet.Range("B4:B300").HorizontalAlignment = -4131
     objSheet.Range("A2:G2").Font.Size = 14
    objExcel.Cells(lngRow + 3, 1) = "开票人:": objExcel.Cells(lngRow + 3, 3) = "复核人:": objExcel.Cells(lngRow + 3, 5) = "发票接收人:"
   objSheet.Range("A" & lngRow + 3).Font.Size = 12: objSheet.Range("C" & lngRow + 3).Font.Size = 12: objSheet.Range("E" & lngRow + 3).Font.Size = 12

Exit_ExportToExcel:
    Set rst = Nothing
    Set cnn = Nothing
    Set objSheet = Nothing
    Set objBook = Nothing
    Set objExcel = Nothing

    DoCmd.Hourglass False
    Exit Function

Err_ExportToExcel:
    Resume Exit_ExportToExcel
End Function

第1个问题:无法运行下面代码                      第2个问题:如何修改成自动默认保存自定义路径,例:导出到E盘要目录,谢谢!
         '.LeftMargin = Application.CentimetersToPoints(2) '页边距:左(L)_1.9厘米
'    .RightMargin = Application.InchesToPoints(0.75)     '页边距:右(R)_1.9厘米
   ' .TopMargin = InchesToPoints(1)          '页边距:上(T)_2.5厘米
'    .BottomMargin = Application.InchesToPoints(1)       '页边距:下(B)_2.5厘米

TA的精华主题

TA的得分主题

发表于 2023-7-5 08:45 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
感觉这套代码要优化,太长了

TA的精华主题

TA的得分主题

发表于 2023-7-5 10:19 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
上传附件,说一下达到什么目的。。。

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-7-5 10:20 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
大师帮我优下,谢谢!

TA的精华主题

TA的得分主题

发表于 2023-7-5 10:33 | 显示全部楼层
冷酷的云 发表于 2023-7-5 10:20
大师帮我优下,谢谢!

三分之二是表格定义,四分之一是变量定义,实际的运算代码只有10%,所以没什么好优化的,格式定义就是个很个性化的东西;

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-7-5 11:19 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
fanyoulin 发表于 2023-7-5 10:33
三分之二是表格定义,四分之一是变量定义,实际的运算代码只有10%,所以没什么好优化的,格式定义就是个 ...

能否帮我实现下两个功能,1.导出自定义页边距 2.导出默认路径,不再提示选择框

TA的精华主题

TA的得分主题

发表于 2023-7-5 12:08 | 显示全部楼层
冷酷的云 发表于 2023-7-5 11:19
能否帮我实现下两个功能,1.导出自定义页边距 2.导出默认路径,不再提示选择框

1、打印参数的代码不用学习和记忆,先录制一个宏,参考截图,然后把注释的那几个关键因素读出来,再写到其它表格中;

     参数很多,但基本上看参数名字大致上就能知道那些参数是什么意思;

     用不到的参数行都是可以删除的;

2、默认路径我有些看不明白,当前主文件的路径是 thisworkbook.path,通常子文件会放在这个目录下;
1.png

TA的精华主题

TA的得分主题

发表于 2023-7-5 12:24 | 显示全部楼层
.PageSetup.HeaderMargin = Application.CentimetersToPoints(1.5)  '以厘米为单位设置大小, '页眉
.PageSetup.FooterMargin = Application.CentimetersToPoints(1.5)   '以厘米为单位设置大小, '页脚
.PageSetup.TopMargin = Application.CentimetersToPoints(2.5)  '以厘米为单位设置大小, '上边距
.PageSetup.BottomMargin = Application.CentimetersToPoints(2.5)  '以厘米为单位设置大小,'下边距
.PageSetup.LeftMargin = Application.CentimetersToPoints(2.5)  '以厘米为单位设置大小, '左边距
.PageSetup.RightMargin = Application.CentimetersToPoints(2.5)   '以厘米为单位设置大小,'右边距
image.png
image.png

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-7-5 14:40 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 冷酷的云 于 2023-7-5 14:42 编辑

自定义函数不支持,显示方法成员未找到,谢谢了!

TA的精华主题

TA的得分主题

发表于 2023-7-6 07:02 | 显示全部楼层
LIUZHU 发表于 2023-7-5 08:45
感觉这套代码要优化,太长了

请老师有时间了看一下,谢谢了!
https://club.excelhome.net/thread-1667075-1-1.html
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-17 00:02 , Processed in 0.034421 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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