Excel - Integrar un for en macro

 
Vista:
Imágen de perfil de JoaoM
Val: 175
Ha disminuido su posición en 2 puestos en Excel (en relación al último mes)
Gráfica de Excel

Integrar un for en macro

Publicado por JoaoM (222 intervenciones) el 13/05/2014 22:24:26
Hola amigos(as).
Pues eso, tengo esta macro y quiero integrarle este For para que no tenga que escribir tantos TextBox1, 2, 3 ect
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Private Sub cmb_cod_Client_Change() 'SELECCION DE CLIENTE
 
Sheets("Clientes").Activate
If cmb_cod_Client = Empty Then
cmb_cod_Client.ListIndex = 0
cmb_cod_Client.SetFocus
End If
var3 = cmb_cod_Client.Column(0) 'Cod Cliente RIF/CI
Cells.Find(What:=cmb_cod_Client.value, After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
        xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
        , SearchFormat:=False).Activate
'xxxxxxxxx
ESTE EL For A INTEGRAR A LA MACRO
'For a = 1 To 6
'Cells(a, 1) = Me.Controls("TextBox" & a)
'Next a
'xxxxxx
'AQUI QUIERO NO ESCRIBIR TANTOS TextBox y reemplazar eso por un conteo For o com ose llame o diga
If var3 = ActiveCell Then
TextBox1 = ActiveCell.Offset(0, 1) 'Nombre
TextBox2 = ActiveCell.Offset(0, 2) 'Direccion
TextBox3 = ActiveCell.Offset(0, 3) 'Pueblo/Ciudad
TextBox4 = ActiveCell.Offset(0, 4) 'Telefono 1
TextBox5 = ActiveCell.Offset(0, 5) 'Telefono 2
TextBox6 = ActiveCell.Offset(0, 6) 'Fecha
 
End If
End Sub

Desde ya muchas gracias
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

Integrar un for en macro

Publicado por JuanC (1237 intervenciones) el 14/05/2014 14:33:03
se me ocurren dos maneras...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
Private Sub UsandoArray()
Dim v As Variant, txt As MSForms.TextBox
Dim i%
 
v = Array(TextBox1, TextBox2, TextBox3)
 
Range("A1").Activate
For i = 0 To UBound(v)
    Set txt = v(i)
    txt.Text = ActiveCell.Offset(0, i)
Next
End Sub
 
Private Sub UsandoFuncion()
Dim i%, txt As MSForms.TextBox
Range("A1").Activate
For i = 1 To 3
    Set txt = GetTxt("Textbox" & i)
    If Not txt Is Nothing Then
       txt.Text = ActiveCell.Offset(0, i - 1)
    End If
Next
End Sub
 
Function GetTxt(ByVal sName As String) As MSForms.TextBox
Dim ctl As Control
Set GetTxt = Nothing
For Each ctl In Me.Controls
    If VBA.UCase(ctl.Name) = VBA.UCase(sName) Then
       Set GetTxt = ctl
       Exit For
    End If
Next
End Function

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
Imágen de perfil de JoaoM
Val: 175
Ha disminuido su posición en 2 puestos en Excel (en relación al último mes)
Gráfica de Excel

Integrar un for en macro

Publicado por JoaoM (222 intervenciones) el 14/05/2014 16:43:22
Podrias decirme, si puedes, ¿Cual es la mas rapida? y menos pesada en Bits?

Soy amante de las macros cortas, aunque n oes mi especialidad esto de macros o programacion sea en VBA o otro lenguaje, mi trabajo es otr oque me ocupa casi la totalidad del tiempo y no me deja para mas, esa mi dificultad en entender las macros y la construccio nde 1 sola linea tambien porque el ingles para mi es como hablarme en indio, arabe, chino o esas lenguas que uno jamas puede aprenderlas con 66 primaveras encima.
La Array funciona y la funcion tambien con un detalle;

Selecciono de un ComboBox el cod que tengo en A2 de columna A. Lo referente al cod de la linea A2, B2, c2 ect (son 6 TextBox) al pasar los datos a los TextBox si los pasa pero en el TextBo1 que es el B2, me repite el A2, el textBox2 que deveria ser el C2, me da la B2 y así sucesivamente.
Estuve viendo si podia hacer algo peronada, lo unico fue pasar de A1 a A2 Range("A2").Activate para que empiece desde A2 y no de A1.
Podrias darme una manita por ahí?

Gracias amigo por tu ayuda

Parece que esta linea Set GetTxt = Nothing esta demas o le falta al final Nothing porque ladeactive y da igual

Ya

Le quite txt.Text = ActiveCell.Offset(0, i )'- 1)
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
Imágen de perfil de JoaoM
Val: 175
Ha disminuido su posición en 2 puestos en Excel (en relación al último mes)
Gráfica de Excel

Integrar un for en macro

Publicado por JoaoM (222 intervenciones) el 14/05/2014 16:59:42
y en la Array tuve que agregarle

txt.Text = ActiveCell.Offset(0, i

+ 1

) ademas de lA1 para A2

Entre las 2, Array y funcion ¿cual la mas veloz y menos peso en bits
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
Imágen de perfil de JuanC

Integrar un for en macro

Publicado por JuanC (1237 intervenciones) el 14/05/2014 17:01:46
en verdad no tengo tiempo de analizar cuál es la más rápida (no siempre el código más corto resulta ser el más rápido)
imagino que usando el array es más simple, la otra versión es para hacer algo más genérico (usando otros componentes, x ejemplo)

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
Imágen de perfil de JoaoM
Val: 175
Ha disminuido su posición en 2 puestos en Excel (en relación al último mes)
Gráfica de Excel

Integrar un for en macro

Publicado por JoaoM (222 intervenciones) el 14/05/2014 17:26:45
Como sea estoy muy agradecido por tu ayuda.

Gracias

Solucionado
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