Excel使用VBscript删除列

时间:2012-12-07 12:59:47

标签: excel vbscript

我在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 

提前致谢。

3 个答案:

答案 0 :(得分:0)

VBScriptVBA相比,看到了一些并发症,我建议使用以下相当懒惰的方法。

在大多数办公应用程序中执行任何与VBScript相关的操作的最简单方法是将Excel作为其中之一,开始录制宏,手动执行所需操作,然后读取生成的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

参考:DELETE EXCEL COLUMN IN VBSCRIPT

答案 1 :(得分: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

答案 2 :(得分: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

提供证据的照片:

Before

After