Как передать определенные переменные в sub для функции в VBA Excel - PullRequest
0 голосов
/ 15 апреля 2019

В некоторых ячейках даны переменные, например, x и y, которые, если они истинны, получают функцию P (w). Например. x, начинающийся с P (), означает, что значение в ячейке проверяется, равно ли это значение 0 и т. д. Функция Array "IsInArray" проверяет, равно ли найденное значение в данной ячейке "x". Если это так, предполагается перейти к команде функции P () и проверить, равно ли значение в ячейке 0. Если это так, функция P () верна, и макрос начинает копировать некоторые диапазоны.

Мой вопрос: когда макрос входит в функцию, уже определенный диапазон («A» & t), например, «t = 3», не передается в подпрограмму функции. «т» в основном пусто. Цель состоит в том, чтобы уже определенная переменная "t" была взята из подпрограммы и больше не объявлялась в функциональной части.

Более того, я не понимаю, почему мне нужно снова «установить ws = Worksheets (« R »)» в функциональной части, даже если она уже есть в подпартии?

 Sub Examine()

 Dim t As Integer
 Dim Results as Boolean

 Set ws = Worksheets("R")
 Set wt = Worksheets("G")
 Set wi = Worksheets("R")

 t = 2


 Do
       For Each cell In ws.Range("A" & t)
       Set foundValue = wi.Range("A1:A75").Find(cell.Value)
           If Not foundValue Is Nothing Then
              If Not IsError(Application.Match("x", wi.Rows(foundValue.Row).Columns("H").Value,0)) Then
If Results=P() Then
 ws.Range("A" & t).Copy wt.Range("A" & t): wt.Range("B" & t) = "J": wt.Range("C" & t) = "N"
 ELSE:.....
 End If ....
 End If
  Loop Until ws.Range("A" & t) = ""


Function P() 
w = True
Set ws = Worksheets("R")
If ws.Range("B" & t).Value = 0 Then w = False 'The already defined"t" is not taken by the function from the sub.
End If
End Function

1 Ответ

0 голосов
/ 16 апреля 2019

Прежде всего это: Результаты = P (t)

Во-вторых, вы должны объявить переменную "t" с Byval в функции: например,

Функция P (Byval t as Long) как логическое значение

...