Синтаксис VB (именованные аргументы)

#vba #excel

#vba #преуспеть

Вопрос:

У меня есть VB-скрипт со строкой, которая выглядит следующим образом:

 Set startCell = referenceCell.EntireColumn.Find(tmp).offset(0,columnOffset)
 

Но я хочу указать find (для точного поиска данного слова в каждом столбце) что-то вроде:

 Set startCell = referenceCell.EntireColumn.Find(tmp, lookat:=xlWhole).offset(0,columnOffset)
 

все в соответствии с
http://msdn.microsoft.com/en-us/library/office/ff839746 (v=office.15).aspx

Но это дает мне синтаксическую ошибку. (Я ненавижу VB)

Я тоже пробовал

 Set tmp = "Precondition" amp; preconditionNumber
Set startCell = ReferenceCell.EntireColumn.Find(what:=tmp,lookat:=xlWhole).offset(0,columnOffset)
 

и даже

 Set startCell = ReferenceCell.EntireColumn.Find(what:=tmp).offset(0,columnOffset)
 

ни один из них не работает.
Как я должен вызвать Find функцию, чтобы получить a Whole Word -Search?
Объявление переменной выглядит следующим образом:

 Dim startCell

for preconditionNumber = 0 to 15 
      Set startCell = Nothing 
      tmp = "Precondition" amp; preconditionNumber 
      Set startCell = referenceCell.EntireColumn.Find(tmp).offset(0,columnOffset)
      ...
 

Вот точное сообщение о синтаксической ошибке.
введите описание изображения здесь

Комментарии:

1. Какой тип tmp ? Если это a String или a Variant , вы должны использовать Let ; Set для объектов. Какой тип объявлен startCell ? Это должно быть так Excel.Range .

2. Извините, но я понятия не имею. В сообщении об ошибке говорится, что в символе 57 ожидается правая скобка, но она находится в середине идентификатора (если вы используете табуляцию с 4 пробелами). Это не имеет смысла… Если что-нибудь еще придет мне в голову, я дам вам знать.

3. Это именно то, что я имею в виду! Проклятый VBA

4. lol VBScript вы имеете в виду не VBA? или оба … хе-хе

Ответ №1:

Используйте что-то вроде:

 Sub luxation()
    Dim ReferenceCell As Range, rCol As Range, tmp As String
    Dim GotIt As Range, MoveOver As Range, columnOffset As Long

    Set ReferenceCell = Range("B9")
    Set rCol = ReferenceCell.EntireColumn.Cells
    tmp = "happiness"
    columnOffset = 2

    Set GotIt = rCol.Find(what:=tmp, after:=rCol(1), lookat:=xlWhole)
    Set MoveOver = GotIt.Offset(0, columnOffset)
    MoveOver.Select
End Sub
 

Исправить ненависть к VBA еще проще, просто повторите:

VBA — мой друг.

30 раз каждое утро

Комментарии:

1. VBA — мой друг.* Психологическое сообщество называет это Стокгольмским синдромом. 😀

2. Я уверен, что если бы я понимал VBA, я был бы поражен этим 🙂 но это один огромный файл, без каких-либо функций, который запускается сверху до кнопки, я даже не смею ничего менять, кроме фактического вызова функции поиска.

3.@theAlse ……….. важно заменить один оператор Find() на серию операторов ……… это позволит нам точно увидеть, какая часть строки Find() завершается ошибкой!