Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Как правильно вызвать функции, расп. на разных листах? - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Как правильно вызвать функции, расп. на разных листах? (Макросы/Sub)
Как правильно вызвать функции, расп. на разных листах?
Юрий_Нд Дата: Пятница, 22.09.2017, 11:14 | Сообщение № 1
Группа: Проверенные
Ранг: Обитатель
Сообщений: 441
Репутация: 19 ±
Замечаний: 0% ±

Excel 2013
Доброго дня, Форум.
Это практически первая программа, которая написана мною самостоятельно от начала и до конца, поэтому прошу не судить строго.
Действие этой функции аналогично стандартной функции ВПР Excel.
Итак.
Возникает ошибка при вызове функции "склад".
Материнская функция "магазин", расположенная в ячейке на листе 2, копирует необходимый аргумент из ячейки "Н8" на листе 2 и вызывает дочернюю функцию "склад".
Дочерняя функция "склад", с помощью цикла перебирает все элементы первого столбца на листе 1, копирует из найденной строчки необходимый элемент и возвращает его материнской функции.
Материнская функция вставляет переданное дочерней функцией значение в ячейку "J8".
Так должно быть. Но...
----------------------------------------------
P. S. Прошу не не менять структуру программы и не оптимизировать. Просьба только устранить ошибки синтаксиса.
Спасибо_____________- Юрий.
К сообщению приложен файл: -3.xlsm (16.4 Kb)


Сообщение отредактировал Юрий_Нд - Пятница, 22.09.2017, 11:27
 
Ответить
СообщениеДоброго дня, Форум.
Это практически первая программа, которая написана мною самостоятельно от начала и до конца, поэтому прошу не судить строго.
Действие этой функции аналогично стандартной функции ВПР Excel.
Итак.
Возникает ошибка при вызове функции "склад".
Материнская функция "магазин", расположенная в ячейке на листе 2, копирует необходимый аргумент из ячейки "Н8" на листе 2 и вызывает дочернюю функцию "склад".
Дочерняя функция "склад", с помощью цикла перебирает все элементы первого столбца на листе 1, копирует из найденной строчки необходимый элемент и возвращает его материнской функции.
Материнская функция вставляет переданное дочерней функцией значение в ячейку "J8".
Так должно быть. Но...
----------------------------------------------
P. S. Прошу не не менять структуру программы и не оптимизировать. Просьба только устранить ошибки синтаксиса.
Спасибо_____________- Юрий.

Автор - Юрий_Нд
Дата добавления - 22.09.2017 в 11:14
nilem Дата: Пятница, 22.09.2017, 11:26 | Сообщение № 2
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
Юрий_Нд, привет
если ничего нельзя менять, то вот
[vba]
Код
Function магазин(m As String) As String
Dim c As String, s As String
'With Sheets(2)
c = m
s = склад(c)
магазин = s
'End With
End Function

Function склад(ByVal c As String)
Dim name As String
Dim i As Long
With Sheets(1)
    For i = 6 To 11    '
        If .Cells(i, 3) = c Then name = .Cells(i, 4) 'kd -> c, точки перед Cells
    Next i
    склад = name
End With
End Function
[/vba]
upd
name - зарезервированное слово, замените на что-то другое


Яндекс.Деньги 4100159601573

Сообщение отредактировал nilem - Пятница, 22.09.2017, 11:30
 
Ответить
СообщениеЮрий_Нд, привет
если ничего нельзя менять, то вот
[vba]
Код
Function магазин(m As String) As String
Dim c As String, s As String
'With Sheets(2)
c = m
s = склад(c)
магазин = s
'End With
End Function

Function склад(ByVal c As String)
Dim name As String
Dim i As Long
With Sheets(1)
    For i = 6 To 11    '
        If .Cells(i, 3) = c Then name = .Cells(i, 4) 'kd -> c, точки перед Cells
    Next i
    склад = name
End With
End Function
[/vba]
upd
name - зарезервированное слово, замените на что-то другое

Автор - nilem
Дата добавления - 22.09.2017 в 11:26
buchlotnik Дата: Пятница, 22.09.2017, 11:27 | Сообщение № 3
Группа: Заблокированные
Ранг: Участник клуба
Сообщений: 3442
Репутация: 929 ±
Замечаний: 20% ±

2010, 2013, 2016 RUS / ENG
Здравствуйте, так нужно? [vba]
Код
Function магазин(m As String)
    Dim c$, s$
    With Sheets(2)
        c = m
        s = склад(c)
        магазин = s
    End With
End Function

Function склад(c As String)
    Dim name As String
    Dim i    As Long
    With Sheets(1)
        For i = 6 To 11
            If .Cells(i, 3) = c Then name = .Cells(i, 4)
        Next i
        склад = name
    End With
End Function
[/vba]
К сообщению приложен файл: 354.xlsm (16.1 Kb)


Сообщение отредактировал buchlotnik - Пятница, 22.09.2017, 11:28
 
Ответить
СообщениеЗдравствуйте, так нужно? [vba]
Код
Function магазин(m As String)
    Dim c$, s$
    With Sheets(2)
        c = m
        s = склад(c)
        магазин = s
    End With
End Function

Function склад(c As String)
    Dim name As String
    Dim i    As Long
    With Sheets(1)
        For i = 6 To 11
            If .Cells(i, 3) = c Then name = .Cells(i, 4)
        Next i
        склад = name
    End With
End Function
[/vba]

Автор - buchlotnik
Дата добавления - 22.09.2017 в 11:27
Юрий_Нд Дата: Пятница, 22.09.2017, 11:29 | Сообщение № 4
Группа: Проверенные
Ранг: Обитатель
Сообщений: 441
Репутация: 19 ±
Замечаний: 0% ±

Excel 2013
Отлично, всем спасибо.
buchlotnik, Спасибо за вчерашнюю подсказку с функцией Find. Но, "... не в коня корм...". Пока мне еще рано разбираться в этом направлении. Если на досуге найдете возможность разобраться с этой функцией и "кинуть", например сюда конкретный примерчик, буду очень признателен.


Сообщение отредактировал Юрий_Нд - Пятница, 22.09.2017, 11:43
 
Ответить
СообщениеОтлично, всем спасибо.
buchlotnik, Спасибо за вчерашнюю подсказку с функцией Find. Но, "... не в коня корм...". Пока мне еще рано разбираться в этом направлении. Если на досуге найдете возможность разобраться с этой функцией и "кинуть", например сюда конкретный примерчик, буду очень признателен.

Автор - Юрий_Нд
Дата добавления - 22.09.2017 в 11:29
sboy Дата: Пятница, 22.09.2017, 11:34 | Сообщение № 5
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2566
Репутация: 724 ±
Замечаний: 0% ±

Excel 2010
В первой with не нужен
Во второй выходите из цикла, если требуемое значение найдено
[vba]
Код
Option Explicit

Function магазин(m As String)
       магазин = склад(m)
End Function

Function склад(c As String)

Dim name As String
Dim i    As Long

With Sheets(1)
        For i = 6 To 11 '
               If .Cells(i, 3) = c Then
               name = .Cells(i, 4)
               Exit For
               End If
        Next i
     склад = name
End With
End Function
[/vba]
К сообщению приложен файл: 8716857.xlsm (15.9 Kb)


Яндекс: 410016850021169
 
Ответить
СообщениеВ первой with не нужен
Во второй выходите из цикла, если требуемое значение найдено
[vba]
Код
Option Explicit

Function магазин(m As String)
       магазин = склад(m)
End Function

Function склад(c As String)

Dim name As String
Dim i    As Long

With Sheets(1)
        For i = 6 To 11 '
               If .Cells(i, 3) = c Then
               name = .Cells(i, 4)
               Exit For
               End If
        Next i
     склад = name
End With
End Function
[/vba]

Автор - sboy
Дата добавления - 22.09.2017 в 11:34
_Boroda_ Дата: Пятница, 22.09.2017, 11:37 | Сообщение № 6
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16672
Репутация: 6479 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
У меня этот файл дважды Excel вырубал в момент, когда ставил точку перед Cells
[vba]
Код
Function магазин(m As String)
Dim c As String, s As String
        c = m
        s = склад(c)
магазин = s
End Function

Function склад(c As String)
Dim name_ As String
Dim i    As Long
With Sheets(1)
        For i = 6 To 11 '
               If .Cells(i, 3) = c Then name_ = .Cells(i, 4)     '
        Next i
     склад= name_
End With
End Function
[/vba]
В VBA есть куча слов, которые уже как бы заняты. Конечно же, никто их все помнить не призывает. Но переменные нужно обзывать как-то так, чтобы точно не вляпаться в такое уже занятое слово. Я, например, последним символом ставлю нижнее подчеркивание.


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеУ меня этот файл дважды Excel вырубал в момент, когда ставил точку перед Cells
[vba]
Код
Function магазин(m As String)
Dim c As String, s As String
        c = m
        s = склад(c)
магазин = s
End Function

Function склад(c As String)
Dim name_ As String
Dim i    As Long
With Sheets(1)
        For i = 6 To 11 '
               If .Cells(i, 3) = c Then name_ = .Cells(i, 4)     '
        Next i
     склад= name_
End With
End Function
[/vba]
В VBA есть куча слов, которые уже как бы заняты. Конечно же, никто их все помнить не призывает. Но переменные нужно обзывать как-то так, чтобы точно не вляпаться в такое уже занятое слово. Я, например, последним символом ставлю нижнее подчеркивание.

Автор - _Boroda_
Дата добавления - 22.09.2017 в 11:37
Юрий_Нд Дата: Пятница, 22.09.2017, 11:45 | Сообщение № 7
Группа: Проверенные
Ранг: Обитатель
Сообщений: 441
Репутация: 19 ±
Замечаний: 0% ±

Excel 2013
buchlotnik, Спасибо за вчерашнюю подсказку с функцией Find. Но, "... не в коня корм...". Пока мне еще рано разбираться в этом направлении. Если кто-нибудь, на досуге, найдет возможность разобраться с этой функцией и "кинуть", например сюда конкретный примерчик, буду очень признателен.
 
Ответить
Сообщениеbuchlotnik, Спасибо за вчерашнюю подсказку с функцией Find. Но, "... не в коня корм...". Пока мне еще рано разбираться в этом направлении. Если кто-нибудь, на досуге, найдет возможность разобраться с этой функцией и "кинуть", например сюда конкретный примерчик, буду очень признателен.

Автор - Юрий_Нд
Дата добавления - 22.09.2017 в 11:45
buchlotnik Дата: Пятница, 22.09.2017, 11:47 | Сообщение № 8
Группа: Заблокированные
Ранг: Участник клуба
Сообщений: 3442
Репутация: 929 ±
Замечаний: 20% ±

2010, 2013, 2016 RUS / ENG
Цитата
например сюда
прочитайте правила форума и создайте новую тему или в той приложите нормальный файл
 
Ответить
Сообщение
Цитата
например сюда
прочитайте правила форума и создайте новую тему или в той приложите нормальный файл

Автор - buchlotnik
Дата добавления - 22.09.2017 в 11:47
Юрий_Нд Дата: Пятница, 22.09.2017, 11:51 | Сообщение № 9
Группа: Проверенные
Ранг: Обитатель
Сообщений: 441
Репутация: 19 ±
Замечаний: 0% ±

Excel 2013
создайте новую тему

Прошу прощения, исправлюсь...
В первой with не нужен

Прошу пояснить ...


Сообщение отредактировал Юрий_Нд - Пятница, 22.09.2017, 11:55
 
Ответить
Сообщение
создайте новую тему

Прошу прощения, исправлюсь...
В первой with не нужен

Прошу пояснить ...

Автор - Юрий_Нд
Дата добавления - 22.09.2017 в 11:51
buchlotnik Дата: Пятница, 22.09.2017, 13:14 | Сообщение № 10
Группа: Заблокированные
Ранг: Участник клуба
Сообщений: 3442
Репутация: 929 ±
Замечаний: 20% ±

2010, 2013, 2016 RUS / ENG
Цитата
Прошу пояснить ...
ну... он не нужен, поскольку вы его никак не используете. Этот оператор используется для сокращённой записи, дабы по сто раз не переписывать название объекта, а вы его фактически написали просто так
 
Ответить
Сообщение
Цитата
Прошу пояснить ...
ну... он не нужен, поскольку вы его никак не используете. Этот оператор используется для сокращённой записи, дабы по сто раз не переписывать название объекта, а вы его фактически написали просто так

Автор - buchlotnik
Дата добавления - 22.09.2017 в 13:14
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Как правильно вызвать функции, расп. на разных листах? (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!