Как да търсим и отпечатаме запис чрез VBA for Microsoft Excel?

Posted by
/ / 2 коментара

Наскоро ме попитаха как ще изглежда макрос, който да търси определена стойност в дадена колона и след като я намери да отпечатва целия ред. В този пост ще опиша как с помощта на няколко реда код на Visual Basic for Microsoft Excel , се извършва търсене чрез обхождане на масив с броячен цикъл (For_Next) и условен оператор (If_Then).

Примерът, който ще разгледам, може да се използва за изписване на дадена стока от склад.

Имаме таблица с резервни части за автомобили (Фигура 1).

Фигура 1

Може да се наложи да потърсим резервната част по нейния номер, който се намира в колона В.

За целта ще изполвам ред, в който потребителят да въвежда номера на стоката:

       a = InputBox(„Въведете номер на стоката“)

С този ред се отваря прозорец (Фигура 2)

Фигура 2

След въвеждане на номера трябва да извършим самото търсене. Това може да се направи с обикновен цикъл, който обхожда всички записи в колона В и проверява дали въведения от нас номер отговаря на записа в клетката:

For i = 1 To Range(„A2“).CurrentRegion.Rows.Count

If ActiveCell.Value = a Then  ‘Проверяваме дали стойността в текущата клетка е същата като въведената от потребителя

Rows(ActiveCell.Row).Select  ‘Избира целия ред от клетката, която отговаря на намерената стойност

Selection.PrintOut  ‘Отпечатва избрания ред

Else

ActiveCell.Offset(1, 0).Select  ‘Избира клетката на следващия ред спрямо активната

End If

Next i

Тук интересната част е определянето на последен ред на цялата таблица, за да сме сигурни, че цикълът ще обходи всички записи. Това се случва със следния ред:

 Range(„A2“).CurrentRegion.Rows.Count

В дадения пример, данните започват от клетка А2. Ето защо и в кода използвам начална точка А2. Свойството CurrentRegion означава всички клетки от базата, които не са прекъснати с празен ред или колона. В резултат от горния ред ще даде броя редове, в които има някаква информация записана.

Ето как изглежда цялата процедура:

Sub find_record()

Dim a As String

Dim i As Integer

a = InputBox(„Въведете номер на стоката“)

Range(„B3“).Select

For i = 1 To Range(„A2“).CurrentRegion.Rows.Count

If ActiveCell.Value = a Then

Rows(ActiveCell.Row).Select

Selection.PrintOut

Else

ActiveCell.Offset(1, 0).Select

End If

Next i

End Sub

Така описаният пример може да се използва за всички версии на Microsoft Excel след 2003 включително.

За конкретни въпроси и повече информация, относно курсовете и обученията на ITraining по темата VBA for Microsoft Excel и по всички офис продукти на Microsoft, не се колебайте да се свържете с мен.

Още публикации по темата: