我在VB6应用程序中遇到以下行。
mobjParentWrkBk.ExcelWorkBook.Application.Selection.Insert Shift:=xlToRight
不幸的是谷歌和其他搜索引擎并不是很有用,因为它们似乎省略了:=部分。
什么是C#等价物?
答案 0 :(得分:14)
这是可选命名参数的Visual Basic语法。 Insert
函数有一个名为Shift
的参数,该参数已被指定。
Insert
方法,为Type.Missing
以外的所有参数指定Shift
。
另请参阅以下StackOverflow问题:VB.NET := Operator
更新(2008-10-29):
C#4.0设置为引入可选和命名参数。请参阅此blog entry on codebetter.com。
答案 1 :(得分:8)
只是澄清约翰鲁迪的回应。
sytax是可选的(小'o'),这意味着您不必使用它。根据我的经验,大多数VB6编码器不使用语法,而是更喜欢常规的“未命名”参数。
如果您确实选择使用它,则必须命名子过程调用中的所有后续参数。
命名参数语法可用于所有参数,无论是否使用VBA关键字Optional
(大写“O”)声明了相应的参数。例如,考虑这个(略微愚蠢的)VBA函数,它有两个参数,一个是必需的,一个是Optional
:
Private Function TimesTen( _
ByVal Value As Long, _
Optional ByVal Factor As Long = 10 _
) As Long
TimesTen = Value * Factor
End Function
在VBA中,我可以使用命名参数为所需参数调用它(Optional
参数可以简单地在VBA中省略,不像在C#.NET中必须使用Type.Missing
所有省略的Optional
参数):
MsgBox TimesTen(Value:=9)
如果我想用'错误'顺序中的参数调用它(为什么??)我可以使用命名参数实现这一点:
MsgBox TimesTen(Factor:=11, Value:=9)
在命名的参数调用导致编译错误后,尝试使用常规的“未命名”参数调用:
MsgBox TimesTen(Value:=9, 11)
那么为什么VBA编码器在VB6编码器很少使用时会使用命名参数,即使他们使用的语言基本相同?我认为这是因为MS Office应用程序的宏录制器生成的VBA倾向于(总是?)生成命名参数,而且许多VBA编码器都以这种方式学习编程。
答案 2 :(得分:2)
VB6和VB.net在方法中有可选参数。 c#可以选择进行方法重载。
VB6 / VB.net说的方式Shift:= xlToRight允许按名称传递特定参数的值。
e.g。 public sub mymethod(可选a为整数= -1,可选b为整数= 1) ... 结束子
我可以用mymethod(b:= 10)
调用此方法对于c#,可以有2种方法用于此
void Shift()
{
defaultDirection = directionEnum.Left;
Shift(defaultDirection);
}
void Shift(directionEnum direction)
{
}
还有一件事。 虽然您可以通过传递参数来调用方法,但在调用时添加参数名称会使代码更具可读性 例如DoSomethingWithData(CustomerData:= customer,SortDirection:= Ascending)
希望有所帮助。
答案 3 :(得分:1)
它真的是关于Excel以及它如何处理插入。如果选择一系列单元格并右键单击“插入”,将询问您将移动单元格的方向。这来自Excel帮助:
=======
在范围对象上插入方法
将单元格或一系列单元格插入工作表或宏工作表中,并将其他单元格移开以腾出空间。
expression.Insert(Shift,CopyOrigin)
表达式必需。一个返回Range对象的表达式。
Shift可选变体。指定移动单元格的方法。可以是以下XlInsertShiftDirection常量之一:xlShiftToRight或xlShiftDown。如果省略此参数,Microsoft Excel将根据范围的形状决定。
CopyOrigin可选Variant。副本来源。
===========
如果您没有定义常量,则可以替换以下数字
xlShiftDown:-4121 xlShiftToLeft:-4159 xlShiftToRight:-4161 xlShiftUp:-4162