
Problema con Loop
Publicado por Miguel (29 intervenciones) el 16/10/2014 11:15:32
Hola, estoy trabajando con código VBA y algo debo hacer mal pero no logro ver el error. Copio abajo la parte del código. En general lo que hace el código es coger unos datos de excel y copiarlos donde debe de una tabla.
Con la instrucción lFilaPHs = TBL("Id_phs_desm") quiero guardar una id que está en la tabla y luego con el where los comparo con id_phs_desm de la otra tabla. El problema es que parece que sólo hace lo que tiene que hacer con el primer valor de id_phs_desm de la tabla TBL, en vez de hacerlo para todos los valores de uno en uno.
lFilas = 1
Do Until ObjExcel.Range("A" & lFilas).Value = ""
lFilas = lFilas + 1
If ObjExcel.Range("A" & lFilas).Value = "" Then
Exit Sub
End If
sPHS = ObjExcel.Range("A" & lFilas)
If sPHS = "PHS_111" Then
aa = aa
End If
sSet = ObjExcel.Range("B" & lFilas)
sDenominacion = ObjExcel.Range("C" & lFilas)
sEHPVB = ObjExcel.Range("D" & lFilas)
sEHPVm = ObjExcel.Range("E" & lFilas)
sDecEHPV = ObjExcel.Range("F" & lFilas)
sControl = ObjExcel.Range("G" & lFilas)
sAnalista = ObjExcel.Range("H" & lFilas)
TBL.MoveFirst
sExiste = False
lFilaPHSNuevo = 0
Do Until TBL.EOF
sFuenteControl = obtenerVacios(TBL("fuen"))
If sFuenteControl <> "" Then
If InStr(1, sFuenteControl, "#") > 0 Then
sPHS_control = Replace(Mid(sFuenteControl, 1, InStr(1, sFuenteControl, "#") - 1), " ", "")
Else
sPHS_control = sFuenteControl
End If
If sPHS_control = sPHS Then
sExiste = True
lFilaPHs = TBL("Id_phs_desm")
If sEHPVB <> "" And sEHPVB <> obtenerVacios(TBL1("EHPVB")) Then
'Actualizar la tabla Todosmodelos
sql = "Update Todosmodelos SET EHPVB ='" & sEHPVB & "' WHERE (Id_PHS_Desm =" & lFilaPHs & ");"
db.Execute (sql)
End If
If sEHPVm <> "" And sEHPVm <> obtenerVacios(TBL1("EHPVm")) Then
'Actualizar la tabla Todosmodelos
sql = "Update Todosmodelos SET EHPVm ='" & sEHPVm & "' WHERE (Id_PHS_Desm =" & lFilaPHs & ");"
db.Execute (sql)
End If
If sDecEHPV <> "" And sDecEHPV <> obtenerVacios(TBL1("DecEHPV")) Then
'Actualizar la tabla Todosmodelos
sql = "Update Todosmodelos SET DecEHPV ='" & sDecEHPV & "' WHERE (Id_PHS_Desm =" & lFilaPHs & ");"
db.Execute (sql)
End If
If sControl <> "" And sControl <> obtenerVacios(TBL1("control")) Then
'Actualizar la tabla Todosmodelos
sql = "Update Todosmodelos SET control ='" & sControl & "' WHERE (Id_PHS_Desm =" & lFilaPHs & ");"
db.Execute (sql)
End If
If sAnalista <> "" And sAnalista <> obtenerVacios(TBL1("ANALISTA")) Then
'Actualizar la tabla Todosmodelos
sql = "Update Todosmodelos SET ANALISTA ='" & sAnalista & "' WHERE (Id_PHS_Desm =" & lFilaPHs & ");"
db.Execute (sql)
End If
Loop
Exit Do
Else
lFilaPHSContado = lFilaPHSContado + 1
End If
End If
TBL.MoveNext
Loop
Con la instrucción lFilaPHs = TBL("Id_phs_desm") quiero guardar una id que está en la tabla y luego con el where los comparo con id_phs_desm de la otra tabla. El problema es que parece que sólo hace lo que tiene que hacer con el primer valor de id_phs_desm de la tabla TBL, en vez de hacerlo para todos los valores de uno en uno.
lFilas = 1
Do Until ObjExcel.Range("A" & lFilas).Value = ""
lFilas = lFilas + 1
If ObjExcel.Range("A" & lFilas).Value = "" Then
Exit Sub
End If
sPHS = ObjExcel.Range("A" & lFilas)
If sPHS = "PHS_111" Then
aa = aa
End If
sSet = ObjExcel.Range("B" & lFilas)
sDenominacion = ObjExcel.Range("C" & lFilas)
sEHPVB = ObjExcel.Range("D" & lFilas)
sEHPVm = ObjExcel.Range("E" & lFilas)
sDecEHPV = ObjExcel.Range("F" & lFilas)
sControl = ObjExcel.Range("G" & lFilas)
sAnalista = ObjExcel.Range("H" & lFilas)
TBL.MoveFirst
sExiste = False
lFilaPHSNuevo = 0
Do Until TBL.EOF
sFuenteControl = obtenerVacios(TBL("fuen"))
If sFuenteControl <> "" Then
If InStr(1, sFuenteControl, "#") > 0 Then
sPHS_control = Replace(Mid(sFuenteControl, 1, InStr(1, sFuenteControl, "#") - 1), " ", "")
Else
sPHS_control = sFuenteControl
End If
If sPHS_control = sPHS Then
sExiste = True
lFilaPHs = TBL("Id_phs_desm")
If sEHPVB <> "" And sEHPVB <> obtenerVacios(TBL1("EHPVB")) Then
'Actualizar la tabla Todosmodelos
sql = "Update Todosmodelos SET EHPVB ='" & sEHPVB & "' WHERE (Id_PHS_Desm =" & lFilaPHs & ");"
db.Execute (sql)
End If
If sEHPVm <> "" And sEHPVm <> obtenerVacios(TBL1("EHPVm")) Then
'Actualizar la tabla Todosmodelos
sql = "Update Todosmodelos SET EHPVm ='" & sEHPVm & "' WHERE (Id_PHS_Desm =" & lFilaPHs & ");"
db.Execute (sql)
End If
If sDecEHPV <> "" And sDecEHPV <> obtenerVacios(TBL1("DecEHPV")) Then
'Actualizar la tabla Todosmodelos
sql = "Update Todosmodelos SET DecEHPV ='" & sDecEHPV & "' WHERE (Id_PHS_Desm =" & lFilaPHs & ");"
db.Execute (sql)
End If
If sControl <> "" And sControl <> obtenerVacios(TBL1("control")) Then
'Actualizar la tabla Todosmodelos
sql = "Update Todosmodelos SET control ='" & sControl & "' WHERE (Id_PHS_Desm =" & lFilaPHs & ");"
db.Execute (sql)
End If
If sAnalista <> "" And sAnalista <> obtenerVacios(TBL1("ANALISTA")) Then
'Actualizar la tabla Todosmodelos
sql = "Update Todosmodelos SET ANALISTA ='" & sAnalista & "' WHERE (Id_PHS_Desm =" & lFilaPHs & ");"
db.Execute (sql)
End If
Loop
Exit Do
Else
lFilaPHSContado = lFilaPHSContado + 1
End If
End If
TBL.MoveNext
Loop
Valora esta pregunta


0