我在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
提前致谢。
答案 0 :(得分:0)
VBScript
与VBA
相比,看到了一些并发症,我建议使用以下相当懒惰的方法。
在大多数办公应用程序中执行任何与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
答案 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
提供证据的照片: