Страницы: 1
RSS
Функция для сокращения кода
 
Есть кусок часто повторяющегося кода, переход на конкретный лист и проверка текущего значения на заполненность с запросом на перезапись, хочу вынести его в функцию:
Код
Sheets("Лист1").Select 
If ActiveCell.Value = "" Then
  Else
     RunMacro = MsgBox("Заменить?", 4, "")
     If RunMacro <> 6 Then 
     Exit Sub
     End If
End If


но если делаю вот так:

Код
Private Sub ....
...
pusto
...
End Sub

Function pusto()
Sheets("Лист1").Select 
If ActiveCell.Value = "" Then
  Else
     RunMacro = MsgBox("Заменить?", 4, "")
     If RunMacro <> 6 Then 
     Exit Sub
     End If
End If
End Function

то вылазит ошибка, что нельзя использовать    Exit Sub в функции

Как это можно обойти?
 
ну как бы логично, пусть фукция возвращает какое-то значение, а обработывать его нужно в процедуре
п.с. в данном случае корректнее использовать не функцию, а процедуру
 
как то так? :
Код
Private Sub ....
...
If pusto(i)=1 then exit sub
...
End Sub

Function pusto(i)
Sheets("Лист1").Select 
If ActiveCell.Value = "" Then
  Else
     RunMacro = MsgBox("Заменить?", 4, "")
     If RunMacro <> 6 Then 
     i=1
     End If
End If
End Function
 
alexnf
Объясните, а зачем вам функция pusto, если она ничего не возвращает?
Вам же предлагают использовать
Код
Sub pusto(i)
    'ваш код здесь
End Sub
 
ну если хочется функцию, то писать exit function

вы, кстати, заметили, что msgbox как раз функция?
Изменено: Слэн - 01.11.2013 11:24:26
Живи и дай жить..
 
По сути Sub и Function это функции. Только Sub по умолчанию имеет тип Void, т.е. не возвращает значение.
Лично меня больше интересует зачем там Else?

Код
Sheets("Лист1").Select 
If ActiveCell.Value <> "" Then
     RunMacro = MsgBox("Заменить?", 4, "")
     If RunMacro <> 6 Then 
         Exit Function 'Exit Sub
     End If
End If


Если опираться на последний вариант:
Код
Private Sub ....
...
If pusto = 1 then exit sub
...
End Sub

Function pusto()
Sheets("Лист1").Select 
If ActiveCell.Value <> "" Then
     RunMacro = MsgBox("Заменить?", 4, "")
     If RunMacro <> 6 Then 
         pusto=1
     End If
End If
End Function
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
По сути Sub и Function это функции. Только Sub по умолчанию имеет тип Void, т.е. не возвращает значение
Это с точки зрения языка С, а если брать ассемблер? Не припомню (давно с ним не общался), чтобы там было что-то похожее на понятие функция. Всё же, на мой взгляд, это так программно-философская абстракция языков высокого уровня функция-процедура.
 
Сделал по последнему варианту.
Спасибо за помощь
 
Цитата
По сути Sub и Function это функции. Только Sub по умолчанию имеет тип Void, т.е. не возвращает значение
по сути это подпрограммы  :)
но все таки разные
Живи и дай жить..
Страницы: 1
Наверх