powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / 2 простые процедуры. Одна вызывает другую. Что не так?
14 сообщений из 14, страница 1 из 1
2 простые процедуры. Одна вызывает другую. Что не так?
    #37925961
Dymanovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Public Sub Âñòàâèòü_èç_äð_òàáëèöû_ïðè_ñîâïàäåíèè(targetTableName As String, targetSheet As String, _
        srcCol As String, srcRow As Integer, colForSearchInTgTbl As String, _
        columnToExtractInTgTbl As String, columnToInsertInCurrTbl As String)
        
    Set targetSheet = Workbooks(targetTableName).Worksheets(targetSheet)
    Set dataForSearch = ActiveSheet.Cells(srcRow, srcCol)
    For i = 1 To targetSheet.Rows.Count
        If targetSheet.Cells(i, colForSearchInTgTbl) = dataForSearch Then
            ActiveSheet.Cells(srcRow, columnToInsertInCurrTbl) = targetSheet.Cells(i, columnToExtractInTgTbl)
        End If
    Next i
End Sub

Public Sub Âñòàâèòü_èç_Òàáëèöà_Òóàïñå_îôîðìëåííàÿ_ïðè_ñîâïàäåíèè_äëÿ_òåê_çíà÷()

    Âñòàâèòü_èç_äð_òàáëèöû_ïðè_ñîâïàäåíèè("Òàáëèöà_Òóàïñå_îôîðìëåííàÿ.xlsm", "Òóàïñå", _
                                            "N", ActiveCell.Row, "E", "A", "O")
                                            
End Sub



Что должно происходить. Excel. Макрос(?). Для текущей строки на текущем листе текущей таблицы берётся значение в ячейке столбца N. Далее в другой таблице просматривается столбец E. В случае совпадения, берётся значение ячейки столбца A совпавшей строки и вставляется в ячейку столбца O текущей таблицы, текущей строки.

Код: vbnet
1.
2.
Âñòàâèòü_èç_äð_òàáëèöû_ïðè_ñîâïàäåíèè("Òàáëèöà_Òóàïñå_îôîðìëåííàÿ.xlsm", "Òóàïñå", _
                                            "N", ActiveCell.Row, "E", "A", "O")

- редактор подсвечивает красным. требует :=
Если написать (заведомо бред)
Код: vbnet
1.
2.
Set a = Âñòàâèòü_èç_äð_òàáëèöû_ïðè_ñîâïàäåíèè("Òàáëèöà_Òóàïñå_îôîðìëåííàÿ.xlsm", "Òóàïñå", _
                                            "N", ActiveCell.Row, "E", "A", "O")

, то возникает ошибка во время выполнения.

Как правильно. И отличаются ли чем-нибудь := от =?
...
Рейтинг: 0 / 0
2 простые процедуры. Одна вызывает другую. Что не так?
    #37925970
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правильно — не называть переменные и функции русскими именами.
...
Рейтинг: 0 / 0
2 простые процедуры. Одна вызывает другую. Что не так?
    #37925982
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А просто функции листа вас не устраивают?
Давно и надолго забытый ПРОСМОТР() , или ПОИСКПОЗ() ?
...
Рейтинг: 0 / 0
2 простые процедуры. Одна вызывает другую. Что не так?
    #37925994
Dymanovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Перевёл этот кавардак. А в предварительном просмотре всё нормально было.

Antonariy, А почему тогда MS сама все макросы русскими именами называет?

Я в VB - вообще ничего не соображаю. Программирую на C++. А тут надо такую штуку сделать...

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Public Sub Вставить_из_др_таблицы_при_совпадении(targetTableName As String, targetSheet As String, _
        srcCol As String, srcRow As Integer, colForSearchInTgTbl As String, _
        columnToExtractInTgTbl As String, columnToInsertInCurrTbl As String)
        
    Set targetSheet = Workbooks(targetTableName).Worksheets(targetSheet)
    Set dataForSearch = ActiveSheet.Cells(srcRow, srcCol)
    For i = 1 To targetSheet.Rows.Count
        If targetSheet.Cells(i, colForSearchInTgTbl) = dataForSearch Then
            ActiveSheet.Cells(srcRow, columnToInsertInCurrTbl) = targetSheet.Cells(i, columnToExtractInTgTbl)
        End If
    Next i
End Sub



Sub Вставить_из_Таблица_Туапсе_форомленная_при_совпадении_тек_знач()

Set a = Вставить_из_др_таблицы_при_совпадении("Таблица_Туапсе_форомленная.xlsm", "Туапсе", _
                                            "N", ActiveCell.Row, "E", "A", "O")                                            
End Sub



Что должно происходить. Excel. Макрос(?). Для текущей строки на текущем листе текущей таблицы берётся значение в ячейке столбца N. Далее в другой таблице просматривается столбец E. В случае совпадения, берётся значение ячейки столбца A совпавшей строки и вставляется в ячейку столбца O текущей таблицы, текущей строки.

Код: vbnet
1.
2.
Вставить_из_др_таблицы_при_совпадении("Таблица_Туапсе_форомленная.xlsm", "Туапсе", _
                                            "N", ActiveCell.Row, "E", "A", "O")


- редактор подсвечивает красным. требует :=

Если написать (заведомо бред)
Код: vbnet
1.
2.
Set a = Вставить_из_др_таблицы_при_совпадении("Таблица_Туапсе_форомленная.xlsm", "Туапсе", _
                                            "N", ActiveCell.Row, "E", "A", "O")

, то возникает ошибка во время выполнения.

Как правильно. И отличаются ли чем-нибудь := от =?
...
Рейтинг: 0 / 0
2 простые процедуры. Одна вызывает другую. Что не так?
    #37926004
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Set a = Вставить_из_др_таблицы_при_совпадении — это получение значения от функции.

Public Sub Вставить_из_др_таблицы_при_совпадении — это объявление процедуры, а не функции. Процедуры не возвращают значений.
...
Рейтинг: 0 / 0
2 простые процедуры. Одна вызывает другую. Что не так?
    #37926014
Dymanovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariySet a = Вставить_из_др_таблицы_при_совпадении — это получение значения от функции.

Public Sub Вставить_из_др_таблицы_при_совпадении — это объявление процедуры, а не функции. Процедуры не возвращают значений.

DymanoskyЕсли написать (заведомо бред)

Это я знаю. Я методом тыка пытаюсь нати ошибку. Почему
Код: vbnet
1.
2.
Вставить_из_др_таблицы_при_совпадении("Таблица_Туапсе_форомленная.xlsm", "Туапсе", _
                                            "N", ActiveCell.Row, "E", "A", "O")

подствечивается красным и он требует CompilerExpected: =
...
Рейтинг: 0 / 0
2 простые процедуры. Одна вызывает другую. Что не так?
    #37926016
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
отличаются ли чем-нибудь := от =?:= используется при поименной передаче параметров процедурам, дает возможность писать параметры в произвольном порядке. Удобно, когда параметров более 9000 и большая часть из них необязательна, плохой тон в остальных случаях.
...
Рейтинг: 0 / 0
2 простые процедуры. Одна вызывает другую. Что не так?
    #37926022
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DymanovskyЭто я знаю. Я методом тыка пытаюсь нати ошибку. Ааа.

Либо
Код: vbnet
1.
Call Proc(param1, param2)


либо
Код: vbnet
1.
Proc param1, param2
...
Рейтинг: 0 / 0
2 простые процедуры. Одна вызывает другую. Что не так?
    #37926088
Dymanovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Call помогло.
Убрал Set'ы. Теперь выглядит так:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
Public Sub Вставить_из_др_таблицы_при_совпадении(targetTableName As String, targetSheet As String, _
        srcCol As String, srcRow As Integer, colForSearchInTgTbl As String, _
        columnToExtractInTgTbl As String, columnToInsertInCurrTbl As String)
        
    targetSheet = Workbooks(targetTableName).Worksheets(targetSheet)
    dataForSearch = ActiveSheet.Cells(srcRow, srcCol)
    rowCount = targetSheet.UsedRange.Rows.Count
    For i = 1 To rowCount
        If targetSheet.Cells(i, colForSearchInTgTbl) = dataForSearch Then
            ActiveSheet.Cells(srcRow, columnToInsertInCurrTbl) = targetSheet.Cells(i, columnToExtractInTgTbl)
        End If
    Next i

End Sub



Sub Вставить_из_Таблица_Туапсе_форомленная_при_совпадении_тек_знач()

	Call Вставить_из_др_таблицы_при_совпадении("Таблица_Туапсе_форомленная.xlsm", "Туапсе", _
                                            "N", ActiveCell.Row, "E", "A", "O")                                            
End Sub




Теперь пишет Invalid qualifier
Код: vbnet
1.
rowCount = [color=blue]targetSheet[/color].UsedRange.Rows.Count


и выделяет targetSheet
...
Рейтинг: 0 / 0
2 простые процедуры. Одна вызывает другую. Что не так?
    #37926102
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
targetSheet as String

В VBA строка не является объектом. Можно объявить As Variant, если нужно возвращать значение через параметр. Или объявить в процедуре новую переменную соответствующего объектного типа.
...
Рейтинг: 0 / 0
2 простые процедуры. Одна вызывает другую. Что не так?
    #37926352
Dymanovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ошибся... назвал 2 переменные одним именем
Заменил в объявлении функции targetSheet на targetSheetName
и
Код: vbnet
1.
targetSheet = Workbooks(targetTableName).Worksheets(targetSheetName)

. Только теперь он здесь при выполнении выдаёт "Object doesnt support this property or method"
Смотрел в справку. Метод Worksheets есть. возвращает лист по его имени. Почему он не может мне этот лист вернуть в переменную?
...
Рейтинг: 0 / 0
2 простые процедуры. Одна вызывает другую. Что не так?
    #37926358
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
2.
Dim targetSheet as Worksheet
Set targetSheet = Workbooks(targetTableName).Worksheets(targetSheetName)
...
Рейтинг: 0 / 0
2 простые процедуры. Одна вызывает другую. Что не так?
    #37926372
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DymanovskyПочему он не может мне этот лист вернуть в переменную?Объектные переменные присваиваются с помощью ключевого слова Set.
...
Рейтинг: 0 / 0
2 простые процедуры. Одна вызывает другую. Что не так?
    #37926375
Dymanovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Благодарю, заработало!
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / 2 простые процедуры. Одна вызывает другую. Что не так?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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