variable valor una ultima tomar texto seleccionar posicion obtener macro hasta escribir desde datos con columna celda buscar asignar activa excel vba

valor - Macro de Excel de VBA que escribe un entero de entrada en una celda



seleccionar hasta la ultima celda con datos vba (4)

Estoy escribiendo una aplicación rápida yo mismo, el primer proyecto, sin embargo, estoy tratando de encontrar el código VBA para escribir el resultado de una cadena de entrada en una celda con nombre en Excel.

Por ejemplo, un cuadro de entrada pregunta "¿Qué número de trabajo desea agregar a la lista?" ... el usuario ingresará un número de referencia como "FX1234356". La macro necesita escribir esa información en una celda, que luego puedo usar para terminar la macro (básicamente una búsqueda en algunos datos).


Cuando le pides a un usuario una respuesta para poner en una celda usando el método InputBox , generalmente hay tres cosas que pueden suceder¹.

  1. El usuario escribe algo y hace clic en Aceptar . Esto es lo que espera que suceda y recibirá una respuesta que puede devolverse directamente a una celda o una variable declarada.
  2. El usuario hace clic en Cancelar , presiona Esc o hace clic en × (Cerrar). El valor de retorno es un booleano False . Esto debe ser tenido en cuenta.
  3. El usuario no escribe nada, pero hace clic en Aceptar independientemente. El valor de retorno es una cadena de longitud cero.

Si está poniendo el valor de retorno en una celda, su propia secuencia lógica dictará lo que quiere hacer con los dos últimos escenarios. Es posible que desee borrar la celda o puede dejar el contenido de la celda solo. Aquí se explica cómo manejar los diversos resultados con una variable de tipo variante y una instrucción Select Case .

Dim returnVal As Variant returnVal = InputBox(Prompt:="Type a value:", Title:="Test Data") ''if the user clicked Cancel, Close or Esc the False ''is translated to the variant as a vbNullString Select Case True Case Len(returnVal) = 0 ''no value but user clicked OK - clear the target cell Range("A2").ClearContents Case Else ''returned a value with OK, save it Range("A2") = returnVal End Select

¹ Hay un cuarto escenario cuando se usa un tipo específico de método InputBox . Un InputBox puede devolver una fórmula, error de rango de celda o matriz. Esos son casos especiales y requiere el uso de opciones de sintaxis muy específicas. Vea el enlace suministrado para más.


He hecho este tipo de cosas con un formulario que contiene un TextBox.

Entonces, si quieres poner esto en la celda H1 , utiliza:

ActiveSheet.Range("H1").Value = txtBoxName.Text


Puede usar el objeto Range en VBA para establecer el valor de una celda con nombre, al igual que cualquier otra celda.

Range("C1").Value = Inputbox("Which job number would you like to add to the list?)

Donde "C1" es el nombre de la celda que desea actualizar.

Mi Excel VBA es un poco viejo y crujiente, por lo que puede haber una mejor manera de hacerlo en las versiones más nuevas de Excel.


Recomiendo siempre usar un rango con nombre (como has sugerido que estás haciendo) porque si se agregan o eliminan columnas o filas, la referencia del nombre se actualizará, mientras que si codificas la referencia de la celda (por ejemplo, "H1" como se sugiere en una) de las respuestas) en VBA, entonces no se actualizará y apuntará a la celda incorrecta.

Asi que

Range("RefNo") = InputBox("....")

es mas seguro que

Range("H1") = InputBox("....")

Puede establecer el valor de varias celdas, también.

Range("Results").Resize(10,3) = arrResults()

donde arrResults es una matriz de al menos 10 filas y 3 columnas (y puede ser de cualquier tipo). Si usas esto, pon esto

Option Base 1

en la parte superior del módulo VBA, de lo contrario VBA asumirá que la matriz comienza en 0 y pone una primera fila y columna en blanco en la hoja. Esta línea hace que todas las matrices comiencen en 1 como valor predeterminado (que puede ser anormal en la mayoría de los idiomas pero funciona bien con las hojas de cálculo).