Go para editar datosCódigo para Editar datos desde formulario

Tengo este código que funciona muy bien en su formulario

PrivateSubBtnEditar_Click()
DimIndexAsLong
IfTxt_Actividad=""Andcmb_Unidad =""AndTxt_Cantidad=""AndTxt_PrecioU=""Then
MsgBox"Tienes todos los campos en blanco",vbOKOnly +vbInformation,"AVISO"
Txt_Actividad.SetFocus
ExitSub
EndIf
'Si por equivocación pisas el button Editar te manda aviso
If MsgBox("Cuidado...! Vas a Editar datos para," & vbCr & Txt_Actividad.Text & vbCr _
& vbCr & "¿SI o NO?", vbQuestion + vbYesNo _
+ vbDefaultButton2, "") = vbNo Then Exit Sub
'Sihay seleccionado un ítem en la lista,busca en el vector subTabla el registro correspondiente,
'y extrae del mismo el número de fila ocupada en la hoja de cálculo
If LIS.ListIndex > 0 And LIS.ListIndex <= UBound(subTabla) Then
I = subTabla(LIS.ListIndex).fila
Else
Exit Sub
End If
If I <= 0 Then Exit Sub 'si ocurrióalgún error inesperado
Range("B"&I)=Txt_Actividad'Descripción
Range("E" & I) = cmb_Unidad 'Unidad
IfIsNumeric(Txt_Cantidad)Then
Range("F"&I)=CDbl(Txt_Cantidad)'Cantidad
Else
Range("F" & I) = ""
End If
If IsNumeric(Txt_PrecioU) Then
Range("G" & I) = CDbl(Txt_PrecioU) 'PrecioUnit.
Else
Range("G"&I)=""
EndIf
'borra los campos, y enfoca el NroItem
BORRAR_Click
'recarga el formulario,mostrando los cambios
Index=LIS.ListIndex
UserForm_Initialize
LIS.ListIndex=Index
EndSub

y este en mi formulario que funciona muy mal, o no edita y cuando lo hace duplica la linea o lo hace malicimo

PrivateSubBtnEditar_Click()'EDITAR DATOS
Dim Index As Long
Dim CargaLitada As Long
If Txt_Actividad = "" And cmb_Unidad = "" And Txt_Cantidad = "" And Txt_PrecioU = "" Then
MsgBox "Tienes todos los campos en blanco", vbOKOnly + vbInformation, "AVISO"
Txt_Actividad.SetFocus
Exit Sub
End If
'Sipor equivocación pisas el button Editarte manda aviso
IfMsgBox("Cuidado...! Vas a Editar datos para,"&vbCr &Txt_Actividad.Text&vbCr _
&vbCr &"¿SI o NO?",vbQuestion +vbYesNo _
+vbDefaultButton2,"")=vbNo ThenExitSub
'Si hay seleccionado un ítem en la lista, busca en el vector subTabla el registro correspondiente,
'y extrae delmismo el número de fila ocupada en la hoja de cálculo
IfLIS.ListIndex>0AndLIS.ListIndex<=UBound(CargaLitada)Then
i =CargaLitada(LIS.ListIndex).fila
Else
ExitSub
EndIf
Ifi <=0ThenExitSub'si ocurrió algún error inesperado
Range("B" & i) = Txt_Actividad 'Descripción
Range("E"&i)=cmb_Unidad 'Unidad
If IsNumeric(Txt_Cantidad) Then
Range("F" & i) = CDbl(Txt_Cantidad) 'Cantidad
Else
Range("F"&i)=""
EndIf
IfIsNumeric(Txt_PrecioU)Then
Range("G"&i)=CDbl(Txt_PrecioU)'Precio Unit.
Else
Range("G" & i) = ""
End If
'borra los campos,y enfoca el NroItem
BtnReset_Click
'recarga el formulario, mostrando los cambios
Index = LIS.ListIndex
UserForm_Initialize
LIS.ListIndex = Index
End Sub

cambio el 2º (mal funcionamiento) por el 1º (buen funcionamiento) hacía mi formulario y el problema que tengo es que donde el 1º hace referencia a subTabla del evento Function CargarLista(subTabla() As Reg_tabla) (este rege_tabla esta en un modulo y es:

'Definiendo el tipo de dato registro de tabla
Public Type Reg_tabla
    Item As String * 5      'ítem (10caracteres)
    DescripAsString*90  'descripción (100 caracteres)
    Lista As String * 50   'texto delenlace de lista A (60caracteres)
    ListaBAsString*50   'texto del enlace de lista B (60 caracteres)
    Unidad As String * 12   'unidad (5caracteres)
    CantAsLong            'cantidad
    PrecioU As Double       'precio unitario
    PrecioTAsDouble       'precio total
    fila As Integer         'fila que ocupa este ítem en la tabla de la hoja de cálculo
EndType
'Vector de registros. Contendrá todos los datos de la tabla
Public Tabla() As Reg_tabla
Public subTabla() As Reg_tabla

Donde el Segundo tiene ahora cargalitada viene del evento Private Sub CargaLitada(i As Long) (yo se lo puse probando) era subTabla. Pues no se como hacerlo para que me funcione

Añade tu respuesta

Haz clic para o