首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >VBS +错误: Microsoft Excel: Range类的排序方法失败

VBS +错误: Microsoft Excel: Range类的排序方法失败
EN

Stack Overflow用户
提问于 2014-08-22 00:05:48
回答 2查看 3.1K关注 0票数 0

这是我的第一个帖子,我是最近接手这个职位的SysAdmin,之前的那个人已经退休了,我真的不知道怎么联系他,所以我必须自己弄清楚所有的事情。

我遇到的问题如下,在我们的W2K8 R2盒子中有一个计划的任务,这个任务基本上就是调用一个.vbs (脚本)来查询AD,然后将输出放入Excel中并发送电子邮件给一些人,并将excel文件作为附件,我们最近将我们的办公套件从2010 (大约4个月前)升级到了2013年。

我们不知道报告没有发送出去,直到一个经常审查它的人联系我们并要求报告,我想检查计划任务的日志,但它没有记录任何错误,然后在检查脚本的日志时,我注意到执行对ad的查询的例程检索了所有信息并尝试将所有信息放入excel spreedsheet之后,发生了一些事情,它突然停止,只记录了一个错误,请参见下一行:

代码语言:javascript
运行
复制
Microsoft Excel: Sort method of Range class failed

老实说,我认为最近升级到2013确实做了一些事情,这就是为什么没有生成报告,但我想从VB和Excel方面有更多经验的人那里获得另一种意见。

我认为将信息添加到excel的代码片段如下:

代码语言:javascript
运行
复制
'sortthedetailssheet
'
Set objRange=objSheetDetails.columns("A:D").EntireColumn

Set objRange2=objSheetDetails.Range("C1")
Set objRange3=objSheetDetails.Range("A1")

objRange.Sort objRange2, xlAscending, objRange3, , xlDescending, , , xlYes
'
'sorttheMembershipsheet
'
Set objRange=objSheetMembership.columns("A:C").EntireColumn

Set objRange2=objSheetMembership.Range("A1")
Set objRange3=objSheetMembership.Range("B1")

objRange.Sort objRange2, xlAscending, objRange3, , xlAscending, , , xlYes

我非常感谢任何建议,因为我是vba的新手,我认为需要一段时间才能掌握速度。

EN

回答 2

Stack Overflow用户

发布于 2016-02-25 21:13:46

该问题存在于Excel常量的使用中,这些常量未在VB上下文中定义。添加此代码段。

代码语言:javascript
运行
复制
Const xlAscending = 1
Const xlYes = 1
票数 2
EN

Stack Overflow用户

发布于 2014-08-25 22:38:07

你的潜在问题

经过更多的测试,我想我发现了在您的情况下可能会导致此错误的原因:objSheetDetails指的是受保护的(密码预先保护?)工作表,所以.sort实际上不能排序,因为它没有权限。

示例

1./这行得通

代码语言:javascript
运行
复制
Sheets("Feuil3").Protect Password:="pswdtest"
Sheets("Feuil3").Unprotect Password:="pswdtest"

Set objRange = Sheets("Feuil3").Columns("F:H").EntireColumn
Set objRange2 = Sheets("Feuil3").Range("F1")
Set objRange3 = Sheets("Feuil3").Range("G1")

objRange.Sort objRange2, xlAscending, objRange3, , xlAscending, , , xlYes

1./此操作失败

代码语言:javascript
运行
复制
Sheets("Feuil3").Protect Password:="pswdtest"

Set objRange = Sheets("Feuil3").Columns("F:H").EntireColumn
Set objRange2 = Sheets("Feuil3").Range("F1")
Set objRange3 = Sheets("Feuil3").Range("G1")

objRange.Sort objRange2, xlAscending, objRange3, , xlAscending, , , xlYes

Sheets("Feuil3").Unprotect Password:="pswdtest"

解决方案

我假设需要的保护是保留的。(如果没有,只需移除保护,它应该可以工作...)

在排序部分之前添加

  1. .Unprotect,在排序部分之后添加(XXX.Protect UserInterFaceOnly:=True)

.Protect

  • 如果代码在某处设置了保护,则添加UserInterFaceOnly:=True,以便它将为用户保护工作表,但不会保护代码set
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25430938

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档