Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.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
Excel 使用Sheets.Add,使用After参数“时出错”;预期报表“;_Excel_Vbscript_Vba - Fatal编程技术网

Excel 使用Sheets.Add,使用After参数“时出错”;预期报表“;

Excel 使用Sheets.Add,使用After参数“时出错”;预期报表“;,excel,vbscript,vba,Excel,Vbscript,Vba,我试图将工作表添加到现有工作簿中,将新工作表放在上一个工作表之后。我可以使用工作表成功添加。添加,但每当我尝试在参数之后使用,我都会得到一个错误,指示“预期语句”。VBS似乎不喜欢我的:=运算符 使用Excel宏编辑器,似乎应该可以: Sheets.Add After:=ActiveSheet 或者这个: Sheets("Sheet1").Move After:=Sheets(4) 无论如何,我都会遇到预期的语句错误。我尝试了各种在线示例,但似乎找不到正确的语法。FWIW,这是新安装的Off

我试图将工作表添加到现有工作簿中,将新工作表放在上一个工作表之后。我可以使用
工作表成功添加。添加
,但每当我尝试在参数之后使用
,我都会得到一个错误,指示“预期语句”。VBS似乎不喜欢我的
:=
运算符

使用Excel宏编辑器,似乎应该可以:

Sheets.Add After:=ActiveSheet
或者这个:

Sheets("Sheet1").Move After:=Sheets(4)

无论如何,我都会遇到预期的语句错误。我尝试了各种在线示例,但似乎找不到正确的语法。FWIW,这是新安装的Office 16,运行在Windows 10上。

使用下面的代码,最好将
wb
设置为工作簿的名称,以及工作表的名称

Sub AddSheet()

Dim wb As Workbook
Dim sht As Worksheet

'better to use this reference to wb object >> modify to your Workbook name
Set wb = Workbooks("Book1.xlsm")

'better to use this reference to sht object >> modify to your Sheet name
Set sht = wb.Sheets("Sheet2")

wb.Sheets.Add After:=wb.Sheets(sht.Index)

End Sub
VBScript语法不支持“按名称传递参数”。您将需要改为“按位置传递参数”。e、 g

Sheets.Add Null, ActiveSheet
Sheets("Sheet1").Move , Sheets(4)
参考:


出现问题的原因有两个:

a) 因为您试图使用的对象是您创建的Excel应用程序对象的一部分(
xlApp
),而不告诉VBScript它们是什么,并且

b) 因为VBScript不支持“命名参数”的概念(至少据我所知,它不支持),所以必须使用位置参数

因此,只说
Sheets
与说
xlApp.Sheets
完全不同,而且
后面的:=
语法不是有效的VBScript代码

以下代码适用于我:

Set xlApp=CreateObject("Excel.Application")
Set wb=xlApp.Workbooks.Add
xlApp.Sheets.Add.Name="Test1"
xlApp.Sheets.Add.Name="Test2"
xlApp.Sheets.Add , xlApp.ActiveSheet
xlApp.Sheets.Add , xlApp.Sheets("Test1")
wb.SaveAs "TestWorkbook.xlsx"
wb.Close False 

(我的第一个VBScript应用程序-woohoo!!)

当时是否只有一个工作簿打开?(宏
Sub-Macro1()
Sheets.Add After:=ActiveSheet
End-Sub
对我有效。尝试将其复制到虚拟工作簿的模块中,看看它是否对您有效。如果不起作用,您的安装可能会有点奇怪,但似乎不太可能。)还可以尝试
Sheets.Add,ActiveSheet
。感谢您的快速回复,但仍然没有成功。FWIW,这工作:这工作:设置xlApp=CreateObject(“Excel.Application”)xlApp.Workbooks.Add xlApp.Sheets.Add.Name=“Test1”xlApp.Sheets.Add.Name=“Test2”这不工作:设置xlApp=CreateObject(“Excel.Application”)xlApp.Workbooks.Add xlApp.Sheets.Add,ActiveSheet--Sheets类的Add方法失败。代码:xlApp.Sheets.Add After:=ActiveSheet不起作用,因为我收到一条引用字符24的“预期语句”消息。啊-我没有注意到VBScript标记-我刚刚看到Excel VBA标记。Shai,该代码将新工作表添加到活动工作簿中,尽管将引用设置为特定工作簿。我想你需要使用
wb.Sheets.Add After:=wb.Sheets(sht.Index)
@YowE3K抱歉,这就是这么早起床时发生的情况:)我昨天被一个答案弄糊涂了-刚发布完所有的参考资料都应该是合格的,然后忘了在我自己的答案中对一些参考资料进行资格鉴定-哎呀。我尝试了这种方法,但是,当代码命中语句的:=部分时,我得到了一个错误——我似乎无法通过它。这可能是个愚蠢的问题;-),但是错误会在Windows脚本主机对话框中报告。这是运行VBS脚本的默认应用程序,还是需要配置其他内容?谢谢!谢谢--我需要的一行是xlApp.Sheets.Add,xlApp.ActiveSheet。我以前尝试过各种排列方式,现在已经没有选择了。FWIW,在IT组安装Office 16和Win 10之前,该代码运行良好,但在创建其他工作表时突然中断。最后,您在哪里找到了所用语法的参考?谢谢@Mikebatty-我只是根据你的评论来解释我的语法。然后,我在文本编辑器中键入我认为答案应该是什么,将其保存为.vbs文件,然后运行.vbs文件。