En este artículo, aprenderemos cómo obtener datos de un libro de trabajo externo en el libro de trabajo activo en función de cierta condición definida.

En este ejemplo, queremos obtener los detalles del dinero de una persona en particular según el nombre y el tipo de categoría bancaria. Los detalles del dinero se almacenan en el libro de trabajo «Archivo de datos».

DataFile

En este ejemplo, hemos escrito el procedimiento de VBA «ReadFormatting» que devuelve los detalles del dinero junto con el estilo del formato.

Explicación lógica

El procedimiento «ReadFormatting» toma el objeto de rango como entrada y devuelve la salida en la celda junto al objeto de rango definido.

Comprueba el valor definido en el rango dentro de la primera fila del libro de trabajo «Archivo de datos» y encuentra el número de columna. Comprueba el valor de la celda de la columna anterior del rango definido dentro de la primera columna del libro de trabajo «Archivo de datos» y encuentra el número de fila.

Después de encontrar el número de columna y el número de fila de posible coincidencia, se devuelve el valor de la celda con el número de columna y el número de fila encontrados junto con el estilo de formato.

El procedimiento «ReadFormatting» se puede ejecutar mediante otro procedimiento o evento.

Ejecutaremos el procedimiento «ReadFormatting» de dos formas: -. Procedimiento de uso. Usando el evento de cambio de hoja de trabajo

Usando el procedimiento

Hemos utilizado el procedimiento «CallingProcedure» para llamar al procedimiento «ReadFormatting» con la celda N13 como objeto de rango. Verificará el valor en la celda N13 en la primera fila del libro de trabajo externo para encontrar el número de columna y verificará el valor en la celda M13 en la primera columna del libro de trabajo externo para encontrar el número de fila. Después de encontrar el número de columna y el número de fila, devolverá el valor junto con el estilo de formato.

ArrowRunningMacro

Usando evento de cambio de hoja de trabajo

Para agregar un evento de cambio de hoja de trabajo, siga los siguientes pasos: -. Haga clic en el nombre de la hoja en el Editor de Visual Basic, para activar el módulo de hoja.

ArrowWritingWorksheetEvent

  1. Haga clic en la hoja de trabajo en el cuadro combinado de la izquierda en la parte superior de la ventana de código.

ArrowWorksheetChangeEvent

  1. Haga clic en el cambio en el cuadro combinado de la derecha en la parte superior de la ventana de código.

Hemos utilizado el evento de cambio de hoja de trabajo para ejecutar el procedimiento. El evento de cambio de hoja de trabajo se activa cuando se cambia el valor de cualquier celda del libro. Usando la declaración IF, hemos restringido el evento de cambio para que se active solo cuando se cambia el valor en la celda de la columna I. La celda cuyo valor se cambia actúa como entrada para el procedimiento «ReadFormatting».

Siga a continuación el código

Option Explicit

Sub CallingProcedure()

'Calling procedure ReadFormatting for cell N13

Call ReadFormatting(Range("N13"))



End Sub

Sub ReadFormatting(rng As Range)

Dim varRow, varCol As Long

Application.ScreenUpdating = False

'Activating workbook "Data file.xlsx"

Workbooks("Data file.xlsx").Activate

'Checking for Errors

'If any runtime error occur then it will the pointer to end of the procedure

On Error GoTo Last

'Finding the column no after matching rng value in the first row of "Data file.xlsx" workbook

varRow = Application.Match(rng.Value, Rows(1), 0)

'Offset method is used for moving one cell in the previous column

'Finding the row no after matching value of cell in the first column of "Data file.xlsx" workbook

varCol = Application.Match(rng.Offset(0, -1).Value, Columns(1), 0)

'Using If statement for checking errors

'If error not found in varRow and varCol then execute below code

If Not IsError(varRow) And Not IsError(varCol) Then

'Copying value of cell where match of row and column intersect

Cells(varCol, varRow).Copy



'Pasting the format of copied cell

rng.Offset(0, 1).PasteSpecial xlPasteFormats



'Pasting the value of copied cell

rng.Offset(0, 1).PasteSpecial xlPasteValues



'Unselecting the previous copied data and clearing the cache

Application.CutCopyMode = False



End If

Application.ScreenUpdating = True

Last:

Workbooks("Searching_And_Getting_Data_From_Other_File_Along_With_Formatting.xlsm").Activate



End Sub

Si te gustó este blog, compártelo con tus amigos en Facebook y Facebook.

Nos encantaría saber de usted, háganos saber cómo podemos mejorar nuestro trabajo y hacerlo mejor para usted. Escríbanos a [email protected]