powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Преобразование ( Sub) в пользовательскую функцию .
15 сообщений из 15, страница 1 из 1
Преобразование ( Sub) в пользовательскую функцию .
    #39478178
maxim863
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть программа (Sub) , работающая хорошо . Хочу преобразовать ее в пользовательскую функцию , выдает ошибку #ЗНАЧ!

Это код ,работающей программы
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
Sub а33условие5()
'для п/пр
Dim k, n As Integer
Dim parRange As Range

Set parRange = Range("V34:V99")
k = 0
n = 0
For Each Cell In parRange.Rows

If Cell.Offset(0, 1).Value = 1 And k = -1 Then
n = n - 1
End If

If Cell.Value = 1 And k = -1 Then
n = n + 1
End If

If Cell.Value = 1 Then
k = k + 1
   If k = 2 Then
        k = -1
        
   End If
End If
  If Cell.Value = 2 Or Cell.Value = 3 Then
  k = 0
  End If


Next Cell
MsgBox n
    
End Sub



Это код пользовательской функции
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
Function ТридцатьТРи(Diapozon As Integer)
'для п/пр
Dim k, n As Integer
Dim parRange As Range

Set parRange = Range("Diapozon")
k = 0
n = 0
For Each Cell In parRange.Rows

If Cell.Offset(0, 1).Value = 1 And k = -1 Then
n = n - 1
End If

If Cell.Value = 1 And k = -1 Then
n = n + 1
End If

If Cell.Value = 1 Then
k = k + 1
   If k = 2 Then
        k = -1
        
   End If
End If
  If Cell.Value = 2 Or Cell.Value = 3 Then
  k = 0
  End If


Next Cell

 ТридцатьТРи = n
 
End Function
...
Рейтинг: 0 / 0
Преобразование ( Sub) в пользовательскую функцию .
    #39478190
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Навскидку - параметр функции Diapozon нигде в функции не используется
...
Рейтинг: 0 / 0
Преобразование ( Sub) в пользовательскую функцию .
    #39478221
iMrTidy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maxim863,

Возможно так?
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
Function ThirtyThreeFunc(parRange As Range) As Integer

Dim k As Integer
Dim n As Integer
Dim cell As Range

For Each cell In parRange.Rows
    If cell.Offset(0, 1).Value = 1 And k = -1 Then
        n = n - 1
    End If
    If cell.Value = 1 And k = -1 Then
        n = n + 1
    End If
    If cell.Value = 1 Then
        k = k + 1
        If k = 2 Then
            k = -1
        End If
    End If
    If cell.Value = 2 Or cell.Value = 3 Then
        k = 0
    End If
Next

ThirtyThreeFunc = n
    
End Function



Рекомендую пользоваться Option Explicit.
Dim k, n As Integer - переменная k будет типа Variant.
...
Рейтинг: 0 / 0
Преобразование ( Sub) в пользовательскую функцию .
    #39478225
maxim863
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,
Так и есть , спасибо !
...
Рейтинг: 0 / 0
Преобразование ( Sub) в пользовательскую функцию .
    #39478238
maxim863
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть еще один минимальный вопрос : написан код пользовательской функции , все работает ,сохраняю закрываю , потом опять открываю файл , но не могу найти макроса (куда-то исчез ) . Не подскажите где его искать ?
...
Рейтинг: 0 / 0
Преобразование ( Sub) в пользовательскую функцию .
    #39478243
iMrTidy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maxim863Есть еще один минимальный вопрос : написан код пользовательской функции , все работает ,сохраняю закрываю , потом опять открываю файл , но не могу найти макроса (куда-то исчез ) . Не подскажите где его искать ?

Проверьте, что сохраняете в книге с включенными макросами, расширение файла должно быть .xlsm.
...
Рейтинг: 0 / 0
Преобразование ( Sub) в пользовательскую функцию .
    #39478244
maxim863
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iMrTidy, расширение xlsm (но код все равно пропал куда-то)
...
Рейтинг: 0 / 0
Преобразование ( Sub) в пользовательскую функцию .
    #39478317
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
потому что нельзя-я-я
потому что нельзя-я-я.
Потому что нельзя использовать в функции обращение к диапазону и при этом вызывать эту функцию с листа.
Все диапазоны в функцию должны передаваться через аргумент.

Функция не может быть зависима от значений в других ячейках листа.
...
Рейтинг: 0 / 0
Преобразование ( Sub) в пользовательскую функцию .
    #39478320
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вместо
Код: vbnet
1.
2.
3.
4.
5.
6.
Sub а33условие5()
'для п/пр
Dim k, n As Integer
Dim parRange As Range

Set parRange = Range("V34:V99")


пиши
Код: vbnet
1.
2.
3.
function а33условие5(Range parRange)
'для п/пр
Dim k, n As Integer


и вызывай её с листа
=а33условие5(V34:V99)
...
Рейтинг: 0 / 0
Преобразование ( Sub) в пользовательскую функцию .
    #39478325
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и ещё одно.
Ты в курсе, что после этого объявления
maxim863
Код: vbnet
1.
Dim k, n As Integer


ты получаешь переменную k типа Variant и переменную n типа integer?
а чтобы обе integer были, писать надо:
Код: vbnet
1.
Dim k as integer, n As Integer


или, ещё лучше
Код: vbnet
1.
2.
Dim k as integer
Dim n As Integer
...
Рейтинг: 0 / 0
Преобразование ( Sub) в пользовательскую функцию .
    #39478343
iMrTidy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Charles Weylandпотому что нельзя-я-я
потому что нельзя-я-я.
Потому что нельзя использовать в функции обращение к диапазону и при этом вызывать эту функцию с листа.
Все диапазоны в функцию должны передаваться через аргумент.

Функция не может быть зависима от значений в других ячейках листа.

Может быть Вы не совсем правы? Вот такая функция работает и сохраняется без проблем:

Код: vbnet
1.
2.
3.
4.
5.
Function MyTestFunc() As Variant

MyTestFunc = Range("B1").Value2

End Function
...
Рейтинг: 0 / 0
Преобразование ( Sub) в пользовательскую функцию .
    #39478344
iMrTidy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maxim863iMrTidy, расширение xlsm (но код все равно пропал куда-то)

Было бы здорово взглянуть на Ваш файл-пример.

А Вы случайно не в шаблон сохраняете?
...
Рейтинг: 0 / 0
Преобразование ( Sub) в пользовательскую функцию .
    #39478460
maxim863
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iMrTidy,
...
Рейтинг: 0 / 0
Преобразование ( Sub) в пользовательскую функцию .
    #39478470
iMrTidy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maxim863,

Макрос Ваш на месте, т.е. в Module1. Если у Вас открыто много файлов Excel, то возможно, что Вы ищите не в той книге?
...
Рейтинг: 0 / 0
Преобразование ( Sub) в пользовательскую функцию .
    #39478478
maxim863
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iMrTidy, А ведь и вправду на месте ))) Спасибо !
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Преобразование ( Sub) в пользовательскую функцию .
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]