2008-10-22 6 views
5

Я пропустил следующую строку в приложении VB6.Что означает «Shift: =» в этом коде VB6?

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

К сожалению, Google и другие поисковые системы не очень полезны, поскольку они, похоже, не учитывают: = часть.

Что было бы эквивалентом C#?

ответ

14

Это синтаксис Visual Basic для необязательных именованных параметров. Функция Insert имеет параметр с именем Shift, который указывается.

C#, насколько мне известно, не имеет эквивалента для дополнительных именованных параметров. Вместо этого вам нужно будет вызвать метод Insert, указав Type.Missing для всех параметров, кроме Shift.

Смотрите также следующий StackOverflow вопрос: VB.NET := Operator

UPDATE (2008-10-29):

C# 4.0 устанавливается ввести дополнительные и именованные параметры. См. Это blog entry on codebetter.com.

+0

Спасибо, часть Shift заставило меня подумать, что это какая-то языковая функция, не думал, чтобы посмотреть параметры метода. – 2008-10-22 20:42:39

+0

Не проблема. :) – 2008-10-22 20:55:23

2

VB6 и VB.net имеют необязательные параметры в методе. C# имеет возможность выполнять перегрузку метода.

Способ VB6/VB.net: Shift: = xlToRight позволяет передавать значение определенного параметра по имени.

например. суб MyMethod общественности (Необязательный как целое число = -1, факультативно, как целое число, б = 1) ... конец суб

можно вызвать этот метод с MyMethod (B: = 10)

Для C# , не может быть 2 способа для этого

 

void Shift() 
{ 
defaultDirection = directionEnum.Left; 
Shift(defaultDirection); 
} 

void Shift(directionEnum direction) 
{ 
} 
 

1 еще вещь. Хотя вы можете вызывать метод, просто передавая параметры, добавляя имя параметра при вызове, делая код немного более читаемым.
, например. DoSomethingWithData (CustomerData: = customer, SortDirection: = Ascending)

Надеюсь, что это поможет.

1

Это действительно все о Excel и о том, как он обрабатывает вставки. Если вы выберете диапазон ячеек и щелкните правой кнопкой мыши «Вставить», вам будет задано направление перемещения ячеек. Это из справки Excel:

=======

Вставить метод на Range Object

Вставляет ячейку или диапазон ячеек в листе или макро-листа и смещает другие клетки прочь сделать пространство.

expression.Insert (сдвиг, CopyOrigin)

выражение Обязательный. Выражение, возвращающее объект Range.

Shift Дополнительный вариант.Определяет, какой способ сдвинуть ячейки. Может быть одной из следующих констант XlInsertShiftDirection: xlShiftToRight или xlShiftDown. Если этот аргумент опущен, Microsoft Excel решает, основываясь на форме диапазона.

CopyOrigin Необязательный вариант. Происхождение копии.

===========

Если у вас нет константы, определенные вы можете subsitute следующих номеров

xlShiftDown: -4121 xlShiftToLeft: -4159 xlShiftToRight: -4161 xlShiftUp: -4162

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) 

Если бы я хотел назвать его с параметрами в «неправильном» порядке (почему ??) I может достичь этого с использованием именованных параметров:

MsgBox TimesTen(Factor:=11, Value:=9) 

Попытка использовать обычный «безымянный» вызов параметра после имени одного вызывает ошибку компиляции:

MsgBox TimesTen(Value:=9, 11) 

Так почему VBA кодеры использовать именованные параметры, если VB6 кодеры редко, даже если они используют по сути, тот же язык? Я думаю, это связано с тем, что VBA, созданный макрорекордером приложений MS Office, имеет тенденцию (всегда?) Генерировать именованные параметры, и многие кодеры VBA учатся программированию таким образом.

 Смежные вопросы

  • Нет связанных вопросов^_^