В этой статье мы узнаем, как получить данные из внешней книги в активной книге на основе определенного определенного условия.

В этом примере мы хотим получить сведения о деньгах для конкретного человека на основе имени и типа категории банка. Реквизиты денег хранятся в книге «Файл данных».

DataFile

В этом примере мы написали процедуру VBA «ReadFormatting», которая возвращает сведения о деньгах вместе со стилем формата.

Логическое объяснение

Процедура «ReadFormatting» принимает объект диапазона в качестве входных данных и возвращает результат в ячейке рядом с определенным объектом диапазона.

Он проверяет определенное значение в диапазоне в первой строке книги «Файл данных» и находит номер столбца. Он проверяет значение ячейки предыдущего столбца определенного диапазона в первом столбце книги «Файл данных» и находит номер строки.

После нахождения номера столбца и номера строки возможного совпадения, значение ячейки с найденным номером столбца и номером строки возвращается вместе со стилем формата.

Процедуру «ReadFormatting» можно запустить с помощью другой процедуры или события.

Мы будем запускать процедуру «ReadFormatting» двумя способами: -. Использование процедуры. Использование события изменения рабочего листа

Использование процедуры

Мы использовали процедуру «CallingProcedure» для вызова процедуры «ReadFormatting» с ячейкой N13 в качестве объекта диапазона. Он проверит значение в ячейке N13 в первой строке внешней книги, чтобы найти номер столбца, и проверит значение в ячейке M13 в первом столбце внешней книги, чтобы найти номер строки. После нахождения номера столбца и номера строки он вернет значение вместе со стилем формата.

ArrowRunningMacro

Использование события изменения рабочего листа

Чтобы добавить событие изменения рабочего листа, выполните следующие действия: -. Щелкните имя листа в редакторе Visual Basic, чтобы активировать модуль листа.

ArrowWritingWorksheetEvent

  1. Щелкните лист в левом поле со списком в верхней части окна кода.

ArrowWorksheetChangeEvent

  1. Щелкните изменение в правом поле со списком в верхней части окна кода.

Мы использовали событие изменения рабочего листа для запуска процедуры. Событие изменения рабочего листа запускается при изменении значения любой ячейки в книге. Используя оператор IF, мы ограничили срабатывание события изменения только при изменении значения в ячейке столбца I. Ячейка, значение которой изменено, действует как вход для процедуры «ReadFormatting».

Пожалуйста, введите код ниже

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

Если вам понравился этот блог, поделитесь им с друзьями на Facebook и Facebook.

Мы будем рады услышать от вас, дайте нам знать, как мы можем улучшить нашу работу и сделать ее лучше для вас. Напишите нам на [email protected]