2008-10-22 15 views
5

Przebiegłem przez następujący wiersz w aplikacji VB6.Co oznacza "Shift: =" w tym kodzie VB6?

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

Niestety Google i inne wyszukiwarki nie były zbyt użyteczne, ponieważ zdają się pomijać: = część.

Jaki byłby ekwiwalent C#?

Odpowiedz

14

To jest składnia Visual Basic dla opcjonalnych nazwanych parametrów. Funkcja Insert ma określony parametr o nazwie Shift.

C#, o ile mi wiadomo, nie ma odpowiednika dla opcjonalnie nazwanych parametrów. Zamiast tego należy wywołać metodę Insert, podając Type.Missing dla wszystkich parametrów innych niż Shift.

Patrz także następujące pytanie StackOverflow: VB.NET := Operator

Update (2008-10-29):

C# 4.0 jest ustawiony wprowadzić opcjonalne i nazwane parametry. Zobacz tę blog entry on codebetter.com.

+0

Dzięki temu, że część Shift sprawiła, że ​​myślę, że była to jakaś funkcja językowa, nie pomyślałam o spojrzeniu na parametry metody. –

+0

Nie jest problemem. :) –

+0

"określanie wartości null dla wszystkich parametrów" - w rzeczywistości należy podać Type.Missing dla brakujących opcjonalnych parametrów. – Joe

2

VB6 i VB.net ma opcjonalne parametry w metodzie. C# ma opcję wykonania przeciążenia metody.

VB6/VB.net sposób powiedzenia Shift: = xlToRight umożliwia przekazanie wartości określonego parametru według nazwy.

np. publicznego myMethod Sub (opcja A, całkowita = -1, b opcjonalnie jako całkowita = 1) ... End Sub

można wywołać tę metodę z myMethod: (b = 10)

C# , mogą istnieć 2 metody dla tej innej,

 

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

void Shift(directionEnum direction) 
{ 
} 
 
. Chociaż można wywołać metodę tylko przez podanie parametrów, dodanie nazwy parametru podczas wywoływania sprawia, że ​​kod staje się trochę czytelniejszy.
np. DoSomethingWithData (CustomerData: = klient, SortDirection: = Rosnąco)

Nadzieję, że pomaga.

1

To naprawdę wszystko na temat programu Excel i sposobu obsługi wkładek. Jeśli wybierzesz zakres komórek i klikniesz prawym klawiszem Insert, zostaniesz poproszony o wskazanie kierunku przesuwania komórek. To z Pomocy programu Excel:

=======

Insert Sposób na obiektu Range

Wstawia komórkę lub zakres komórek do arkusza blachy lub makro i przesuwa innych komórek z dala zrobić miejsce.

expression.Insert (Shift, CopyOrigin)

wyrażenie Wymagany. Wyrażenie zwracające obiekt Range.

Shift Opcjonalny wariant.Określa, w jaki sposób przesuwać komórki. Może być jedną z następujących stałych XlInsertShiftDirection: xlShiftToRight lub xlShiftDown. Jeśli ten argument zostanie pominięty, Microsoft Excel decyduje na podstawie kształtu zakresu.

CopyOrigin Opcjonalny wariant. Pochodzenie kopii.

===========

Jeśli nie mają stałych zdefiniowanych można subsitute następujące numery

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

8

Tylko po to, by wyjaśnić odpowiedź Johna Rudy'ego.

Sytax jest opcjonalny (mały "o"), co oznacza, że ​​nie musisz go używać. Z mojego doświadczenia wynika, że ​​większość programistów VB6 nie używa składni i zamiast tego woli regularne parametry "bez nazwy".

Jeśli zdecydujesz się z niego skorzystać, wszystkie kolejne parametry w wywołaniu podrzędnym muszą zostać nazwane.

Nazwaną składnię parametru można zastosować do wszystkich parametrów, niezależnie od tego, czy odpowiedni argument został zadeklarowany za pomocą słowa kluczowego VBA Optional (duże "O"). Weźmy na przykład ten (lekko stuknięty) funkcja VBA z dwoma parametrami, jeden wymagane i jednego Optional:

Private Function TimesTen(_ 
    ByVal Value As Long, _ 
    Optional ByVal Factor As Long = 10 _ 
) As Long 
    TimesTen = Value * Factor 
End Function 

w VBA, mogę nazwać go za pomocą nazwanych parametrów wymaganych parametrów (the Optional paramter może być po prostu pominięte w VBA, w przeciwieństwie do C# .NET dla których Type.Missing musi być stosowany do wszystkich pominiętych Optional parametrów):

MsgBox TimesTen(Value:=9) 

Gdybym chciał nazwać z parametrami w celu „złego” (dlaczego ??) I można to osiągnąć, używając nazwanych parametrów:

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

Próba użycia regularnego „nienazwany” Call parametrów po nazwie jednego powoduje błąd kompilacji:

MsgBox TimesTen(Value:=9, 11) 

Więc dlaczego programistów VBA użyć parametrów nazwanych jeśli kodery VB6 rzadko, choć używanie w zasadzie ten sam język? Myślę, że dzieje się tak dlatego, że VBA generowany przez rejestrator makr aplikacji MS Office ma tendencję do (zawsze?) Generowania nazwanych parametrów i wielu programistów VBA uczy się programowania w ten sposób.

+0

Szkoda, że ​​to nie jest coraz bardziej upvoted ... Dałem ci +1 za dodatkowe informacje. –

+0

Dzięki za dodatkowe informacje! –

+0

tak, to jest bardzo interesująca odpowiedź. Właśnie odkryłem: = w jakimś kodzie vb6 i zastanawiałem się, co tam robi składnia delphi. Teraz wiem! – kjack