Visual Basic para Aplicaciones - Nombre de campo variable

Life is soft - evento anual de software empresarial
 
Vista:

Nombre de campo variable

Publicado por Albert (4 intervenciones) el 20/10/2009 10:49:21
Estoy desarrollando una macro de Excel que recibe un archivo desde SAP cuyo formato es nombre de campo y valor del campo.

Dentro de la macro he definido un módulo de clase que tiene la lista de todos los nombres de campo que puedo recibir.

Actualmente utilizo un Case para pasar el valor del campo en función del nombre del campo. Teniendo en cuenta que el archivo puede recibir más de 200 campos, la lista es larga y requiere un cierto tiempo de ejecución. Debo aclarar que los campos recibidos son variables, tanto pueden ser 5 como 150.

Un ejemplo sería el siguiente:

Select Case campo
Case "Campo1"
Campo1 = valor
Case "Campo2"
Campo2 = valor
Case "Campo3"
Campo3 = valor
....
End Select

¿Alguien sabe si existe una manera de mover el valor del dato utilizando el nombre de campo recibido?

Por ejemplo, en ABAP/4 existe la instrucción ASSIGN que permite asignar un nombre de campo generado directamente desde el programa.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de JuanC

RE:Nombre de campo variable

Publicado por JuanC (565 intervenciones) el 20/10/2009 13:09:48
podrías usar las funciones Switch o Choose

una forma más compleja -y no sé si se aplica a tu caso, ya que no tengo demasiada información- es usar un Array y un bucle For Each
dejo un ejemplo por si te sirve de algo...
lo que hace es iniciar todas las variables enteras con el valor n=-10
mediante el uso de un bucle...

Public Declare Sub apiCopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByVal Dest As Long, ByVal Src As Long, ByVal ByteLen As Long)

Private Const cINTEGER_BYTES As Long = 2

Sub Test_Integer()
Dim i1%, i2%, i3%, i4%, i5%, i6%
Dim i7%, i8%, i9%, i10%, i11%, i12%
Dim n%, v As Variant, x As Variant
n = -10
v = Array(VarPtr(i1), VarPtr(i2), VarPtr(i3), _
VarPtr(i4), VarPtr(i5), VarPtr(i6), _
VarPtr(i7), VarPtr(i8), VarPtr(i9), _
VarPtr(i10), VarPtr(i11), VarPtr(i12))
For Each x In v
Call apiCopyMemory(ByVal x, ByVal VarPtr(n), cINTEGER_BYTES)
Next
If IsArray(v) Then Erase v
End Sub

Saludos, desde Baires, JuanC
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar