在这个VB6代码中,“Shift:=”是什么意思?

时间:2008-10-22 20:27:26

标签: excel vb6

我在VB6应用程序中遇到以下行。

mobjParentWrkBk.ExcelWorkBook.Application.Selection.Insert Shift:=xlToRight

不幸的是谷歌和其他搜索引擎并不是很有用,因为它们似乎省略了:=部分。

什么是C#等价物?

4 个答案:

答案 0 :(得分:14)

这是可选命名参数的Visual Basic语法。 Insert函数有一个名为Shift的参数,该参数已被指定。

据我所知,C#没有可选命名参数的等价物。相反,您需要调用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