excel学习库

excel表格_excel函数公式大全_execl从入门到精通

不打开Excel读取或写入数据,VBA getObejct保存后无法打开

大家好,这是Excel小火箭的第2次分享,如有不当的地方,请批评指教。

对于某乎天天推送的Python处理Excel和VBA比较,讲真,需求各有不同,本人还是推荐VBA多一点,毕竟不用买课,而且VBA基于Excel,无需安装直接运行,绿色环保,对于100万行以内的数据,处理起来还是很顺畅滴。

最近本大侠写了一个记录日志的自定义函数,思路是先查找指定路径下是否存在日志文件,若不存在,则新建;打开配置文件,写入操作日志,关闭文件,保存。

通常后台打开Excel读取数据,我们都采用 set wb=getObejct("文件路径") 的方式,但是写入数据保存后会遇到问题,重新保存的Excel无法再正常打开。

解决方案:通过 workbooks.open() 的方式在后台打开写入数据即可,getObejct() 仅用于后台读取数据,Workbooks.open() 既可用于后台读取又可用于后台写入数据。
按照惯例,分享代码如下:
Option Explicit

Sub btn_WriLogs()
Dim wb As Workbook
Dim strUserId As String, strDate As String
Dim strTempfiles As String, strlogs As String
Dim i As Integer, c

Application.ScreenUpdating = False

strUserId = Environ("UserName")
strDate = Format(Date, "YYYY/MM/DD")

strTempfiles = "D:\XXX\02_学习资料\001 VBA\2023-09-28 后台打开sht\" & "Tempfils_" & strUserId & ".xlsx"

If FileExists(strTempfiles) = False Then
Application.SheetsInNewWorkbook = 1 '定义只生成含一个工作表的表格
Set wb = Workbooks.Add
With ActiveWorkbook
.SaveAs strTempfiles
With Worksheets(1)
.Range("A1:C1").Value = Array("UserId", "Actions", "Date")
.Range("A1:C1").Interior.ColorIndex = 36
End With
.Close True
End With
Set wb = Nothing
End If

strlogs = "变量可写入"

Rem 此处若用 Set wb = GetObject(strTempfiles) 写入内容保存后,将无法正常打开工作簿
Rem 所以若仅仅是后台读取可以采用这种方式//写入不行
Rem 写入只能用 Set wb = Workbooks.Open(strTempfiles) 这种方式

Set wb = Workbooks.Open(strTempfiles)
With wb
With .Worksheets(1)
i = .Range("A65536").End(xlUp).Row + 1
.Range("A" & i) = strUserId
.Range("b" & i) = strlogs
.Range("C" & i) = strDate
End With
.Close True
End With
Set wb = Nothing

Rem 读取示例
Set wb = GetObject(strTempfiles)
With wb.Worksheets(1)
Debug.Print .Range("a1").Value
Debug.Print .Range("a2").Value
Debug.Print .Range("a3").Value
End With

wb.Close
Set wb = Nothing

Application.ScreenUpdating = True
End Sub

客官都读到这儿了

记得点赞加关注哦

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

«    2024年12月    »
1
2345678
9101112131415
16171819202122
23242526272829
3031
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
    文章归档
      友情链接