VB编辑excel保存的时候报错“对象变量或With块变量未设置”是怎么回事儿?

烧不开的热水 2016-03-19 12:49:19
VB编辑excel保存的时候报错“对象变量或With块变量未设置”是怎么回事儿?

就是第一次保存的时候是正常的不报错
但是第二次打开这个文件再保存的时候就会报错

就是说当有同名文件的时候就会报错

要怎么解决?

谢谢~


Public Function GetInExcel(ChCodeText As String, ExcelPath As String, ExcelName As String, SheetName As String)
Dim PosStart As Integer
Dim PosStop As Integer
Dim IsOver As Boolean
Dim Time As String
Dim Show As String
Dim Row As Integer
PosStart = 1
PosStop = 1
IsOver = False
Row = 1
Dim XlsObj As Excel.Application 'Excel对象
Dim XlsBook As Excel.Workbook '工作簿
Dim XlsSheet As Excel.Worksheet '工作表
Set XlsObj = CreateObject("Excel.Application") '创建EXCEL对象
XlsObj.Visible = True '设置EXCEL对象可见(或不可见)
If Dir(ExcelPath & "\" & ExcelName) <> "" Then
XlsObj.Workbooks.Open (ExcelPath & "\" & ExcelName) '打开EXCEL工作簿
XlsObj.Sheets.Add After:=Sheets(Sheets.Count)
Set XlsSheet = XlsObj.Worksheets(Sheets.Count)
Else
'创建有一个工作表的工作簿
XlsObj.SheetsInNewWorkbook = 1
Set XlsBook = XlsObj.Workbooks.Add
Set XlsSheet = XlsObj.Worksheets(1)
End If

XlsSheet.name = SheetName
While IsOver = False
PosStart = PosStop
PosStart = InStr(PosStart, ChCodeText, "color:#") + 15
If PosStop - PosStart > 1000 Then
IsOver = True
Else
PosStop = PosStart + 5
Time = Mid(ChCodeText, PosStart, PosStop - PosStart) '写入excel时间
PosStart = PosStop + 7
If Mid(ChCodeText, PosStart, 1) = "<" Then
PosStart = InStr(PosStart, ChCodeText, ">") + 1
PosStop = InStr(PosStart, ChCodeText, "<")
Else
PosStop = InStr(PosStart, ChCodeText, "<")
End If
Show = Mid(ChCodeText, PosStart, PosStop - PosStart) '写入excel节目
End If
XlsSheet.cells(Row, 1) = Time
XlsSheet.cells(Row, 2) = Show
Row = Row + 1
Wend
XlsBook.SaveAs (ExcelPath & "\" & ExcelName)
Set XlsObj = Nothing
End Function
...全文
623 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
舉杯邀明月 2016-03-21
  • 打赏
  • 举报
回复
把你的主贴代码中的第18行: XlsObj.Workbooks.Open(ExcelPath & "\" & ExcelName) 改成这样试试: Set XlsBook = XlsObj.Workbooks.Open(ExcelPath & "\" & ExcelName) 感觉你的代码逻辑不够严谨。
烧不开的热水 2016-03-21
  • 打赏
  • 举报
回复
引用 6 楼 Chen8013 的回复:
把你的主贴代码中的第18行: XlsObj.Workbooks.Open(ExcelPath & "\" & ExcelName) 改成这样试试: Set XlsBook = XlsObj.Workbooks.Open(ExcelPath & "\" & ExcelName) 感觉你的代码逻辑不够严谨。
这个解决了…… 我没学过……刚开始学习,临时兴起,想弄个小工具方便工作……看来该好好学习学习了
一笑拔剑 2016-03-20
  • 打赏
  • 举报
回复
这当然有存在的文件就不能保存了 saveas是另存为 你如果是已经有这个文件了 然后你正在打开了这个文件,你这么保存为这个文件,他已经被占用了嘛. 应该判断下,如果是已经存在的就用 XlsBook.Save 这样就保存文件了
ZHRXJR 2016-03-20
  • 打赏
  • 举报
回复
使用Save可以覆盖保存,如果你必须使用SaveAs(另存为),那么最简单的办法是设置一个整形变量,在保存的文件名后面增加这个变量作为文件名,例如:XlsBook.SaveAs (ExcelPath & "\" & ExcelName & X),这个X就是变量,每运行一次变量增加1,这样文件名的后面就增加了一个数字,以示区别。
但不知你的ExcelName这个文件名中是否包含扩展名,如果包含扩展名,那么就不能这样处理,需要将扩展名去掉再加变量,然后再加入扩展名。
一笑拔剑 2016-03-20
  • 打赏
  • 举报
回复
引用 3 楼 helory 的回复:
[quote=引用 1 楼 aspower_ 的回复:] 这当然有存在的文件就不能保存了 saveas是另存为 你如果是已经有这个文件了 然后你正在打开了这个文件,你这么保存为这个文件,他已经被占用了嘛. 应该判断下,如果是已经存在的就用 XlsBook.Save 这样就保存文件了
XlsObj.Save 你看看
烧不开的热水 2016-03-20
  • 打赏
  • 举报
回复
引用 2 楼 u013249970 的回复:
使用Save可以覆盖保存,如果你必须使用SaveAs(另存为),那么最简单的办法是设置一个整形变量,在保存的文件名后面增加这个变量作为文件名,例如:XlsBook.SaveAs (ExcelPath & "\" & ExcelName & X),这个X就是变量,每运行一次变量增加1,这样文件名的后面就增加了一个数字,以示区别。 但不知你的ExcelName这个文件名中是否包含扩展名,如果包含扩展名,那么就不能这样处理,需要将扩展名去掉再加变量,然后再加入扩展名。
用save不好用,还是提示“对象变量或With块变量未设置” save后面还需要接参数么? 输入到 XlsBook. 的时候,会提示有 Save 这个选项,但是确定之后就会变成 XlsBook.save,S从大写变小写了……不知道是不是我哪弄错了……
烧不开的热水 2016-03-20
  • 打赏
  • 举报
回复
引用 1 楼 aspower_ 的回复:
这当然有存在的文件就不能保存了 saveas是另存为 你如果是已经有这个文件了 然后你正在打开了这个文件,你这么保存为这个文件,他已经被占用了嘛. 应该判断下,如果是已经存在的就用 XlsBook.Save 这样就保存文件了
我试了 XlsBook.Save ,依旧是“对象变量或With块变量未设置”

1,453

社区成员

发帖
与我相关
我的任务
社区描述
VB 控件
社区管理员
  • 控件
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧