Cómo recorrer cada elemento de la lista de validación de datos con VBA

Índice
  1. Diferentes tipos de menú desplegable de Validación de datos
  2. El código VBA
  3. Usando el código para su escenario
    1. Ubicación de la lista de Validación de datos
    2. Acciones a realizar para cada elemento de la lista
  4. Conclusión

Esta publicación analiza cómo recorrer todos los elementos en una lista de Validación de datos con VBA. Esto se inspiró en una pregunta de un lector. Quería guardar un PDF para cada elemento de una lista de Validación de datos. Sin embargo, una vez que dominamos el proceso de bucle, no estamos restringidos a archivos PDF; Podemos cambiar fácilmente las acciones a realizar para cada elemento.

Cuando abordé situaciones similares, utilicé una tabla o un rango con nombre como fuente para la lista de validación de datos. Por lo tanto, recorrer la tabla o el rango con nombre logra un resultado similar. Sin embargo, una lista de validación de datos también puede incluir elementos separados por comas; en consecuencia, proporciona un caso de uso diferente.

La pregunta despertó mi interés. Entonces, a continuación encontrarás mi enfoque.

Tabla de contenido
  • Diferentes tipos de menú desplegable de Validación de datos
  • El código VBA
  • Usando el código para su escenario
    • Ubicación de la lista de Validación de datos
    • Acciones a realizar para cada elemento de la lista
  • Conclusión

Descargue el archivo de ejemplo: únase al programa Insiders gratuito y obtenga acceso al archivo de ejemplo utilizado para esta publicación.

Nombre de archivo: 0119 Recorriendo la lista de validación de datos.zip

Tener acceso

Diferentes tipos de menú desplegable de Validación de datos

No todas las listas de validación de datos son iguales. Pueden basarse en lo siguiente:

  • Rangos de celdas estándar
  • rangos con nombre
  • Rangos de derrame
  • Listas separadas por comas

Las capturas de pantalla siguientes ilustran cómo se configuran estos cuatro métodos.

Rango de celdas estándar

Rango de celdas estándar de validación de datos

rango con nombre

Validación de datos rango con nombre

Rango de derrame

Rango de derrame de validación de vData

Lista separada por comas

Lista separada por comas de validación de datos

Los métodos de rango de celdas, rango con nombre y rango de derrame se pueden tratar de manera similar desde una perspectiva VBA; todos son rangos. Una lista separada por comas es ligeramente diferente y requiere un enfoque alternativo. Sin embargo, el código siguiente se ha escrito para abordar los cuatro escenarios.

El código VBA

El siguiente código recorre cada elemento de una lista de validación de datos.

Sub LoopThroughDataValidationList()Dim rng As RangeDim dataValidationArray As VariantDim i As IntegerDim rows As Integer'Set the cell which contains the Data Validation listSet rng = Sheets("Sheet1").Range("C2")'If Data Validation list is not a range, ignore errorsOn Error Resume Next'Create an array from the Data Validation formula, without creating'a multi-dimensional array from the rangerows = Range(Replace(rng.Validation.Formula1, "=", "")).rows.CountReDim dataValidationArray(1 To rows)For i = 1 To rows    dataValidationArray(i) = _        Range(Replace(rng.Validation.Formula1, "=", "")).Cells(i, 1)Next i'If not a range, then try splitting a stri.webp Err.Number  0 Then    Err.Clear    dataValidationArray = Split(rng.Validation.Formula1, ",")End If'Some other error has occured so exit subIf Err.Number  0 Then Exit Sub'Reinstate error checkingOn Error GoTo 0'Loop through all the values in the Data Validation ArrayFor i = LBound(dataValidationArray) To UBound(dataValidationArray)    'Change the value in the data validation cell    rng.Value = dataValidationArray(i)        'Force the sheet to recalculate    Application.Calculate        'Insert the code to perform for each item here'Next iEnd Sub

Usando el código para su escenario

Hay dos elementos involucrados en la adaptación del código para su escenario:

  1. La ubicación de la lista de validación de datos.
  2. La acción a realizar para cada elemento de la lista.

Ubicación de la lista de Validación de datos

Para usar el código con su lista de Validación de datos, cambie lo siguiente para hacer referencia a la hoja y la celda de su escenario.

'Set the cell which contains the Data Validation listSet rng = Sheets("Sheet1").Range("C2")

Acciones a realizar para cada elemento de la lista

Dado el contexto del escenario, creo que las acciones que probablemente requeriremos para esto generalmente implican escenarios de informes en ráfaga. Por lo tanto, los siguientes ejemplos pueden resultarle útiles.

Ingrese los fragmentos de código a continuación debajo del código: 'Inserte aquí el código a realizar para cada elemento'.

Guardar como pdf

A continuación se guarda un PDF de la hoja de trabajo activa para cada elemento de la lista de Validación de datos. Cambie el parámetro de nombre de archivo para guardar el archivo en la ubicación adecuada de su red. El valor seleccionado se utiliza en el nombre del archivo para garantizar que sea único.

    'Save as PDF    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _        Filename:="C:Test FolderPDF - "  rng.Value  ".pdf"

Para obtener más ejemplos de cómo guardar archivos PDF, consulte nuestra publicación sobre cómo guardar archivos de Excel como PDF con VBA .

Enviar a la última impresora seleccionada

Lo siguiente envía la hoja activa a la última impresora seleccionada.

    'Send to last selected printer    ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _        IgnorePrintAreas:=False

Nota: Si es una impresora PDF, es posible que solicite un nombre de archivo para cada elemento. Por lo tanto, el ejemplo de PDF anterior puede resultar más útil.

Guardar una copia del libro de trabajo

A continuación se guarda una copia del libro de trabajo para cada elemento de la lista. Cambie el parámetro de nombre de archivo para guardar el libro en la ubicación correspondiente. El valor seleccionado se utiliza en el nombre del archivo para garantizar que los nombres de los archivos sean únicos.

    'Save a copy of the workbook    ActiveWorkbook.SaveCopyAs _        Filename:="C:Test FolderExcel Workbook - "  rng.Value  ".xlsm"

Conclusión

Para guardar por lotes o imprimir informes individuales basados ​​en una lista de Validación de datos, esta es una técnica muy útil. Como se repite mucho más rápido de lo que podemos hacer clic, puede ahorrar mucho tiempo.

Aquí hay algunas publicaciones relacionadas que pueden resultarle útiles.

  • Recorrer hojas seleccionadas con VBA
  • Guardar archivos de Excel como PDF con VBA
  • 30 macros VBA útiles, listas para usar

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir

Este sitio web utiliza cookies para mejorar la experiencia del usuario y garantizar un funcionamiento eficiente. Al utilizar nuestro sitio web, aceptas todas las cookies de acuerdo con nuestra política de cookies. Leer mas...