Пользовательская функция возвращает значение ошибки, которая должна быть строкой - PullRequest
1 голос
/ 02 февраля 2020

Я пытаюсь создать файл, в котором на каждом листе есть календарь, а ячейки представляют интервал времени в этот день. У меня есть несколько таблиц, идентичных друг другу, однако первая таблица предназначена для отображения информации. Другие рабочие листы для каждого члена группы, чтобы отметить, если они недоступны (NA) или удаленно доступны (R) в течение этого времени.

Я хочу, чтобы моя функция проверяла на каждом листе одну и ту же координату ячейки (поскольку каждый лист идентичен и ячейки представляют время в тот день), если в них записаны какие-либо R или NA. Если нет, он должен вывести AA для всех доступных в исходной ячейке, где написана функция.

Если есть несколько человек, доступных удаленно, то он должен вывести AA(!) для всех доступных, но некоторые для удаленного доступа, и покажите, кто из них удаленно доступен в комментарии к этой ячейке.

Если есть какие-либо NA s, то выходные данные также должны быть NA и показать, кто из них недоступен в качестве комментария к исходной ячейке.

Я продолжаю получать ошибку #VALUE!, и я понятия не имею, почему.

Вот мой код:

Function Checkdate(a) 'a is the selected cell, which is the same cell as the function is written
    Dim ac
    ac = a.Column
    Dim ar
    ar = a.Row
    Dim names
    names = Array("person1", "person 2", "person 3")
    Dim avlb As String 'avlb is the availabiltiy situation and later will be the result of the function
    avlb = "AA"
    Dim rnames As String 'the string variable where names will be stored who are remotely available
    rnames = ""
    Dim nanames As String 'the string variable where names will be stored who are not available
    nanames = ""
    For Each Name In names
        If Worksheets(Name).Cells(ar, ac).Value = "R" Then
    avlb = "AA(!)"
            rnames = rnames & " " & Name
        End If
        If Worksheets(Name).Cells(ar, ac).Value = "NA" Then
            avlb = "NA"
        nanames = nanames & " " & Name
        End If
    Next Name
    Checkdate(a) = avlb
    If avlb = "AA(!)" Then
        a.AddComment = "Remotely available:" & rnames
    ElseIf avlb = "NA" Then
        a.AddComment = "Not available:" & nanames
    Else
        a.Comment.Delete
    End If
End Function

1 Ответ

1 голос
/ 02 февраля 2020

Действительно, это дает # ЗНАЧЕНИЕ! ошибка, но он также добавляет пустой комментарий. РЕДАКТИРОВАТЬ: основной код работает, если я удаляю комментарии! но мне также нужно добавить комментарий, чтобы показать, кто из них недоступен, как я могу это сделать? - Miraç Mert Pelister 8 минут go

Проблема с этим

If avlb = "AA(!)" Then
    a.AddComment = "Remotely available:" & rnames
ElseIf avlb = "NA" Then
    a.AddComment = "Not available:" & nanames
Else
    a.Comment.Delete
End If

Попробуйте это: (Спасибо @TM за то, что обратили на это мое внимание.)

Правильный способ добавления комментария -

With Rng
    .AddComment
    .Comment.Text Text:="Your text"
End With

Включение его в ваш код.

If avlb = "AA(!)" Then
    With a
        '<~~ Check if cell already has a comment
        If Not .Comment Is Nothing Then .Comment.Delete 
        .AddComment
        .Comment.Text Text:="Remotely available:" & "sid"
    End With
ElseIf avlb = "NA" Then
    With a
        If Not .Comment Is Nothing Then .Comment.Delete
        .AddComment
        .Comment.Text Text:="Not available:" & "sid"
    End With
Else
    If Not a.Comment Is Nothing Then a.Comment.Delete
End If
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...