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

时间:2014-08-21 16:05:48

标签: excel vba excel-vba vbscript

这是我的第一篇文章,我最近接管了这个职位的SysAdmin,上一个有工作的人已经退休,我真的不知道如何联系他,所以我必须要一切都在我自己身上。

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

我们不知道报告没有被发送出去,直到其中一个人经常审核它,联系我们并要求报告,我想检查计划任务的日志,但它没有。记录任何错误,然后在查看脚本的日志时,我注意到在执行查询到广告的例程已经重新获得所有信息并尝试将所有信息放入excel spreedsheet后发生了一些事情并且它突然停止,那里有'只记录一个错误,请参阅下一行:

Microsoft Excel: Sort method of Range class failed

老实说,我认为最近升级到2013年做了一些事情,这就是为什么不生成报告,但我想从VB和Excel中有更多过期的人那里得到第二个意见。

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

'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很新,并认为我会花一些时间来加快速度。

2 个答案:

答案 0 :(得分:1)

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

Const xlAscending = 1
Const xlYes = 1

答案 1 :(得分:0)

您的潜在问题

经过一些更多的测试,我认为我发现可能会导致您的错误:objSheetDetails是指受保护的(密码保护?)表单,.sort可以实际上是排序因为它没有权利。

实施例

1. /这有效

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. /此失败

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"

将(S)

我认为保留需要。 (如果没有,只需删除保护,它应该工作......)

    排序部分前的
  1. .Unprotect之后的.Protect
  2. 如果代码在某处设置了保护,请添加UserInterFaceOnly:=True,以便为用户保护工作表,但不保护代码(XXX.Protect UserInterFaceOnly:=True