excel问题::对象sheets的方法global失败 VB / 基础类 - CSDN社...
来源:百度文库 编辑:神马文学网 时间:2024/06/28 09:10:58
楼主ezyw(ezyw)2001-12-18 16:40:12 在 VB / 基础类 提问
Sheets("Sheet1").Name = "模1"
For i = 2 To 5
Worksheets("模1").Copy after:=Worksheets("sheet2") ' & CStr(i))
Next
上段程序我放在一个command_click中,当第一次点击button运行时正常,当第二次点击运行时出现的错误:对象sheets的方法global失败,为什么???
问题点数:100、回复次数:14Top
1 楼zzzsssccc(今天正为明天后悔)回复于 2001-12-18 16:47:34 得分 0
1111Top
2 楼uguess(天地间,有我在行走!)回复于 2001-12-18 16:49:35 得分 0
把你的定义贴出来看看.
Top
3 楼Jneu(沧海桑田)回复于 2001-12-18 16:56:54 得分 0
Sheets("Sheet1").Name = "模1"
你的Sheet1已经命名为"模1"了
第二次直接
For i = 2 To 5
Worksheets("模1").Copy after:=Worksheets("sheet2") ' & CStr(i))
Next
Top
4 楼junglerover(灌木丛)回复于 2001-12-18 17:06:55 得分 0
哈哈,对啊,第二次点击按钮时,你哪里还有一个叫做
“Sheet1”的Sheet呢?
当然在执行到第一句的时候就要出错。Top
5 楼ezyw(ezyw)回复于 2001-12-18 17:10:23 得分 0
to Jneu(沧海桑田):
原来的已经被setnothing了,关键是我生成另外一个文件呀
我的代码如下:
Private Sub btnCreateSingle_Click()
CreateExcelApp
CreateExcelBok
CreateNormalModel
Call SaveExcelBok(strFilePath, strFileName)
CloseExcelApp
Screen.MousePointer = Default
Exit Sub
errorhandle:
Screen.MousePointer = Default
CloseExcelApp
MsgBox ("发生错误,请重新启动程序" & Err.Description)
End Sub
Private Sub CreateExcelApp()
Set appExcel = New Excel.Application
Set appExcel = CreateObject("Excel.Application")
appExcel.SheetsInNewWorkbook = 1
appExcel.Visible = False
appExcel.DisplayAlerts = False
appExcel.DisplayAlerts = False
End Sub
Private Sub CreateExcelBok()
Dim strSheet As String
On Error Resume Next
Set bokExcel = appExcel.Workbooks.Add
Set shtExcel = bokExcel.Worksheets("Sheet1")
Sheets.Add
shtExcelPageSetup
End Sub
Private Sub SaveExcelBok(ByVal strFilePath As String, ByVal strFileName As String)
bokExcel.SaveAs (App.Path & "\" & strFilePath & "\" & strFileName)
Set shtExcel = Nothing
appExcel.Workbooks.Close
Set bokExcel = Nothing
End Sub
Private Sub CloseExcelApp()
Set appExcel = Nothing
End Sub
Private Sub CreateNormalModel()
Dim iExcelRow
Set shtExcel = bokExcel.Worksheets("sheet1")
With shtExcel
.Cells(iExcelRow, 1).ColumnWidth = 19
.Cells(iExcelRow, 2).Value = "类型"
.Cells(iExcelRow, 3).Value = "历史年度"
.Cells(iExcelRow, 4).Value = "预算倍数"
.Cells(iExcelRow, 5).Value = "预算年度"
End With
.....'填写数据
Sheets("Sheet1").Name = "模1"
For i = 2 To 5
Worksheets("模1").Copy after:=Worksheets("sheet2") ' & CStr(i))
Next
For i = 2 To 5
Sheets("模1 (" & CStr(i) & ")").Name = "模" & CStr(i)
Next
Sheets.Add
Sheets.Add
Sheets("sheet4").Name = "模7"
Sheets("sheet2").Name = "汇总"
Sheets("sheet3").Name = "模6"
End Sub
Top
6 楼icy_csdn()回复于 2001-12-18 17:16:59 得分 0
Worksheets("模1").Copy after:=Worksheets("sheet2") ' & CStr(i))这是什么呀?
改为 Worksheets("模1").Copy after:=Worksheets("sheet" & CStr(i))试一试
Top
7 楼ezyw(ezyw)回复于 2001-12-18 17:39:43 得分 0
我的cstr(i)已经注释了Top
8 楼junglerover(灌木丛)回复于 2001-12-18 17:50:46 得分 0
你用的什么版本的EXCEL?我这里
.Cells(iExcelRow, 1).ColumnWidth = 19
.Cells(iExcelRow, 2).Value = "类型"
.Cells(iExcelRow, 3).Value = "历史年度"
.Cells(iExcelRow, 4).Value = "预算倍数"
.Cells(iExcelRow, 5).Value = "预算年度"
几句根本不能执行。但其他的执行N遍都没问题。
我的版本是XP。Top
9 楼ezyw(ezyw)回复于 2001-12-18 18:03:04 得分 0
to junglerover(灌木丛):
是office 2000,你是不是没有定义iexcelrow变量呀?
另外,有没有用with sheet呀?Top
10 楼junglerover(灌木丛)回复于 2001-12-19 10:36:51 得分 100
我知道问题在哪里了。开始出的错是因为少了
Dim iExcelRow As Long
iExcelRow = 1
结果iExcelRow的值为Empty,不能运行
然后我运行了你的程序几遍,果然出来了“对象sheets的方法global失败”的错误。
然后我仔细看了一下你的程序,才发现你里面的Sheets是个什么东东?
根本没有定义过。于是我把所有的Sheets替换为appExcel.WorkSheets,
还有一个莫名其妙的WorkSheets,我也在它前面加个appExcel. 。完了
成这样:
Private Sub CreateNormalModel()
Dim iExcelRow As Long
iExcelRow = 1
Set shtExcel = bokExcel.Worksheets("sheet1")
With shtExcel
.Cells(iExcelRow, 1).ColumnWidth = 19
.Cells(iExcelRow, 2).Value = "类型"
.Cells(iExcelRow, 3).Value = "历史年度"
.Cells(iExcelRow, 4).Value = "预算倍数"
.Cells(iExcelRow, 5).Value = "预算年度"
End With
appExcel.Worksheets("Sheet1").Name = "模1"
For i = 2 To 5
appExcel.Worksheets("模1").Copy after:=appExcel.Worksheets("sheet2") ' & CStr(i))
Next
For i = 2 To 5
appExcel.Worksheets("模1 (" & CStr(i) & ")").Name = "模" & CStr(i)
Next
appExcel.Worksheets.Add
appExcel.Worksheets.Add
appExcel.Worksheets("sheet4").Name = "模7"
appExcel.Worksheets("sheet2").Name = "汇总"
appExcel.Worksheets("sheet3").Name = "模6"
End Sub
于是运行N遍都没有问题了。我也很奇怪,为什么你的那些莫名其妙的
没有定义的Sheets啊,WorkSheets啊居然在第一遍的时候不会出错,
到第二遍才会出错呢?真的很奇怪。Top
11 楼ezyw(ezyw)回复于 2001-12-19 11:34:31 得分 0
是这样吗,我先试试,非常感谢junglerover(灌木丛),就冲这精神先派分再说。Top
12 楼ezyw(ezyw)回复于 2001-12-19 11:44:06 得分 0
to junglerover(灌木丛):我的还有其他地方很多语句也会出现类似的错误情况,看来是变量的原因在作怪了,我先改改再看看,多多指教Top
13 楼ezyw(ezyw)回复于 2001-12-19 11:51:23 得分 0
to junglerover(灌木丛):你上面的代码运行很多次均没有问题吗???Set shtExcel = bokExcel.Worksheets("sheet1")第二次时提示下标越界,难道此时"sheet1"已经该名为”模1“ 吗,将其该为Set shtExcel = bokExcel.Worksheets("模1")则通过,天啊,这么奇怪???
Top
14 楼junglerover(灌木丛)回复于 2001-12-19 12:55:28 得分 0
???我的确运行了十几遍没有出错啊?
唯一有一点就是把
bokExcel.SaveAs (App.Path & "\" & strFilePath & "\" & strFileName)
一句注掉了。
应该不会有问题的,因为你最后不是已经把EXCEL关闭了么
重新打开一遍,应该还是叫“Sheet1”啊。
其实也简单,你只要把
appExcel.visible=true
然后,一句一句地跟跟看。应该能找出毛病在哪里的。