2015-12-18 5 views
0

У меня есть две функции VBA, но я не могу вызвать другую из первой функции.Вызов одной функции из другой функции в VBA (Excel)

Функция 1:

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
    Dim lastRow As Long 
    With ActiveSheet 
    lastRow = .Cells(.Rows.count, "A").End(xlUp).Row 
    Dim I, J As Integer 
    For I = 1 To lastRow 
     If Cells(I, "C").Value = "" Then 
     MsgBox "Please Enter Business Type Value", vbOKOnly 
     Exit Sub 
     End If 
    Next I 
    End With 
End Sub 

И вторая функция:

Private Sub Worksheet_Change(ByVal Target As Range) 
    If Target.Cells.Count > 1 Then Exit Sub 
    Application.EnableEvents = False 

    If Not Application.Intersect(Target, Me.Columns(3)) Is Nothing Then 
    ActiveSheet.Unprotect 
    Select Case Target.Value 
     Case Is = "CNS" 
     Target.Offset(0, 4).Locked = True 
     Case Is = "cns" 
     Target.Offset(0, 4).Locked = True 
     Case Is = "APL" 
     Target.Offset(0, 4).Locked = False 
     Case Is = "apl" 
     Target.Offset(0, 4).Locked = False 
     Case Else 
     MsgBox "Value not covered by the program", vbInformation + vbOKOnly 
    End Select 
    ActiveSheet.Protect 
    Else 
    End If 
    Application.EnableEvents = True 
End Sub 

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

+0

Какой метод пытается вызвать какие? Что вы пробовали? Какие ошибки вы видите? –

+0

Я думаю, что ваш ответ будет по этому вопросу: https://stackoverflow.com/questions/1072075/how-do-i-call-a-vba-function-into-a-sub-procedure –

+0

Я хочу позвонить в Sub Worksheet_Изменить из Sub Worksheet_SelectionChange – nina

ответ

1

В том же модуле, вы просто звоните nameoffunction
Вы можете сделать функцию общедоступной

public sub function 

Но это плохое (когда-то хорошее) решение. Вы должны структурировать код

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
call modul1.function1 (Target) ' As Range) 
End sub 

Private Sub Worksheet_Change(ByVal Target As Range) 
call modul1.function1 (Target ) ' as range 
call modul1.function2 (Target ) 
end sub 

редактировать ОК уродливый путь

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
.... 
call Worksheet_change (Target) 
End sub 
+0

Спасибо, что помогло, но я не получаю его, как писать – nina

+0

Тест уродливый путь выше – cutzero

+0

Этот вызов workheet_change (target) работает, спасибо за это – nina

Смежные вопросы