工作簿activate后, activeworkbook.name对象变量未设置

weixin_42624883 2018-07-06 02:52:16
首次运行成功,工作簿工作表的activate对象值也正常,再次运行就报错



Option Explicit
Dim xlapp As Excel.Application 'Excel对象
Dim xlbook As Excel.Workbook '工作簿
Dim xlsheet As Excel.Worksheet '工作表


Private Sub Command9_Click()
'将新增记录导出到总表
Application.DisplayAlerts = False
Dim i As Integer, i1 As Integer, x As Integer, y As Integer
Dim iReco As Integer
Dim v As String, s As String, strsql As String
Dim stTable As String

Set xlapp = CreateObject("excel.application")
xlapp.Visible = True
v = Application.GetOpenFilename(FileFilter:="Excel文件 (*.xls; *.xlsx),*.xls; *.xlsx,所有文件(*.*),*.*", Title:="导出到按需模板", MultiSelect:=False)
If InStr(v, ".xls") < 1 Then
MsgBox ("未选择正确的exl文件")
Set xlapp = Nothing
Exit Sub
End If
Set xlbook = xlapp.Workbooks.Open(v)
xlbook.Activate
MsgBox xlbook.Name & ActiveWorkbook.Name
Set xlsheet = xlbook.Worksheets(2)
xlbook.Activate

i = xlsheet.UsedRange.Rows.Count
MsgBox i
xlsheet.Activate
If i > 1 Then
MsgBox ActiveSheet.Name
xlsheet.Range("A2").Select
Debug.Print Selection
xlsheet.Range(Selection, Selection.End(xlDown)).Select
xlsheet.Range(Selection, Selection.End(xlToRight)).Select
Selection.ClearContents

End If


xlbook.Save
xlbook.Close (True)

' Set xlsheet = Nothing
' Set xlbook = Nothing
xlapp.Quit
' Set xlapp = Nothing


Application.DisplayAlerts = True
End Sub
...全文
646 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
舉杯邀明月 2018-07-06
  • 打赏
  • 举报
回复
引用 4 楼 weixin_42624883 的回复:
[quote=引用 3 楼 Chen8013 的回复:]
你的还有其它一些 ActiveXXXXX的对象变量,建议都在前面加上 “xlapp.”,通过xlapp对象 来调用。


果真如此,但我想不明白的是为什么运行程序,首次能成功,再次跑命令才出错?[/quote]
别想那么多了,“想不通”的事情多着呢。
你要想刨根问底,那你就逆向工程,或者想法搞到它的Office源代码(至少要搞到Excel 的COM接口部分)来分析吧!
 只不过…………呵呵……………… 

其实没必要去过问那么多,掌握“规范、正确的用法”,就足够了。
weixin_42624883 2018-07-06
  • 打赏
  • 举报
回复
引用 3 楼 Chen8013 的回复:
你的还有其它一些 ActiveXXXXX的对象变量,建议都在前面加上 “xlapp.”,通过xlapp对象 来调用。


果真如此,但我想不明白的是为什么运行程序,首次能成功,再次跑命令才出错?
舉杯邀明月 2018-07-06
  • 打赏
  • 举报
回复
你的还有其它一些 ActiveXXXXX的对象变量,建议都在前面加上 “xlapp.”,通过xlapp对象 来调用。
舉杯邀明月 2018-07-06
  • 打赏
  • 举报
回复
看样子,楼主的代码是从Excel的VBE中Copy过来的吧。


ActiveWorkbook 只有在Excel的VBA环境中,才存在这个“默认对象变量”。
要在VB6中使用,就要象楼上大雪糕说的那样。
脆皮大雪糕 2018-07-06
  • 打赏
  • 举报
回复
xlapp.ActiveWorkbook.Name
试试

2,462

社区成员

发帖
与我相关
我的任务
社区描述
VBA(Visual Basic for Applications)是Visual Basic的一种宏语言,是在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。
社区管理员
  • VBA
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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