Me temo que si, que finalmente te pediría como mínimo instalar el framework 2.0, en caso de que el win2000 lo admitiese.
Bueno, miro de hacerte el programa en VB6 y te lo paso, en realidad son 5 minutos... es de suponer que al menos sí tendrás ahí el runtime de VS6.0 instalado en ese equipo...
pd.: mscoree.dll es parte del runtime del .NET framework
Descargar desde aquí:
https://workupload.com/file/VTqLuWdj
Está comprimido con winrar. Después de extraerlo, aunque no tiene virus, siempre es recomendable pasarle el antivirus (por ejemplo desde https://www.virustotal.com ) antes de ejecutarlo, nunca se sabe si fue manipulado en la nube...
Una captura de como se ve...
Y aquí el código en vb6...
Código
Private Const c_VALID_CHARS As String = "0123456789" Private Const c_COLOR_AGUAMARINA As Long = &HF0F0E0 Private Const c_COLOR_ARENA As Long = &HC0D0E0 Private NextFoco As Integer Private Valores As Variant Private Sub Form_Load() Valores = Array(50, 20, 10, 5, 2, 1, 0.5, 0.2, 0.1, 0.05, 0.02, 0.01) End Sub Private Sub ComBorrar_Click() Dim k As Integer For k = 0 To 11 TxtMonedas(k).Text = "0" Call TxtMonedas_Validate(k, False) Next Call Calcular End Sub Private Sub TxtMonedas_Change(Index As Integer) TxtMonedas(Index).BackColor = c_COLOR_ARENA TxtTotal.Text = String$(8, "-") TxtImporte(Index).Text = String$(8, "-") End Sub ' Limitado a 8 cifras. ' Es decir valor máximo admitido en cantidad es: 99.999.999 Private Sub TxtMonedas_Validate(Index As Integer, Cancel As Boolean) Dim Valor As Long If TryParseToLong(TxtMonedas(Index).Text, Valor) = False Then Cancel = True Call MsgBox("No se acepta como un número el contenido para " & TxtMonedas(Index).Tag, vbExclamation, "Error: No es un número (entero y positivo)") TimFoco.Enabled = True ' para seleccionar su contenido listo para editar. Else TxtMonedas(Index).BackColor = c_COLOR_AGUAMARINA TxtImporte(Index).Text = CStr(Valores(Index) * Valor) Call Calcular End If End Sub ' Realiza la suma y presenta el resultado en el textbox del total. Private Sub Calcular() Dim k As Long, n As Single For k = 0 To 11 n = (n + CSng(TxtImporte(k).Text)) Next TxtTotal.Text = CStr(n) End Sub ' por cada carácter en el texto verifica si es uno entre: "0123456789", ' si es así devuelve TRUE y el texto se convierte en el valor (un entero de 31 bits). ' si no devuelve FALSE y el valor se hace 0 Private Function TryParseToLong(ByRef Texto As String, ByRef Valor As Long) As Boolean Dim k As Long If (Len(Texto) > 0) Then For k = 1 To Len(Texto) If (InStr(c_VALID_CHARS, Mid$(Texto, k, 1)) = 0) Then Valor = 0 Exit Function End If Next Valor = CLng(Texto) TryParseToLong = True Else Valor = 0 End If End Function '--------------------------------------------------- ' Saltar el foco entre controles... ' En realidad para eso sirve la tecla 'tab' ' pero lo he dejado como tu tenías. '--------------------------------------------------- ' ' Entrega el foco al siguiente textbox. Private Sub TimFoco_Timer() TimFoco.Enabled = False TxtMonedas(NextFoco).SetFocus End Sub ' Deja seleccionado el contenido del textbox que tiene el foco (para editar/borrar fácilmente). Private Sub TxtMonedas_GotFocus(Index As Integer) With TxtMonedas(Index) .SelStart = 0 .SelLength = Len(.Text) End With End Sub ' Si pasa la validación... ' Pasar el foco automáticamente al siguiente control. ' tras el último se pasa al botón total. Private Sub TxtMonedas_KeyUp(Index As Integer, KeyCode As Integer, Shift As Integer) Dim cancelar As Boolean If (KeyCode = vbKeyReturn) Then Call TxtMonedas_Validate(Index, cancelar) If (cancelar = False) Then NextFoco = (Index + 1) If (Index < 11) Then TimFoco.Enabled = True Else NextFoco = 0 'Index ComTotal.SetFocus End If Else TxtMonedas(Index).SetFocus End If End If End Sub Private Sub TxtMonedas_KeyDown(Index As Integer, KeyCode As Integer, Shift As Integer) NextFoco = Index End Sub ' el botón es competamente inútil, solo tiene por objeto invitar a pulsarlo para que ' el textbox que tiene el foco, pierda el control y proceda la validación. ' Y como adquiere el foco, presionar intro, entregamos el foco al primer textbox. Private Sub ComTotal_KeyUp(KeyCode As Integer, Shift As Integer) If (KeyCode = vbKeySpace) Then NextFoco = 0 TimFoco.Enabled = True End If End Sub
Cuando estás editando un campo, se pone de color arena y la casilla de importe y del total, se borra su contenido (tal como se ve en la siguiente imagen), para indicar que debe recalcularse al termino de la edición... así cuando un valor aparece en el total, se corresponde fielmente con el contenido de cada casilla y todas tendrán su color de fondo en aguamarina.