查询结果二次输出提示“method 'cells' of object '_global'failed”,怎么办?

pruple 2008-02-15 10:28:21
If rs.EOF = True Then
MsgBox "暂时没有符合您要求的数据", , "提示"
Else
For ii = 1 To rs.Fields.Count
Cells(1, ii).Value = rs.Fields(ii - 1).name
Next ii

rs.MoveFirst

Do While Not rs.EOF
jj = jj + 1
For ii = 1 To rs.Fields.Count
Cells(jj + 1, ii).Value = rs.Fields(ii - 1).Value
If Cells(jj, 1).Value <> LastValue Then
LastValue = Cells(jj, 1).Value
ColorIndex = ColorIndex + 1
End If
Range(Cells(jj + 1, 1), Cells(jj, 4)).Select
Selection.Interior.ColorIndex = ColorIndex
Next ii
rs.MoveNext
Loop
jj = 0
End If
xexcel.Visible = True

Set xworkbool = Nothing
Set xexcel = Nothing

上面这段代码是我用来实现查询结果输出的。当我第一次点击输出按钮时,没有问题,但如果我不退出程序,将输出的表关闭后,换一种查询方法输出时,就会提示“method 'cells' of object '_global'failed”,我应该怎么改这段代码?
我的查询语句是没有问题的。
谢谢!
还有就是我生成的excel表,虽然我把它关闭了。但是,在进程里还是有的,这是什么原因呢?
...全文
315 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
pruple 2008-02-19
  • 打赏
  • 举报
回复
问题搞定了,是我没有指定工作表的原因。谢谢大家!
pruple 2008-02-19
  • 打赏
  • 举报
回复
我看了一下,变量的值没有问题,问题出在“Interior”上,就是到了这就卡住了。
pruple 2008-02-18
  • 打赏
  • 举报
回复
If rs.EOF = True Then
MsgBox "暂时没有符合您要求的数据", , "提示"
Else

For ii = 1 To rs.Fields.Count
xexcel.Cells(1, ii).Value = rs.Fields(ii - 1).name
Next ii

rs.MoveFirst

Do While Not rs.EOF
jj = jj + 1
For ii = 1 To rs.Fields.Count
xexcel.Cells(jj + 1, ii).Value = rs.Fields(ii - 1).Value
If xexcel.Cells(jj, 1).Value <> LastValue Then
LastValue = xexcel.Cells(jj, 1).Value
ColorIndex = ColorIndex + 1
End If
Range(Cells(jj + 1, 1), Cells(jj, 4)).Interior.ColorIndex = ColorIndex

Next ii
rs.MoveNext
Loop
jj = 0
rs.Close

'xexcel.Visible = True

xexcel.Application.AlertBeforeOverwriting = False
fName = App.Path & "\report.xls"
' If Dir(fName) <> "" Then
' Kill fName
xworkbook.SaveAs FileName:=(fName)

MsgBox "导入完毕", , "提示"
DCounter = DCounter + 1

End If
Set xsheet = Nothing
Set xworkbool = Nothing
xexcel.Quit
Set xexcel = Nothing

以上是我导出excel表的代码,我按照‘家人’的指点改了,能把查询结果多次导出了,但是填充颜色却在第二次查询开始,填充到了一个“bookx”的表里了。也就是说,我打开report表的时候会打开俩表,一个report一个bookx,数据在report上,填充颜色在bookx里。而且我每次导出excel表时,进程里都会增加一个excel进程(不包括report表的进程。)
vbman2003 2008-02-18
  • 打赏
  • 举报
回复
我的意思是改你代码中:Cells(jj+1,ii).Value= rs.Fields(ii-1).Value 类似这样的地方为: xexcel.Cells(jj+1,ii).Value= rs.Fields(ii-1).Value
pruple 2008-02-18
  • 打赏
  • 举报
回复
楼上说的声明的EXCEL对象名称,是指类似“Dim xsheet As Excel.Worksheet”这样的定义吗?我试了“Dim xcells As xexcel.Cells”,结果提示说“user-defined type not defined”
vbman2003 2008-02-18
  • 打赏
  • 举报
回复
在类似Cells这样的EXCEL属性和方法前,加上你声明的EXCEL对象名称。比如:xexcel.cells、xexcel.range等等

结束:
set xsheet=nothing
Set xworkbool=Nothing
xexcel.quit
Set xexcel=Nothing
pruple 2008-02-18
  • 打赏
  • 举报
回复
我把cells改成了range,结果是问题改成了“method 'range' of object '_global'failed”
vbman2003 2008-02-18
  • 打赏
  • 举报
回复
你可以按F8单步调试,看看各变量的值,然后判断问题在那儿
liuyann 2008-02-16
  • 打赏
  • 举报
回复
sheet1.Cells(x,y)
pruple 2008-02-15
  • 打赏
  • 举报
回复
没人理我。
MiloSoft 2008-02-15
  • 打赏
  • 举报
回复
因为EXCEL进程没有关掉引起的错误

在VB中用VBA是尽可能的不要用Selection,Active这种对象,特别是在循环中


'Range(Cells(jj+1,1),Cells(jj,4)).Select
'Selection.Interior.ColorIndex=ColorIndex
改成
Range(Cells(jj+1,1),Cells(jj,4)).Interior.ColorIndex=ColorIndex
红叶哥 2008-02-15
  • 打赏
  • 举报
回复
换一种查询方法输出时???
你用Range,測試下
pruple 2008-02-15
  • 打赏
  • 举报
回复
是在这一行开始报错的:“Cells(1, ii).Value = rs.Fields(ii - 1).name ”
我 试过即使强行往下走,凡是有cells的语句都会报同样的错。
这个问题已经困扰我快一天了,请大家帮帮忙啊。
pruple 2008-02-15
  • 打赏
  • 举报
回复
我加了,但是还是不行。问题依旧
红叶哥 2008-02-15
  • 打赏
  • 举报
回复
在查尋完成之後增加一句:
rs.close

2,463

社区成员

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

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