Cómo crear un formulario Multi idioma con Excel vba
Les comparto un ejemplo de un formulario que se mostrará con el idioma que hayamos elegido en un formulario que se abre al inicio del archivo.
Para qué nos sirve
Si nos dedicamos a crear complementos en Excel o deseamos que nuestras aplicaciones sean distribuidas en personas que hablas diferentes idiomas, llega a ser de mucha utilidad el que les permitamos elegir su idioma y así toda su interacción les será más dinámica.
Cómo funciona
Tenemos un formulario que nos permitirá elegir el idioma con el que queremos trabajar.
Al iniciar el formulario se asigna una lista de idiomas al ComboBox del formulario.
Private Sub UserForm_Initialize() Me.cmbIdiomas.RowSource = "lstIdiomas" End Sub
El botón Ok hará la labor de asigar un ID al idioma elegido el cual se utilizará como variable para cambiarle el texto a los botones de la hoja de cálculo.
Private Sub CommandButton1_Click() Dim Idioma As String Dim Valor As String Dim Valor2 As String ' Select Case Me.cmbIdiomas.Value Case "Español" Idioma = 2 Case "English" Idioma = 3 Case Else MsgBox "Please, select a correcto language.", vbExclamation, "EXCELeINFO" End Select Sheets("Idiomas").Range("E1").Value = Idioma ' Idioma = Sheets("Idiomas").Range("E1").Value ' Valor = Application.WorksheetFunction.VLookup(Main.btnAbrirFormulario.Name, Sheets("Textos").Range("B2:D10"), Idioma, 0) Main.btnAbrirFormulario.Caption = Valor ' Valor2 = Application.WorksheetFunction.VLookup(Main.btnElegirIdioma.Name, Sheets("Textos").Range("B2:D10"), Idioma, 0) Main.btnElegirIdioma.Caption = Valor2 ' Unload Me ' End Sub
Tendremos otro formulario que será el que se mostrará con los textos dependiendo el idioma que hayamos elegido.
El código del formulario se centra en el evento Initialize del formulario el cual tomará en cuenta el ID asignado en el formulario anterior para asignar el idioma a los elementos del formulario.
Private Sub UserForm_Initialize() Idioma = Sheets("Idiomas").Range("E1").Value ' Valor = Application.WorksheetFunction.VLookup(Me.lblAviso.Name, Sheets("Textos").Range("B2:D10"),_ Idioma, 0) Me.lblAviso.Caption = Valor ' Valor2 = Application.WorksheetFunction.VLookup(Me.lblNombre.Name, Sheets("Textos").Range("B2:D10"),_ Idioma, 0) Me.lblNombre.Caption = Valor2 ' Valor3 = Application.WorksheetFunction.VLookup(Me.lblEdad.Name, Sheets("Textos").Range("B2:D10"),_ Idioma, 0) Me.lblEdad.Caption = Valor3 ' Valor4 = Application.WorksheetFunction.VLookup(Me.lblTelefono.Name, Sheets("Textos").Range("B2:D10"),_ Idioma, 0) Me.lblTelefono.Caption = Valor4 ' Valor5 = Application.WorksheetFunction.VLookup(Me.btnEnviar.Name, Sheets("Textos").Range("B2:D10"),_ Idioma, 0) Me.btnEnviar.Caption = Valor5 ' Valor6 = Application.WorksheetFunction.VLookup(Me.lblIdioma.Name, Sheets("Textos").Range("B2:D10"),_ Idioma, 0) Me.lblIdioma.Caption = Valor6 ' End Sub
De dónde saco los textos en diferentes idiomas
En la hoja Textos tenemos una tabla de Excel con los campos:
-
ID: donde se asigna un número consecutivo de control.
-
Elemento: serán todos los elementos de formulario que deseamos cambiarle el idioma dinámicamente. Serán todos los elementos tanto objetos de hojas de cálculo como de todos los formularios.
-
Español: es el texto en Español de todos nuestros elemtos.
-
English: es el texto en Inglés de todos nuestros elementos.
Cómo sé que idioma elegir
En el formulario de ejemplo usamos la función BUSCARV dentro de nuestra macro y dependiendo el idioma elegido en el primer formulario hará la consulta en la tabla de la hoja Textos y buscar en las columnas para devolver los textos.
:: Descarga el ejemplo EXCELeINFO – formulario multi idioma
span style=”color: #0000ff”pre