Ayuda con VBA

04/07/2006 - 16:27 por Zatid | Informe spam
Apreciado foro:

Resulta que tengo una hoja de excel base que contiene un ID y un nombre de
cliente, y desde otra hoja quiero traer dichos datos y que las demás veces
que lo haga simplemente me actualice los que se hayan agregado
posteriormente no importa si el dato nuevo lo deja al final de la tabla,
luego me encargaré de crear un procedimiento para ordenarla.

Agradezco de antemano cualquier ayuda

Preguntas similare

Leer las respuestas

#6 Juan M
07/07/2006 - 08:06 | Informe spam
hola zatid

segun el archivo que has mandado te envio literalmente lo que pedias
buscar los datos que tienes en la primera hoja y si no los encuentra en la
segunda hoja los añade al final de esta

ten encuenta la demora que puede llegar a tener si existieran muchos datos
revisa el codigo para copiar he colocado dos opciones, elige la que
prefieras

espero que te sirva

un saludo
juan


Inicio Codigo
Sub CopiarDiferentes()

Dim MiRango1 As Range
Dim MiRango2 As Range
Dim Celda As Range
Dim c As Range

Application.ScreenUpdating = False

'establece los rangos
With Worksheets("Hoja1")
Set MiRango1 = .Range(.Range("A1"), Range("A" &
.Rows.Count).End(xlUp))
End With
With Worksheets("Hoja2")
Set MiRango2 = .Range(.Range("A1"), .Range("A" &
.Rows.Count).End(xlUp))
End With

For Each Celda In MiRango1
' busca valores
Set c = MiRango2.Find(Celda.Value, LookIn:=xlValues,
lookat:=xlWhole)
' si no lo encuentra en la lista 2 lo añade
If c Is Nothing Then
'opcion 1
'copia celdas
Worksheets("Hoja2").Range("A" & Rows.Count).End(xlUp).Offset(1)
= Celda.Value
Worksheets("Hoja2").Range("B" & Rows.Count).End(xlUp).Offset(1)
= Celda.Offset(0, 1).Value
Worksheets("Hoja2").Range("C" & Rows.Count).End(xlUp).Offset(1)
= Celda.Offset(0, 2).Value
'opcion 2
'copia todo el rango
'With Worksheets("Hoja1")
' .Range(.Range("A" & Celda.Row), .Range("C" &
Celda.Row)).Copy _
' Destination:=Worksheets("Hoja2").Range("A" &
Rows.Count).End(xlUp).Offset(1)
'End With
End If
Next Celda

Set MiRango1 = Nothing
Set MiRango2 = Nothing

End Sub
Fin Codigo

"Zatid" escribió en el mensaje
news:
Mostrar la cita
#7 Zatid
07/07/2006 - 18:27 | Informe spam
Mil gracias Juan M...te felicito!!!!no sabes todo lo que llevaba
intentando solucionar esto, por otra parte estaba analizando tu código y no
entiendo las dos úlrimas líneas Set MiRango1 = Nothing Set MiRango2 =
Nothing, para que es esto?

Y una vez más mil gracias por estar pendiente de mi caso y haberlo resuelto.




"Juan M" escribió en el mensaje
news:%
Mostrar la cita
#8 Zatid
07/07/2006 - 19:46 | Informe spam
Oye Juan por otro lado se me creo un problema, yo pensaba que mi lista se
podia organizar dependiendo el nivel es decir:


tengo esta lista:

1
11
1105
110505

Y en la Hoja2 agregan el 110506, entonces yo pensaba que existia alguna
manera de ordenar para que el siguiera el consecutivo y quedara de esta
forma:

1
11
1105
110505
110506

Será que existe alguna solución?...por que por ordenar de Excel no se puede.

Nuevamente mil gracias Juan.



"Zatid" escribió en el mensaje
news:
Mostrar la cita
#9 Juan M
07/07/2006 - 22:02 | Informe spam
hola Zatid

Mostrar la cita
segun la ayuda
"La palabra clave Nothing se utiliza para desvincular una variable objeto de
un objeto real. Utilice la instrucción Set para asignar Nothing a una
variable objeto."
no se donde lei que es bueno liberar estas variables de memoria y como no me
cuesta, lo hago cuando me acuerdo, al igual que acostumbrarse a declarar
todas las variables y forzar la declaracion de variables

Mostrar la cita
respecto a la segunda cuestion ordenar el listado unas observaciones
- haz la prueba sobre una copia de tu archivo (me imagino que ya lo haces,
pero cualquier precaucion es poca)
- el codigo se ejecuta desde la hoja donde esta la serie (utiliza la hoja
activa), es facil referirla a la que tu tienes para poder ejecutarla desde
cualquiera (p.e. with Worksheets("Hoja1"))
- la ordenacion la realiza de la siguiente forma
comprueba la primera cifra/caracter y mira cual es menor, el menor lo
sube
si son iguales comprueba la longitud, si de igual longitud el menor
valor sube
si la longitud es menor de uno los cambia
- supongo que no existen id repetidas

comprueba el codigo y comentas

un saludo
juan

Inicio codigo
Sub Ordenar_Lista()
Dim i As Long
Dim j As Long
Dim Registros As Long

Application.ScreenUpdating = False

Registros = Range(Range("A1"), Range("A" & Rows.Count).End(xlUp)).Count

For i = 1 To Registros
For j = i To Registros
If Mid$(Cells(i, 1).Value, 1, 1) > Mid$(Cells(j, 1).Value, 1, 1)
Then
Call Mover_Rango(i, j)
ElseIf Mid$(Cells(i, 1).Value, 1, 1) = Mid$(Cells(j, 1).Value,
1, 1) Then
If Len(Cells(i, 1).Value) = Len(Cells(j, 1).Value) Then
If Cells(i, 1).Value > Cells(j, 1) Then
Call Mover_Rango(i, j)
End If
ElseIf Len(Cells(i, 1).Value) > Len(Cells(j, 1).Value) Then
Call Mover_Rango(i, j)
End If
End If
Next j
Next i

End Sub

Sub Mover_Rango(Origen As Long, Destino As Long)
Dim temporal As Variant
Dim i As Integer
'para tres columnas si se necesitan mas modifica el bucle
For i = 1 To 3
temporal = Cells(Destino, i)
Cells(Destino, i) = Cells(Origen, i)
Cells(Origen, i) = temporal
Next i
End Sub
Fin codigo
#10 Zatid
07/07/2006 - 23:14 | Informe spam
Mil gracias Juan, como veo que este proceso es algo pesado, te hago una
pregunta, será que es posible que en lugar de pegar las diferencias al final
de la hoja inserte una columna y las deje en el mismo lugar que están en la
otra hoja, con eso nos evitariamos el proceso de ordenar, cierto?...o tu que
opinas?

Una vez más mil gracias por tu paciencia y dedicación.




"Juan M" escribió en el mensaje
news:e%
Mostrar la cita
Ads by Google
Search Busqueda sugerida