excel问题::对象sheets的方法global失败 VB / 基础类 - CSDN社...

来源:百度文库 编辑:神马文学网 时间:2024/06/28 09:10:58
社区焦点x
楼主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  
  然后,一句一句地跟跟看。应该能找出毛病在哪里的。