Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/437.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用VBscript删除Excel列_Excel_Vbscript - Fatal编程技术网

使用VBscript删除Excel列

使用VBscript删除Excel列,excel,vbscript,Excel,Vbscript,我用vbscript编写了一个代码,如下所示,但当我运行脚本时,它给出了一个错误,表示“范围”未定义。有人能帮我说一下错误是什么吗 For TaskCounter = 1 to 35 TaskRangeFrom="Task"&TaskCounter&" Start Date" TaskRangeTo="Task"&(TaskCounter+1)&" Name" objSheet6.Range(Range(TaskRangeFro

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

提前感谢。

VBA
相比,我在
VBScript
中看到了一些复杂情况,因此我建议使用以下相当懒惰的方法

在大多数office应用程序(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中的整个列,只需执行以下操作:;这将删除整个列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

正如@NickSlash昨天提到的,我怀疑您是否给出过类似的范围名称 列的“业务流程ID”(包含空格)。尽管如此 关于版本,我向您展示了如何为 名为“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
提供证据的图片:


它肯定是VBS吗?非VBA?命名范围的名称不能包含空格,请查看工作表并确保这些名称正确无误。可能是下划线或完全没有空格?是的,我选中了,但它们是“Task1开始日期”、“Task1分配的用户”、“Task2名称”。这样的列按顺序有200列。我需要删除它们之间的列。但我得到的错误是“variable is undefined:'Range'”。@user1878162-错误消息表明VBScript中没有Range()函数(获取变量只是一个烟雾屏)。因此,请尝试预先编写objSheet6。在您的普通范围()s.之前,我已将我的代码更改如下-For TaskCounter=1改为35 TaskRangeFrom=“Task”和TaskCounter&“开始日期”TaskRangeTo=“Task”&(TaskCounter+1)和“Name”objSheet6.Range(objSheet6.Range(TaskRangeFrom).Offset(,1),objSheet6.Range(TaskRangeTo.Offset(,-1)).EntireColumn.Delete下一步,但仍会出现一些错误,如“未知运行时错误“在thins line@Ekkehard.HornerHi上,感谢您的回复。但是我需要删除两个相邻列之间的一个,按照上面我的for循环。那怎么做呢?请帮帮我。我不能给出范围,但只能给出要删除的列号。@Ekkehard.Horner您能在这里帮助我吗?您是否尝试过使用任何代码根据您提供的字段名查找列号?提示:R1C1地址可以帮助您解决问题。或者从“开始滚动”循环浏览标题/字段,找到特定字段并获取其列,然后删除。请尝试。在我的excel中有600列,其中我需要删除36列,我为循环编写了选择。因此,我只能给出列号,而不能给出我认为的任何字母值。那么,您能给我一些建议,如何使用列名或列号来执行相同的操作吗?您如何确定要删除哪些行?不是行,而是我要删除的满足条件的整列,正如我的FOR循环所形成的。Oops,当然是指列。您是否在excel工作表中创建了
命名范围
?因为我认为这是通过名称获取范围的唯一方法。是的,所有列都被分配了唯一的名称。它们如下:业务流程ID、业务流程名称、GSL编号、供应商名称、工作流状态、工作流请求者、工作流开始日期、工作流结束日期、流程状态、层次结构、父业务流程ID、Task1名称,Task1开始日期,Task1分配用户,Task2名称,Task2开始日期,Task2分配用户,Task3名称,Task3开始日期,Task3分配用户,Task4名称,Task4开始日期,Task4分配用户..因此最多36个任务,Horner我正在使用Do While。。。循环,但当我使用Exit Loop命令时,,,然后出现错误。知道为什么吗?你能看看我下面的帖子吗?
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