Puedo ingresar un dato en una celda y que realice una operación en esa misma celda

Quisiera saber si se puede hacer lo siguiente por ejemplo en la celda B5. Quiero que en esta ingrese un valor y que al darle enter realice una división y muestre el resultado en esa misma celda B5, es decir que en esa celda ingreso un valor de 112 y cuando de enter tendría que mostrarme en esa celda el valor de 100 por quiero que la cantidad ingresada la dividad entre 1.12

Es posible hacer esto

1 respuesta

Respuesta
1

Dependiendo en la hoja que lo quieres hacer, da click derecho en la pestaña de la hoja y selecciona "View Code" o "Ver código". Se abrirá el editor de código de VBA en blanco. Pega el siguiente código ahí, y prueba si funciona. Saludos.

Option Explicit
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
Dim OldAddress As String
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If OldAddress = Range("B5").Address Then
MyMacro
End If
OldAddress = ActiveCell.Address
End Sub
Private Sub MyMacro()
If GetAsyncKeyState(13) Then
    Range("B5").Value = Range("B5").Value / 1.12
End If
End Sub

Por cierto, asegúrate de tener las macros habilitadas en tu Excel. Si no sabes cómo hacerlo busca en Google: como habilitar las macros en excel XXXX (las x serian tu versión de excel)

hola gracias por tu respuesta para comentarte que me da error el código te adjunto pantalla de error

Las líneas

Option Explicit
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer

deben ir encima de todo codigo, no puede habe un Sub -> End sub por encima de eso.

ya lo agregue desde el principio y ahora da este error, espero tenga solución o que estoy haciendo mal

Ah es que estas usando una versión de excel de 64 bits.

Cambia esta línea:

Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer

por estas:

#If VBA7 Then
    Private Declare PtrSafe Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
#Else
    Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
#End If

Si te marca en rojo algo y te salta un error, dale en Aceptar e ignóralo. Prueba si te funciona. Slds

ya ingrese el código hice algunas pruebas y si funciona, aprovechando tu conocimiento como podría hacer si quiero hacer varios rangos por ejemplo de la celda B5: B25 o también de la c:10 a la c30, es posible esto

Claro, en ese caso el código seria este:

Option Explicit
#If VBA7 Then
    Private Declare PtrSafe Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
#Else
    Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
#End If
Dim OldAddress As String
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim rCell As Range
Dim rRng As Range
Set rRng = Range("B5:B25, C10:C30")
For Each rCell In rRng.Cells
    If OldAddress = rCell.Address Then
        If GetAsyncKeyState(13) Then
            rCell.Value = rCell.Value / 1.12
        End If
    End If
Next rCell
OldAddress = ActiveCell.Address
End Sub

Cambié algunas cosas, mejor borra todo y pega este nuevo. Me dejas saber si te funciona.

Olvide decirte, puedes jugar con los rangos que quieras cambiando la línea:

Set rRng = Range("B5:B25, C10:C30")

Ya lo probé y me da este error

Es que estamos trabajando en versiones diferentes, también en idiomas diferente, estoy acostumbrado a los errores en ingles, pero creo que es por el código en rojo. La verdad que no estoy seguro pero bueno intenta borrar lo siguiente:

#If VBA7 Then
    Private Declare PtrSafe Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
#Else
    Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
#End If

y solo deja la linea (la que tiene la palabra PtrSafe):

Private Declare PtrSafe Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer

lo peor que puede pasar es que si mueves tu programa a otra computadora con una versión de excel inferior o de 32 bit puede que no funcione. Pero en la que estas usando ahora debería funcionar bien.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas