Как преобразовать подпрограмму vba в функцию? - PullRequest
0 голосов
/ 26 мая 2020

Я пытаюсь преобразовать подпроцедуру в функцию. Эта подпрограмма генерирует номер на основе некоторых условий. Он работает, как ожидалось, но когда я пытаюсь преобразовать его как функцию, он генерирует только «0». Кто-нибудь может помочь? Это будет здорово! Вот моя подпрограмма с именем «GenerateNumber»

Public Sub GenerateNumber()
    Dim evenRange As Range
    Dim oddRange As Range
    Dim i As Integer
Set evenRange = Range("A2:Z2,A4:Z4,A6:Z6,A8:Z8,A10:Z10,A12:Z12,A14:Z14,A16:Z16,A18:Z18 ")
    Set oddRange = Range("A1:Z1,A3:Z3,A5:Z5,A7:Z7,A9:Z9,A11:Z11,A13:Z13,A15:Z15,A17:Z17,A19:Z19")

    If Not Intersect(Activecell, evenRange) Is Nothing Then
        If Activecell.Interior.Color = Activecell.Offset(0, -1).Interior.Color Then
            Activecell.Value = Activecell.Offset(0, -1).Value + 1

            For i = 1 To Selection.Cells.Count - 1
            Activecell.Offset(0, i).Value = Activecell.Value + i
            Next i
        Else
            Activecell.Value = 1

            For i = 1 To Selection.Cells.Count - 1
            Activecell.Offset(0, i).Value = Activecell.Value + i
            Next i

        End If
        'MsgBox "Active Cell In Even Range!"
    Else
'      MsgBox "Active Cell In Odd Range!"
      If Activecell.Interior.Color = Activecell.Offset(0, 1).Interior.Color Then
        Activecell.Value = Activecell.Offset(0, 1).Value + 1

        For i = 1 To Selection.Cells.Count - 1
        Activecell.Offset(0, -i).Value = Activecell.Value + i
        Next i
     Else
        Activecell.Value = 1

        For i = 1 To Selection.Cells.Count - 1
        Activecell.Offset(0, -i).Value = Activecell.Value + i
        Next i

      End If

End If

End Sub

И мой код функции, например,

Public Function GenNumber() As Variant

    Dim evenRange As Range
    Dim oddRange As Range
    Dim rng As Range
    Dim i As Integer

    Set evenRange = Range("A2:Z2,A4:Z4,A6:Z6,A8:Z8,A10:Z10,A12:Z12,A14:Z14,A16:Z16,A18:Z18 ")
    Set oddRange = Range("A1:Z1,A3:Z3,A5:Z5,A7:Z7,A9:Z9,A11:Z11,A13:Z13,A15:Z15,A17:Z17,A19:Z19")

    If Not Intersect(Activecell, evenRange) Is Nothing Then
    If Activecell.Interior.Color = Activecell.Offset(0, -1).Interior.Color Then
        Activecell.Value = Activecell.Offset(0, -1).Value + 1

        For i = 1 To Selection.Cells.Count - 1
        Activecell.Offset(0, i).Value = Activecell.Value + i

        Next i
     Else
      Activecell.Value = 1

        For i = 1 To Selection.Cells.Count - 1
        Activecell.Offset(0, i).Value = Activecell.Value + i

        Next i

      End If
   'MsgBox "Active Cell In Even Range!"
    Else
'      MsgBox "Active Cell In Odd Range!"
      If Activecell.Interior.Color = Activecell.Offset(0, 1).Interior.Color Then
        Activecell.Value = Activecell.Offset(0, 1).Value + 1

        For i = 1 To Selection.Cells.Count - 1
        Activecell.Offset(0, -i).Value = Activecell.Value + i

        Next i
     Else
      Activecell.Value = 1

        For i = 1 To Selection.Cells.Count - 1
        Activecell.Offset(0, -i).Value = Activecell.Value + i

        Next i

      End If

End If

    GenNumber = Activecell.Value
End Function

Может ли кто-нибудь сказать, где ошибка и как ее решить. Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...