正如@NickSlash 昨天提到的那样,我怀疑您是否为列提供了诸如“业务流程ID”(包含空格)之类的范围名称。但由于这可能是一个版本问题,我将向您展示如何为名为“TaskB”的列获取“整列”范围对象(通过“定义名称”对话框):
' Range by Name
Set oRng = oWs.Range("TaskB")
要通过(列)编号获取第二列的范围,请使用:
' Range by Number
Set oRng = oWs.Cells(1, 2).EntireColumn
请注意:行号和列号以 1 开头。所以您的“.Offset(,1)”代码看起来很可疑;它可能导致“未知的运行时错误”。
如果您 - 正如我想的那样 - 在第一行写了列标题,则必须遍历该行的列并检查值:
' Range by Lookup
Set oRng = Nothing
For nCol = 1 To 5
If "Title B" = oWs.Cells(1, nCol).Value Then
Set oRng = oWs.Cells(1, nCol).EntireColumn
Exit For
End If
Next
如果您想进行实验,请将这些片段插入到测试代码中,例如:
Dim oFS : Set oFS = CreateObject("Scripting.FileSystemObject")
Dim sDir : sDir = oFS.GetAbsolutePathname("..\xls")
Dim sFSpec : sFSpec = oFS.BuildPath(sDir, "work.xls")
' Start clean
oFS.CopyFile oFS.BuildPath(sDir, "13763603.xls"), sFSpec
' Open .XLS
Dim oXls : Set oXls = CreateObject("Excel.Application")
Dim oWb : Set oWb = oXls.Workbooks.Open(sFSpec)
Dim oWs : Set oWs = oWb.Worksheets(1)
Dim oRng, nCol
' Range by XXX
...
oXls.Visible = True
WScript.Stdin.ReadLine
If Not oRng Is Nothing Then
oRng.Delete
WScript.Stdin.ReadLine
End If
oXls.Visible = False
oWb.Close False
oXls.Quit
图片为证: