Excel VB新手。“我的代码”生成错误:“我的代码”;应以“结束”;。with end with语句是如何工作的?
当我试着运行它时,我得到一个错误,说“期望以结束”。该脚本的目标是复制行的范围,并将它们放入新的单独工作表中(然后我可以将其放入单独的文件中,这些文件将在Excel 2003中读取,而不会超过最大行数)。是否应该有一个或多个附加的End With语句?您不需要重复With部分太多次Excel VB新手。“我的代码”生成错误:“我的代码”;应以“结束”;。with end with语句是如何工作的?,excel,vba,Excel,Vba,当我试着运行它时,我得到一个错误,说“期望以结束”。该脚本的目标是复制行的范围,并将它们放入新的单独工作表中(然后我可以将其放入单独的文件中,这些文件将在Excel 2003中读取,而不会超过最大行数)。是否应该有一个或多个附加的End With语句?您不需要重复With部分太多次 Sub RowRangeMove() Sheets.Add().Name = "CopySheet" With Sheets("BigDataSet - Copy") .Range("
Sub RowRangeMove()
Sheets.Add().Name = "CopySheet"
With Sheets("BigDataSet - Copy")
.Range("A65000", .Range("A13000").End(xlUp)).Copy Destination:=Range("A1")
With Sheets("BigDataSet - Copy")
.Range("B65000", .Range("B13000").End(xlUp)).Copy Destination:=Range("B1")
With Sheets("BigDataSet - Copy")
.Range("C65000", .Range("C13000").End(xlUp)).Copy Destination:=Range("C1")
With Sheets("BigDataSet - Copy")
.Range("D65000", .Range("D13000").End(xlUp)).Copy Destination:=Range("D1")
With Sheets("BigDataSet - Copy")
.Range("E65000", .Range("E13000").End(xlUp)).Copy Destination:=Range("E1")
With Sheets("BigDataSet - Copy")
.Range("F65000", .Range("F13000").End(xlUp)).Copy Destination:=Range("F1")
With Sheets("BigDataSet - Copy")
.Range("G65000", .Range("G13000").End(xlUp)).Copy Destination:=Range("G1")
With Sheets("BigDataSet - Copy")
.Range("H65000", .Range("H13000").End(xlUp)).Copy Destination:=Range("H1")
With Sheets("BigDataSet - Copy")
.Range("I65000", .Range("I13000").End(xlUp)).Copy Destination:=Range("I1")
With Sheets("BigDataSet - Copy")
.Range("J65000", .Range("J13000").End(xlUp)).Copy Destination:=Range("J1")
End With
.
.
[iterate several times]
.
.
Sheets.Add().Name = "CopySheet7"
With Sheets("BigDataSet - Copy")
.Range("A455006", .Range("A502750").End(xlUp)).Copy Destination:=Range("A1")
With Sheets("BigDataSet - Copy")
.Range("B455006", .Range("B502750").End(xlUp)).Copy Destination:=Range("B1")
With Sheets("BigDataSet - Copy")
.Range("C455006", .Range("C502750").End(xlUp)).Copy Destination:=Range("C1")
With Sheets("BigDataSet - Copy")
.Range("D455006", .Range("D502750").End(xlUp)).Copy Destination:=Range("D1")
With Sheets("BigDataSet - Copy")
.Range("E455006", .Range("E502750").End(xlUp)).Copy Destination:=Range("E1")
With Sheets("BigDataSet - Copy")
.Range("F455006", .Range("F502750").End(xlUp)).Copy Destination:=Range("F1")
With Sheets("BigDataSet - Copy")
.Range("G455006", .Range("G502750").End(xlUp)).Copy Destination:=Range("G1")
With Sheets("BigDataSet - Copy")
.Range("H455006", .Range("H502750").End(xlUp)).Copy Destination:=Range("H1")
With Sheets("BigDataSet - Copy")
.Range("I455006", .Range("I502750").End(xlUp)).Copy Destination:=Range("I1")
With Sheets("BigDataSet - Copy")
.Range("J455006", .Range("J502750").End(xlUp)).Copy Destination:=Range("J1")
End With
End Sub
有关“With”关键字,请参阅MSDN文档:
您不需要对零件重复这么多次
Sub RowRangeMove()
Sheets.Add().Name = "CopySheet"
With Sheets("BigDataSet - Copy")
.Range("A65000", .Range("A13000").End(xlUp)).Copy Destination:=Range("A1")
With Sheets("BigDataSet - Copy")
.Range("B65000", .Range("B13000").End(xlUp)).Copy Destination:=Range("B1")
With Sheets("BigDataSet - Copy")
.Range("C65000", .Range("C13000").End(xlUp)).Copy Destination:=Range("C1")
With Sheets("BigDataSet - Copy")
.Range("D65000", .Range("D13000").End(xlUp)).Copy Destination:=Range("D1")
With Sheets("BigDataSet - Copy")
.Range("E65000", .Range("E13000").End(xlUp)).Copy Destination:=Range("E1")
With Sheets("BigDataSet - Copy")
.Range("F65000", .Range("F13000").End(xlUp)).Copy Destination:=Range("F1")
With Sheets("BigDataSet - Copy")
.Range("G65000", .Range("G13000").End(xlUp)).Copy Destination:=Range("G1")
With Sheets("BigDataSet - Copy")
.Range("H65000", .Range("H13000").End(xlUp)).Copy Destination:=Range("H1")
With Sheets("BigDataSet - Copy")
.Range("I65000", .Range("I13000").End(xlUp)).Copy Destination:=Range("I1")
With Sheets("BigDataSet - Copy")
.Range("J65000", .Range("J13000").End(xlUp)).Copy Destination:=Range("J1")
End With
.
.
[iterate several times]
.
.
Sheets.Add().Name = "CopySheet7"
With Sheets("BigDataSet - Copy")
.Range("A455006", .Range("A502750").End(xlUp)).Copy Destination:=Range("A1")
With Sheets("BigDataSet - Copy")
.Range("B455006", .Range("B502750").End(xlUp)).Copy Destination:=Range("B1")
With Sheets("BigDataSet - Copy")
.Range("C455006", .Range("C502750").End(xlUp)).Copy Destination:=Range("C1")
With Sheets("BigDataSet - Copy")
.Range("D455006", .Range("D502750").End(xlUp)).Copy Destination:=Range("D1")
With Sheets("BigDataSet - Copy")
.Range("E455006", .Range("E502750").End(xlUp)).Copy Destination:=Range("E1")
With Sheets("BigDataSet - Copy")
.Range("F455006", .Range("F502750").End(xlUp)).Copy Destination:=Range("F1")
With Sheets("BigDataSet - Copy")
.Range("G455006", .Range("G502750").End(xlUp)).Copy Destination:=Range("G1")
With Sheets("BigDataSet - Copy")
.Range("H455006", .Range("H502750").End(xlUp)).Copy Destination:=Range("H1")
With Sheets("BigDataSet - Copy")
.Range("I455006", .Range("I502750").End(xlUp)).Copy Destination:=Range("I1")
With Sheets("BigDataSet - Copy")
.Range("J455006", .Range("J502750").End(xlUp)).Copy Destination:=Range("J1")
End With
End Sub
有关“With”关键字,请参阅MSDN文档:
您只需要一个(以()开始)。这就是该块的全部要点,让您每次都不包括父对象
您只需要一个(以
()开始)。这就是该块的全部要点,让您不必每次都包含父对象。不仅应该有至少一个结尾With,而且不应该有那么多With语句
With Sheets("BigDataSet - Copy")
.Range("A455006", .Range("A502750").End(xlUp)).Copy Destination:=Range("A1")
.Range("B455006", .Range("B502750").End(xlUp)).Copy Destination:=Range("B1")
.Range("C455006", .Range("C502750").End(xlUp)).Copy Destination:=Range("C1")
.Range("D455006", .Range("D502750").End(xlUp)).Copy Destination:=Range("D1")
.Range("E455006", .Range("E502750").End(xlUp)).Copy Destination:=Range("E1")
.Range("F455006", .Range("F502750").End(xlUp)).Copy Destination:=Range("F1")
.Range("G455006", .Range("G502750").End(xlUp)).Copy Destination:=Range("G1")
.Range("H455006", .Range("H502750").End(xlUp)).Copy Destination:=Range("H1")
.Range("I455006", .Range("I502750").End(xlUp)).Copy Destination:=Range("I1")
.Range("J455006", .Range("J502750").End(xlUp)).Copy Destination:=Range("J1")
End With
将是正确的语法
With语句只是缩短代码行的一种方法。With语句是一种表示“我将对一个特定对象执行一系列操作”并缩短单个代码行的方式
例如:
如果没有With语句,上面的代码将如下所示:
Sub RowRangeMove()
Sheets.Add().Name = "CopySheet"
With Sheets("BigDataSet - Copy")
.Range("A65000", .Range("A13000").End(xlUp)).Copy Destination:=Range("A1")
.Range("B65000", .Range("B13000").End(xlUp)).Copy Destination:=Range("B1")
.Range("C65000", .Range("C13000").End(xlUp)).Copy Destination:=Range("C1")
.Range("D65000", .Range("D13000").End(xlUp)).Copy Destination:=Range("D1")
.Range("E65000", .Range("E13000").End(xlUp)).Copy Destination:=Range("E1")
.Range("F65000", .Range("F13000").End(xlUp)).Copy Destination:=Range("F1")
.Range("G65000", .Range("G13000").End(xlUp)).Copy Destination:=Range("G1")
.Range("H65000", .Range("H13000").End(xlUp)).Copy Destination:=Range("H1")
.Range("I65000", .Range("I13000").End(xlUp)).Copy Destination:=Range("I1")
.Range("J65000", .Range("J13000").End(xlUp)).Copy Destination:=Range("J1")
End With
End Sub
简而言之,With语句允许您以一个点开始单独的代码行,在With语句中,编译器将假定您指的是With语句中声明的内容
所以
相当于
With Answerer
' Inside this with block, any line beginning with "." ,
' the compiler will assume you mean "Answerer.".
' Therefore ".FirstName" is the same as "Answerer.FirstName"
.FirstName = "David"
.LastName = "Stratton"
End With
不仅应该至少有一个结束语,而且不应该有那么多结束语
With Sheets("BigDataSet - Copy")
.Range("A455006", .Range("A502750").End(xlUp)).Copy Destination:=Range("A1")
.Range("B455006", .Range("B502750").End(xlUp)).Copy Destination:=Range("B1")
.Range("C455006", .Range("C502750").End(xlUp)).Copy Destination:=Range("C1")
.Range("D455006", .Range("D502750").End(xlUp)).Copy Destination:=Range("D1")
.Range("E455006", .Range("E502750").End(xlUp)).Copy Destination:=Range("E1")
.Range("F455006", .Range("F502750").End(xlUp)).Copy Destination:=Range("F1")
.Range("G455006", .Range("G502750").End(xlUp)).Copy Destination:=Range("G1")
.Range("H455006", .Range("H502750").End(xlUp)).Copy Destination:=Range("H1")
.Range("I455006", .Range("I502750").End(xlUp)).Copy Destination:=Range("I1")
.Range("J455006", .Range("J502750").End(xlUp)).Copy Destination:=Range("J1")
End With
将是正确的语法
With语句只是缩短代码行的一种方法。With语句是一种表示“我将对一个特定对象执行一系列操作”并缩短单个代码行的方式
例如:
如果没有With语句,上面的代码将如下所示:
Sub RowRangeMove()
Sheets.Add().Name = "CopySheet"
With Sheets("BigDataSet - Copy")
.Range("A65000", .Range("A13000").End(xlUp)).Copy Destination:=Range("A1")
.Range("B65000", .Range("B13000").End(xlUp)).Copy Destination:=Range("B1")
.Range("C65000", .Range("C13000").End(xlUp)).Copy Destination:=Range("C1")
.Range("D65000", .Range("D13000").End(xlUp)).Copy Destination:=Range("D1")
.Range("E65000", .Range("E13000").End(xlUp)).Copy Destination:=Range("E1")
.Range("F65000", .Range("F13000").End(xlUp)).Copy Destination:=Range("F1")
.Range("G65000", .Range("G13000").End(xlUp)).Copy Destination:=Range("G1")
.Range("H65000", .Range("H13000").End(xlUp)).Copy Destination:=Range("H1")
.Range("I65000", .Range("I13000").End(xlUp)).Copy Destination:=Range("I1")
.Range("J65000", .Range("J13000").End(xlUp)).Copy Destination:=Range("J1")
End With
End Sub
简而言之,With语句允许您以一个点开始单独的代码行,在With语句中,编译器将假定您指的是With语句中声明的内容
所以
相当于
With Answerer
' Inside this with block, any line beginning with "." ,
' the compiler will assume you mean "Answerer.".
' Therefore ".FirstName" is the same as "Answerer.FirstName"
.FirstName = "David"
.LastName = "Stratton"
End With
您根本不需要带End With
块的。看起来第一个带
的块正在获取A13000:J65000的一部分并将其复制到新工作表,然后获取A455006:J502750的一部分并将其粘贴到第二个新工作表上。您的代码可以按如下方式重构:
Answerer.FirstName = "David"
Amswerer.LastName = "Stratton"
您根本不需要带End With
块的。看起来第一个带
的块正在获取A13000:J65000的一部分并将其复制到新工作表,然后获取A455006:J502750的一部分并将其粘贴到第二个新工作表上。您的代码可以按如下方式重构:
Answerer.FirstName = "David"
Amswerer.LastName = "Stratton"