2016-11-28 5 views
-1

Я действительно не понимаю этот код VBA, в чем смысл «найти» в этом заявлении, может ли кто-нибудь помочь мне понять?Необходимо указать код VBA

rngOutput = ActiveWorkbook.Sheets(p_objReportActual.Reportname) _ 
      .Range(Range("A2"), Range("A2").End(xlToRight)).Offset(-1, 0) _ 
      .Find(objEachAnalysis.Analysis, , , xlWhole).Offset(2, 0) 
+4

Пожалуйста, ознакомьтесь с документацией метода '' Find' '(https://msdn.microsoft.com/en-us/library/office/ff839746.aspx) объекта' Range'. – YowE3K

ответ

0

Напишите код debug.print objEachAnalysis.Analysis перед кодом.

Код установит rngOutput на две строки ниже найденного значения, напечатанного на консоли (Immediate Window).

После кода напишите debug.print rngOutput.address, чтобы увидеть адрес в том же окне Immediate.

Чтобы увидеть окно «Непосредственное», нажмите ctrl+G, когда вы находитесь в редакторе Visual Basic в Excel.

0

Выражение может выглядеть довольно сложным на первый взгляд, вы можете разделить его, чтобы сделать вещи более простой, вот пример с комментариями:

' get target sheet name 
    sTargetSheet = p_objReportActual.Reportname 
    ' get the value which need to be found 
    vToFind = objEachAnalysis.Analysis 
    ' get the sheet object 
    Set oSheet = ActiveWorkbook.Sheets(sTargetSheet) 
    ' get actually all cells within row 2 as init range 
    Set oInitRange = oSheet.Range(Range("A2"), Range("A2").End(xlToRight)) 
    ' get the range to search in as init range shifted by 1 row up 
    Set oSearchRange = oInitRange.Offset(-1, 0) 
    ' get the first cell where the value found 
    Set oFoundCell = oSearchRange.Find(vToFind, , , xlWhole) 
    ' get result cell shifted by 2 row down 
    Set oResultCell = oFoundCell.Offset(2, 0) 
    ' show the cell on the sheet 
    oResultRange.Select 

Теперь очевидно, что .Find() это просто метод объекта диапазона , вы можете легко найти раздел справки в MSDN для этого метода, как указано в комментариях.

+0

Как это помогает пользователю ответить на его вопрос? –

0

rngOutput является ячейкой 2 строки ниже, где значение «objEachAnalysis.Analysis» находится в диапазоне от А2 до последней ячейки вправо в пределах диапазона в рабочем листе «p_objReportActual.Reportname» и 1 ряд выше

Так что, если есть данные в A2: Z2, функция выглядит в диапазоне A2: Z1 для точного соответствия objEachAnalysis.Analysis. Скажем, что это найдено в C1, тогда rngOutput - две ячейки вниз. то есть он возвращается C3

Смежные вопросы