Что означает «Shift: =» в этом коде VB6? - PullRequest
5 голосов
/ 23 октября 2008

Я перебрал следующую строку в приложении VB6.

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

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

Что будет эквивалентно C #?

Ответы [ 4 ]

14 голосов
/ 23 октября 2008

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

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

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

ОБНОВЛЕНИЕ (2008-10-29):

C # 4.0 настроен на введение необязательных и именованных параметров. Смотрите эту запись в блоге на codebetter.com .

8 голосов
/ 23 октября 2008

Просто чтобы прояснить ответ Джона Руди.

Синтаксис необязательный (маленький '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-кодеры редко делают это, даже если они используют в основном один и тот же язык? Я думаю, это потому, что VBA, сгенерированный устройством записи макросов приложений MS Office, имеет тенденцию (всегда?) Генерировать именованные параметры, и многие VBA-кодеры учатся программировать таким образом.

2 голосов
/ 23 октября 2008

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

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

например. public sub mymethod (необязательно a как целое число = -1, необязательно b как целое число = 1) ... конец суб

Я могу вызвать этот метод с помощью mymethod (b: = 10)

Для c # для этого может быть 2 метода


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

void Shift(directionEnum direction)
{
}

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

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

1 голос
/ 23 октября 2008

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

=======

Метод вставки в объект Range

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

expression.Insert (Shift, CopyOrigin)

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

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

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

===========

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...