0

我在 vbscript 中编写了如下代码,但是当我运行我的脚本时,它给出了一个错误,说“范围”未定义。任何人都可以通过说错误是什么来帮助我吗?

For TaskCounter = 1 to 35    
  TaskRangeFrom="Task"&TaskCounter&" Start Date"    
  TaskRangeTo="Task"&(TaskCounter+1)&" Name"    
  objSheet6.Range(Range(TaskRangeFrom).Offset(,1), _ 
  Range(TaskRangeTo).Offset(,-1)).EntireColumn.Delete
Next 

提前致谢。

4

3 回答 3

0

VBScript与我相比,看到一些并发症后,VBA我建议采用以下相当懒惰的方法。

在大多数办公应用程序(Excel 就是其中之一)中执行与 VBScript 相关的任何事情的最简单方法是开始录制宏,手动执行您想要的操作,然后读取生成的 VBA 并将该 VBA 转换为 VBScript。

无论如何,这里有一些代码可以帮助你。删除 E 列。

Const xltoLeft = -4131
StrName as string
StrName = "myfield"
Set NewWorkBook = objExcel.workbooks.add()
With objExcel
  .Sheets("Sheet1").Select '-- select is a very bad practice, I'll update it later
  '-- run your for loop
       'for i= blah blah
            If range.offset(0,i) = StrName then
                 Range.offset(0,i).Entirecolumn.delete xltoLeft
                 Msgbox "magical deletion"
                 Exit for
            End if
       'next i
 End With

参考:删除 VBSCRIPT 中的 EXCEL 列

于 2012-12-07T13:12:26.437 回答
0

要删除 VBScript 中的整个列,只需执行以下操作;这将删除整个 A 列

Set objExcel = CreateObject("Excel.Application")
Set objWorkbook = objExcel.Workbooks.Open _
    ("C:\myworkbook.xlsx")

objExcel.Visible = True
objWorkbook.Worksheets("Sheet1").Range("A:A").Delete

在 VBA(宏)中,只需调用下面的代码。这将删除活动工作表上的 A 列。

Range("A:A").Delete
于 2012-12-07T15:18:50.403 回答
0

正如@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

图片为证:

前

后

于 2012-12-08T18:33:18.897 回答