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