Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Польвательские функции /проблема/ / 10 сообщений из 10, страница 1 из 1
27.05.2010, 16:59
    #36653504
tuandreeva
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Польвательские функции /проблема/
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
Function Yvyazka(b As Integer, st As String, Ch As String, sCh As String)      'расчет графы  № 8 форм 0503128, 0503138
Dim ya As Integer
Dim summa As Double
r =  11 
Dim n As Double
Do While Worksheets("0503169").Cells(r,  2 ) <> ""
    If Worksheets("0503169").Cells(r,  2 ) = b Then
    If Worksheets("0503169").Cells(r,  3 ) = Ch Then
    If Ch =  208  And Worksheets("0503169").Cells(r,  6 ) <  0  Then
    summa = summa +  0 
    Else
    If Worksheets("0503169").Cells(r,  4 ) = sCh Then
    If Worksheets("0503169").Cells(r,  5 ) = st Then
        summa = summa + Worksheets("0503169").Cells(r,  6 )
    End If
    End If
    End If
    End If
    End If
r = r +  1 
Yvyazka = summa
Loop
End Function


При использовании функции как ОПРЕДЕЛЕННАЯ ПОЛЬЗОВАТЕЛЕМ проблема в том, что при изменении цифр на листе 0503169, сумма в ячейке с пользовательской функцией не меняется. Только после того, как снова прописываю формулу, расчитывает правильно
(=Yvyazka(A165;D165;B165;C165)). В чем проблема? Расчет стоит автоматический.
P.S.
У меня 7 офис
...
Рейтинг: 0 / 0
27.05.2010, 17:19
    #36653590
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Польвательские функции /проблема/
tuandreeva,

в начало функции нужно добавить строку:
Application.Volatile
которая покажет екселю, что значение функции нужно пересчитывать при пересчету листа
...
Рейтинг: 0 / 0
27.05.2010, 17:24
    #36653609
tuandreeva
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Польвательские функции /проблема/
Игорь Горбоносtuandreeva,

в начало функции нужно добавить строку:
Application.Volatile
которая покажет екселю, что значение функции нужно пересчитывать при пересчету листа

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Function Yvyazka(b As Integer, st As String, Ch As String, sCh As String)      'расчет графы  № 8 форм 0503128, 0503138
Application.Volatile
Dim ya As Integer
Dim summa As Double
r =  11 
Dim n As Double
Do While Worksheets("0503169").Cells(r,  2 ) <> ""
    If Worksheets("0503169").Cells(r,  2 ) = b Then
    If Worksheets("0503169").Cells(r,  3 ) = Ch Then
    If Ch =  208  And Worksheets("0503169").Cells(r,  6 ) <  0  Then
    summa = summa +  0 
    Else
    If Worksheets("0503169").Cells(r,  4 ) = sCh Then
    If Worksheets("0503169").Cells(r,  5 ) = st Then
        summa = summa + Worksheets("0503169").Cells(r,  6 )
    End If
    End If
    End If
    End If
    End If
r = r +  1 
Yvyazka = summa
Loop
End Function

так не работает
...
Рейтинг: 0 / 0
27.05.2010, 17:36
    #36653658
_Boroda_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Польвательские функции /проблема/
tuandreeva,

А если так написать?

=ТЕКСТ(СЛЧИС();";;;")&Yvyazka(A165;D165;B165;C165)
...
Рейтинг: 0 / 0
27.05.2010, 17:47
    #36653690
tuandreeva
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Польвательские функции /проблема/
_Boroda_,

Считает, но вот получается текст, а не число. А мне нужно число
...
Рейтинг: 0 / 0
27.05.2010, 17:56
    #36653715
tuandreeva
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Польвательские функции /проблема/
Код: plaintext
1.
2.
3.
Private Sub Worksheet_Change(ByVal Target As Range)
Application.Volatile
End Sub
Добавила в сам лист 0503169, и все работает. Всем Спасибо!
...
Рейтинг: 0 / 0
27.05.2010, 17:57
    #36653722
_Boroda_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Польвательские функции /проблема/
tuandreeva,

чтобы число было
=--(ТЕКСТ(СЛЧИС();";;;")&Yvyazka(A165;D165;B165;C165))
...
Рейтинг: 0 / 0
31.05.2010, 13:04
    #36658866
_slan_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Польвательские функции /проблема/
tuandreeva
Код: plaintext
1.
2.
3.
Private Sub Worksheet_Change(ByVal Target As Range)
Application.Volatile
End Sub
Добавила в сам лист 0503169, и все работает. Всем Спасибо!

странно:

Marks a user-defined function as volatile. A volatile function must be recalculated whenever calculation occurs in any cells on the worksheet. A nonvolatile function is recalculated only when the input variables change. This method has no effect if it's not inside a user-defined function used to calculate a worksheet cell.
...
Рейтинг: 0 / 0
31.05.2010, 21:11
    #36660031
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Польвательские функции /проблема/
_slan_,

Это обработчик события изменений на листе. Он вызывается самим екселем. И его не нужно объявлять изменяемым. Изменяемые должны быть созданные пользователем функции, которые используются в вычислениях на листе и видны в формула ячеек. :)
...
Рейтинг: 0 / 0
31.05.2010, 21:13
    #36660035
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Польвательские функции /проблема/
_slan_,

Сори, я прочитал что у тебя на этом возникает ошибка.

Мой предыдущий пост адресован ТС
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Польвательские функции /проблема/ / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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