Нужна Dynami c VBA формула - PullRequest
       26

Нужна Dynami c VBA формула

0 голосов
/ 20 апреля 2020

Я пытаюсь вставить динамическую c формулу для именованных переменных a и b. Формула будет содержать эту логику c: если a (определено ниже) пусто, то b (определено ниже), в противном случае a. Результаты должны быть введены в новый столбец с именем Client ID. Мне удалось создать новый столбец Client ID, но у меня возникли проблемы с формулой, в которой код останавливается, поскольку его необходимо отладить. Я пытался определить мои переменные и диапазоны по-разному, но все еще есть проблемы.

Любая помощь приветствуется. Спасибо!

Sub baSTEP1formulaINDEV()

'A column named Client ID already exists

   Dim sht As Worksheet
   Dim StartCell As Range
   Dim LastR As Long
   Dim LastC As Long

   Set sht = Worksheets("Group Activity")
   Set StartCell = Range("A1")

 Dim a As Integer
    a = Cells.Find(What:="*Client: Client / Contact ID*", After:=Range("A2"), LookIn:=xlFormulas, _
            LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
            MatchCase:=False).Column
    ActiveWindow.Activate

  Dim b As Integer
    b = Cells.Find(What:="*Case Participant Client ID*", After:=Range("A2"), LookIn:=xlFormulas, _
            LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
            MatchCase:=False).Column
    ActiveWindow.Activate

 'Find Last Row and Column
  LastR = sht.Cells(sht.Rows.Count, StartCell.Column).End(xlUp).Row
  LastC = sht.Cells(StartCell.Row, sht.Columns.Count).End(xlToLeft).Column

Range(Selection).Formula = _
"=IF(ISBLANK(a),b,a)"


End Sub

1 Ответ

0 голосов
/ 20 апреля 2020

для динамической c формулы лучше использовать функцию () вместо sub (), вам может помочь это решение: в этом случае вы просто вводите формулу custum в любую нужную ячейку, например, вы можете ввести эту формулу в ячейке E1: =customSearch(A1:B4) диапазон A1:B4 (например) может быть выбран путем перетаскивания мышью

 Function customSearch(SearchRange As Range) As String
    Dim rng As Range
    Dim aFound As Boolean, bFound As Boolean
    Dim aText, bText
    Dim aAddress, bAddress
    aText = "*Client: Client / Contact ID*"
    bText = "*Case Participant Client ID*"
    aFound = False
    bFound = False

    For Each rng In SearchRange
        If InStr(rng, aText) > 0 Then
            aAddress = rng.Address
            aFound = True
            Exit For
        End If
    Next

    If aFound = False Then
        For Each rng In SearchRange
            If InStr(rng, bText) > 0 Then
                bAddress = rng.Address
                bFound = True
                Exit For
            End If
        Next
    End If

    If aFound = True Then
        customSearch = aAddress
    Else
        customSearch = bAddress
    End If
End Function

, этот комментарий может быть полезен для функции: вы можете установить свою функцию в publi c и сохраните ваш файл с типом «* .xla» (надстройка Excel), и затем вы сможете использовать эту функцию в каждой нужной книге.

...