VBScript中 - 自定义排序的Excel电子表格并保存

问题描述:

目标

这个任务的目标是:VBScript中 - 自定义排序的Excel电子表格并保存

  1. 在目录中查找最近的Excel文件,
  2. 那种文件中使用自定义列表(在下面的代码中定义),
  3. 使用相同名称保存排序文件,并且
  4. 让Windows调度程序每隔10分钟运行一次VB脚本。

我尝试

我已经编译的代码,但我得到一个错误信息,当我尝试运行它:

'Find the most recent file in directory 
Option Explicit 
Dim fso, path, file, recentDate, recentFile, objExcel, objWorkbook, objRange, objWorksheet, SortCol 
Set fso = CreateObject("Scripting.FileSystemObject") 
Set recentFile = Nothing 
For Each file in fso.GetFolder("C:\Users\joe\Documents\test\").Files 
    If (recentFile is Nothing) Then 
    Set recentFile = file 
    ElseIf file.DateLastModified > recentFile.DateLastModified Then 
    If Left(recentFile.name, 2) = "~$" Then 
    Set recentFile = file 
    End If 
    End If 
Next 

'Open the most recent file 
Set objExcel = CreateObject("Excel.Application") 
Set objWorkbook = objExcel.Workbooks.Open(recentFile.Path) 
Set objWorksheet = objWorkbook.Worksheets("Sheet1") 

'Sort by custom array 
objWorksheet.Sort.SortFields.Clear 
objWorksheet.Sort.SortFields.Add key:=Range("A1:A20") _ 
     , SortOn:=xlSortOnValues, Order:=xlDescending, CustomOrder:= _ 
     "alpha,bravo,charlie,delta,echo,foxtrot,golf,hotel,india,juliet", DataOption _ 
     :=xlSortNormal 
    With objWorksheet.Sort 
     .SetRange Range("A1:B20") 
     .Header = xlGuess 
     .MatchCase = False 
     .Orientation = xlTopToBottom 
     .SortMethod = xlPinYin 
     .Apply 
    End With 

'Save Excel workbook with same name 
objWorkbook.save 
objExcel.quit 

错误消息

线:23
字符:38
错误:预期声明
代码:800A0400
来源:Microsoft VBScript编译器错误

+0

我建议您将错误消息添加到问题。没有它就很难回答这个问题。 –

+0

@JohnWheal添加了错误信息。 – amanda52

您正在使用部分语法VBS不明白。 VBS只做位置未命名的参数。 Excel常量不可用于外部程序。

objWorksheet.Sort.SortFields.Add key:=Range("A1:A20") _ 
     , SortOn:=xlSortOnValues, Order:=xlDescending, CustomOrder:= _ 
     "alpha,bravo,charlie,delta,echo,foxtrot,golf,hotel,india,juliet", DataOption _ 
     :=xlSortNormal 

因此,所有这些常量都需要在Excel的对象浏览器中查找并使用该值。

Const xlSortNormal = 0 
    Member of Excel.XlSortDataOption 

你可以查看其他人。

假设你的位置是正确的

objWorksheet.Sort.SortFields.Add Range("A1:A20"), Enter Value, Enter Value, "alpha,bravo,charlie,delta,echo,foxtrot,golf,hotel,india,juliet", 0 

我的答案在这里有VBA的提示和链接到一个网页与Excel技巧。 Pointers needed for speeding up nested loop macro in VBA

另外VBS帮助可以在http://download.microsoft.com/download/winscript56/Install/5.6/W982KMeXP/EN-US/scrdoc56en.exe下载。