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.

Elegir idioma

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.

Formulario multi idioma

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:

  1. ID: donde se asigna un número consecutivo de control.
  2. 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.
  3. Español: es el texto en Español de todos nuestros elemtos.
  4. 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

You may also like...