2008-10-22 28 views
5

He encontrado la siguiente línea en una aplicación VB6.¿Qué significa "Shift: =" en este código VB6?

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

Desafortunadamente Google y otros motores de búsqueda no han sido muy útiles ya que parecen omitir la: = parte.

¿Qué equivaldría a C#?

Respuesta

14

Esta es la sintaxis de Visual Basic para los parámetros con nombre opcionales. La función Insert tiene un parámetro llamado Shift, que se está especificando.

C#, hasta donde yo sé, no tiene un equivalente para los parámetros con nombre opcionales. En su lugar, deberá llamar al método Insert, especificando Type.Missing para todos los parámetros que no sean Shift.

Véase también la siguiente pregunta StackOverflow: VB.NET := Operator

ACTUALIZACIÓN (2008-10-29):

C# 4.0 está configurado para introducir parámetros opcionales y con nombre. Vea esto blog entry on codebetter.com.

+0

Gracias, la parte de Shift me hizo pensar que era una especie de función de lenguaje, no pensé en mirar los parámetros del método. –

+0

No hay problema. :) –

+0

"especificando nulo para todos los parámetros" - en realidad debería especificar Type.Missing para los parámetros faltantes. – Joe

2

VB6 y VB.net tienen parámetros opcionales en el método. C# tiene la opción de sobrecargar el método.

VB6/VB.net manera de decir Shift: = xlToRight permite pasar el valor de un parámetro específico por nombre.

p. Ej. sub MyMethod público (una opcional como número entero = -1, opcional b como número entero = 1) ... sub extremo

puedo llamar a este método con MyMethod (b: = 10)

para C# , podría haber 2 métodos para este

 

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

void Shift(directionEnum direction) 
{ 
} 
 

1 cosa más. Aunque puede llamar al método simplemente pasando parámetros, agregar el nombre del parámetro al llamar hace que el código sea un poco más legible.
p. DoSomethingWithData (CustomerData: = cliente, SortDirection: = Ascending)

Espero que ayude.

1

Realmente se trata de Excel y de cómo maneja las inserciones. Si selecciona un rango de celdas y hace clic derecho en Insertar, se le preguntará en qué dirección mover las celdas. Esto es de la Ayuda de Excel:

=======

Método de inserción de objeto Range

inserta una celda o un rango de celdas en la hoja de cálculo o una hoja de macro y desplaza otras células de distancia para hacer espacio

expression.Insert (Mayúsculas, CopyOrigin)

expresión requerida. Una expresión que devuelve un objeto Range.

Variante opcional Shift.Especifica de qué manera desplazar las celdas. Puede ser una de las siguientes constantes de XlInsertShiftDirection: xlShiftToRight o xlShiftDown. Si se omite este argumento, Microsoft Excel decide según la forma del rango.

CopyOrigin Variante opcional. El origen de la copia

===========

Si usted no tiene las constantes definidas puede subsitute los siguientes números

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

8

Solo para aclarar la respuesta de John Rudy.

El sytax es opcional (pequeño 'o'), lo que significa que no tiene que usarlo. En mi experiencia, la mayoría de los codificadores VB6 no usan la sintaxis y prefieren los parámetros normales "sin nombre".

Si elige usarlo, todos los parámetros posteriores en la llamada a procedimiento secundario deben ser nombrados.

La sintaxis paramter nombrada se puede utilizar en todos los parámetros, independientemente de si el argumento correspondiente se declaró o no con la palabra clave VBA Optional (mayúscula 'O'). Consideremos, por ejemplo, este (un poco tonto) función de VBA con dos parámetros, uno requerido y una Optional:

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

En VBA, puedo llamarlo usando parámetros con nombre para el parámetro requerido (el Optional parametro puede ser simplemente omitido en VBA, al contrario que en C# .NET para los que Type.Missing debe ser utilizado para todos los parámetros omitidos Optional):

MsgBox TimesTen(Value:=9) 

Si quería llamarlo con los parámetros en el orden 'equivocado' (¿por qué ??) me puede lograrlo usando parámetros con nombre:

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

Tratar de utilizar una llamada parámetro 'sin nombre' regular después de una llamada provoca un error de compilación:

MsgBox TimesTen(Value:=9, 11) 

Entonces por qué los programadores de VBA utilizan parámetros con nombre si codificadores VB6 rara vez lo hacen, a pesar de que utilizan esencialmente el mismo idioma? Creo que es porque el VBA generado por el grabador de macros de las aplicaciones de MS Office tiende a (¿siempre?) Generar parámetros nombrados y muchos codificadores de VBA aprenden la programación de esta manera.

+0

Es una pena que esto no se suba más ... Te di +1 para la información adicional. –

+0

¡Gracias por la información adicional! –

+0

sí, esta es una respuesta muy interesante. Acabo de descubrir: = en algún código vb6 y me pregunté qué estaba haciendo allí la sintaxis delphi. ¡Ahora sé! – kjack

Cuestiones relacionadas