ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

有没有哪位大神帮忙给这个做个备注

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-3-7 21:10 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
Private Sub cmdExport_Click()
    Dim strTemplateFile         As String
    Dim strFileName             As String
    Dim FSO                     As New FileSystemObject
    Dim excelApp                As Excel.Application
    Dim excelBook               As Excel.Workbook
    Dim excelSheet              As Excel.Worksheet
    Dim lngLineNo               As Long
    Dim i                       As Long
     
    On Error GoTo ErrHandle


    strTemplateFile = gStrXlt & "\模板文件名.xls"
    If Not FSO.FileExists(strTemplateFile) Then
        MsgBox "模板文件不存在", vbCritical, Me.Caption
        Exit Sub
    End If
     
    strFileName = gStrOther & "\新文件名" & Format(Date, "YYYYMMDD") & ".xls"
        
    If FSO.FileExists(strFileName) Then
        FSO.DeleteFile strFileName
    End If
     
    Set excelApp = CreateObject("Excel.Application")
    Set excelBook = excelApp.Workbooks.Open(strTemplateFile)
    Set excelSheet = excelBook.Worksheets(1)
     
     
    excelApp.Visible = False
    excelApp.DisplayAlerts = False         '禁止Excel提示
    excelApp.Columns("A:L").NumberFormatLocal = "@"  '设置成文本格式
     
     
    With prg
        .Max = lvData.ListItems.Count
        .Min = 0
        .Value = 0
    End With
    lngLineNo = 4        '从第四行开始写
    For i = 1 To lvData.ListItems.Count
        excelSheet.Cells(lngLineNo, 1) = lvData.ListItems(i).SubItems(1)                             
        excelSheet.Cells(lngLineNo, 2) = lvData.ListItems(i).SubItems(2)                           
        excelSheet.Cells(lngLineNo, 3) = lvData.ListItems(i).SubItems(3)                             
        excelSheet.Cells(lngLineNo, 4) = lvData.ListItems(i).SubItems(4)                             
        excelSheet.Cells(lngLineNo, 5) = lvData.ListItems(i).SubItems(5)                             
        lngLineNo = lngLineNo + 1
        If prg.Value < prg.Max Then
            prg.Value = prg.Value + 1
        End If
        DoEvents
    Next
    prg.Value = prg.Max
     
    With excelSheet
        .Range(.Cells(1, 1), Cells(lvData.ListItems.Count + 3, 5)).Borders.LineStyle = xlContinuous
        .Range(.Cells(1, 1), Cells(lvData.ListItems.Count + 3, 5)).Font.Size = 9
    End With
     
    excelBook.Saved = True
    excelBook.SaveAs strFileName
    '关闭Excel进程
    excelBook.Close
    excelApp.Quit
     
    Set excelBook = Nothing
    Set excelApp = Nothing
     
    MsgBox "导出完毕!" & vbCrLf & "文件路径:" & strFileName, vbInformation, Me.Caption


    On Error GoTo 0
    Exit Sub
ErrHandle:
    Call gErrList("frmFenQiQiShuRpt.cmdExport_Click", Err.Description, Err.Number, True)


End Sub

TA的精华主题

TA的得分主题

发表于 2024-3-8 15:40 | 显示全部楼层
抛砖引玉,VBA编写的简单VBA程序解释器,期待您的进一步完善与改进(最新:进化5)
https://club.excelhome.net/thread-547868-1-1.html

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-3-8 16:10 | 显示全部楼层
Private Sub cmdExport_Click() ' 定义一个私有子程序,当名为cmdExport的控件被点击时执行  
  
    Dim strTemplateFile         As String ' 声明一个字符串变量strTemplateFile,用于存储模板文件的路径  
    Dim strFileName             As String ' 声明一个字符串变量strFileName,用于存储新文件的路径和名称  
    Dim FSO                     As New FileSystemObject ' 声明一个FileSystemObject对象FSO,用于文件操作  
    Dim excelApp                As Excel.Application ' 声明一个Excel应用程序对象excelApp  
    Dim excelBook               As Excel.Workbook ' 声明一个Excel工作簿对象excelBook  
    Dim excelSheet              As Excel.Worksheet ' 声明一个Excel工作表对象excelSheet  
    Dim lngLineNo               As Long ' 声明一个长整型变量lngLineNo,用于记录当前写入Excel的行号  
    Dim i                       As Long ' 声明一个长整型变量i,用于循环计数  
      
    On Error GoTo ErrHandle ' 设置错误处理,当发生错误时跳转到ErrHandle标签处执行  
  
    strTemplateFile = gStrXlt & "\模板文件名.xls" ' 将全局变量gStrXlt与路径结合,得到模板文件的完整路径  
    If Not FSO.FileExists(strTemplateFile) Then ' 判断模板文件是否存在  
        MsgBox "模板文件不存在", vbCritical, Me.Caption ' 如果不存在,则弹出提示框告知用户  
        Exit Sub ' 退出子程序  
    End If  
      
    strFileName = gStrOther & "\新文件名" & Format(Date, "YYYYMMDD") & ".xls" ' 构建新文件的完整路径和名称,包含当前日期  
         
    If FSO.FileExists(strFileName) Then ' 判断新文件是否已存在  
        FSO.DeleteFile strFileName ' 如果已存在,则删除旧文件  
    End If  
      
    Set excelApp = CreateObject("Excel.Application") ' 创建一个Excel应用程序实例  
    Set excelBook = excelApp.Workbooks.Open(strTemplateFile) ' 打开模板文件  
    Set excelSheet = excelBook.Worksheets(1) ' 获取工作簿中的第一个工作表  
      
    excelApp.Visible = False ' 设置Excel应用程序为不可见  
    excelApp.DisplayAlerts = False ' 设置Excel应用程序不显示任何提示信息  
    excelApp.Columns("A:L").NumberFormatLocal = "@" ' 将A到L列的格式设置为文本格式  
      
    With prg ' 使用With语句来引用prg对象(可能是一个进度条)  
        .Max = lvData.ListItems.Count ' 设置进度条的最大值为lvData列表项的数量  
        .Min = 0 ' 设置进度条的最小值为0  
        .Value = 0 ' 设置进度条的初始值为0  
    End With  
    lngLineNo = 4 ' 初始化行号为4,表示从第四行开始写入数据  
    For i = 1 To lvData.ListItems.Count ' 循环遍历lvData中的每个列表项  
        excelSheet.Cells(lngLineNo, 1) = lvData.ListItems(i).SubItems(1) ' 将列表项的子项1写入Excel的当前行第一列  
        excelSheet.Cells(lngLineNo, 2) = lvData.ListItems(i).SubItems(2) ' 将列表项的子项2写入Excel的当前行第二列  
        excelSheet.Cells(lngLineNo, 3) = lvData.ListItems(i).SubItems(3) ' 将列表项的子项3写入Excel的当前行第三列  
        excelSheet.Cells(lngLineNo, 4) = lvData.ListItems(i).SubItems(4) ' 将列表项的子项4写入Excel的当前行第四列  
        excelSheet.Cells(lngLineNo, 5) = lvData.ListItems(i).SubItems(5) ' 将列表项的子项5写入Excel的当前行第五列  
        lngLineNo = lngLineNo + 1 ' 行号递增,为下一条数据准备  
        If prg.Value < prg.Max Then ' 判断进度条的值是否小于最大值  
            prg.Value = prg.Value + 1 ' 如果是,则进度条的值递增  
        End If  
        DoEvents ' 允许操作系统处理其他事件,避免程序界面假死  
    Next ' 结束循环  
    prg.Value = prg.Max ' 设置进度条的值为最大值,表示数据写入完成  
  
With excelSheet  
        .Range(.Cells(1, 1), .Cells(lvData.ListItems.Count + 3, 5)).Borders.LineStyle = xlContinuous ' 设置从第一行第一列到数据行数+3的第五列的单元格边框为连续线  
        .Range(.Cells(1, 1), .Cells(lvData.ListItems.Count + 3, 5)).Font.Size = 9 ' 设置上述范围的字体大小为9  
    End With
excelBook.Saved = True ' 标记工作簿为已保存状态,避免关闭时弹出保存提示  
    excelBook.SaveAs strFileName ' 将工作簿保存为指定的文件名和路径
'关闭Excel进程  
    excelBook.Close ' 关闭工作簿  
    excelApp.Quit ' 退出Excel应用程序
Set excelBook = Nothing ' 释放工作簿对象  
    Set excelApp = Nothing ' 释放Excel应用程序对象
MsgBox "导出完毕!" & vbCrLf & "文件路径:" & strFileName, vbInformation, Me.Caption
On Error GoTo 0 ' 关闭错误处理,允许后续代码正常执行  
    Exit Sub ' 退出子程序

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-3-8 18:22 来自手机 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
这段代码是一个Excel VBA程序,用于从一个应用程序中导出数据到一个Excel文件。下面是对代码的详细解释和备注:

```vba
' 当点击导出按钮时执行的操作
Private Sub cmdExport_Click()
    ' 定义变量
    Dim strTemplateFile         As String  ' 模板文件路径
    Dim strFileName             As String  ' 导出文件路径
    Dim FSO                     As New FileSystemObject  ' 文件系统对象,用于文件操作
    Dim excelApp                As Excel.Application  ' Excel应用程序
    Dim excelBook               As Excel.Workbook  ' Excel工作簿
    Dim excelSheet              As Excel.Worksheet  ' Excel工作表
    Dim lngLineNo               As Long  ' 用于记录当前写入的行号
    Dim i                       As Long  ' 循环变量
     
    ' 错误处理标签
    On Error GoTo ErrHandle

    ' 指定模板文件路径
    strTemplateFile = gStrXlt & "\模板文件名.xls"
    ' 检查模板文件是否存在
    If Not FSO.FileExists(strTemplateFile) Then
        MsgBox "模板文件不存在", vbCritical, Me.Caption
        Exit Sub
    End If
     
    ' 设置导出文件的路径和名称
    strFileName = gStrOther & "\新文件名" & Format(Date, "YYYYMMDD") & ".xls"
        
    ' 如果导出文件已存在,则删除
    If FSO.FileExists(strFileName) Then
        FSO.DeleteFile strFileName
    End If
     
    ' 创建Excel应用程序实例
    Set excelApp = CreateObject("Excel.Application")
    ' 打开模板文件
    Set excelBook = excelApp.Workbooks.Open(strTemplateFile)
    ' 获取第一个工作表
    Set excelSheet = excelBook.Worksheets(1)
     
    ' 设置Excel不可见,防止干扰用户
    excelApp.Visible = False
    ' 禁止Excel弹出提示
    excelApp.DisplayAlerts = False         
    ' 将A到L列的格式设置为文本,防止数据格式被自动更改
    excelApp.Columns("A:L").NumberFormatLocal = "@"  
     
    ' 初始化进度条
    With prg
        .Max = lvData.ListItems.Count
        .Min = 0
        .Value = 0
    End With
    lngLineNo = 4  ' 数据从第四行开始写入
    ' 遍历列表视图中的每一项,将数据写入Excel
    For i = 1 To lvData.ListItems.Count
        ' 逐列写入数据
        excelSheet.Cells(lngLineNo, 1) = lvData.ListItems(i).SubItems(1)                             
        excelSheet.Cells(lngLineNo, 2) = lvData.ListItems(i).SubItems(2)                           
        excelSheet.Cells(lngLineNo, 3) = lvData.ListItems(i).SubItems(3)                             
        excelSheet.Cells(lngLineNo, 4) = lvData.ListItems(i).SubItems(4)                             
        excelSheet.Cells(lngLineNo, 5) = lvData.ListItems(i).SubItems(5)                             
        lngLineNo = lngLineNo + 1
        ' 更新进度条
        If prg.Value < prg.Max Then
            prg.Value = prg.Value + 1
        End If
        DoEvents
    Next
    prg.Value = prg.Max
     
    ' 设置工作表中数据区域的边框和字体大小
    With excelSheet
        .Range(.Cells(1, 1), Cells(lvData.ListItems.Count + 3, 5)).Borders.LineStyle = xlContinuous
        .Range(.Cells(1, 1), Cells(lvData.ListItems.Count + 3, 5)).Font.Size = 9
    End With
     
    ' 保存工作簿
    excelBook.Saved = True
    excelBook.SaveAs strFileName
    ' 关闭Excel进程
    excelBook.Close
    excelApp.Quit
     
    ' 清理对象
    Set excelBook = Nothing
    Set excelApp = Nothing
     
    ' 显示导出完毕消息
    MsgBox "导出完毕!" & vbCrLf & "文件路径:" & strFileName, vbInformation, Me.Caption

    ' 错误处理结束
    On Error GoTo 0
    Exit Sub

' 错误处理
ErrHandle:
    ' 调用错误处理函数,记录错误信息
    Call gErrList("frmFenQiQiShuRpt.cmdExport_Click", Err.Description, Err.Number, True)
End Sub
```

这段代码的功能是从一个应用程序中导出数据到一个Excel文件。它首先检查模板文件是否存在,然后创建或覆盖导出文件,并将应用程序中的数据逐行写入Excel工作表。最后,设置工作表的格式,并保存关闭Excel文件。整个过程中,还包括了基本的错误处理和进度条更新。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-3-9 22:23 | 显示全部楼层
试运行,弹出这个是啥原因
图片.png
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-9-29 20:32 , Processed in 0.045334 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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