Страницы: 1
RSS
Передача переменной в функцию
 
вот, переменная KodVd возвращает значение из ячейки:
Код
Private Function KodVd(KodVd As Variant)
    Dim KodVd As Variant
    
KodVd = Cells(Columns(4).Find("Код ТН ВЭД").row + 2, Columns(4).Find("Код ТН ВЭД").Column).Value

End Function

правильно ли написана эта фунцкия, и как в дальнейшем, в макросе передать значение из KodVd для использования в коде?
вот, как пример, я принудительно прописал ячейку d23 на переменную KodVd , она передает значение, и всё работает успешно всё:
Код
'определяем первую ячейку с кодом тнвед:
         KodVd = [d23]
'если вставить напрямую:
KodVd = Cells(Columns(4).Find("Код ТН ВЭД").row + 2, Columns(4).Find("Код ТН ВЭД").Column).Value)' выдаст ошибку: overflow
'то выдаст ошибку: overflow

         Select Case KodVd
 ' Алкоголь(вообще с воды начанием):
 Case 2202100000# To 2208909900#

пока сделал вот так, с учётом если будет пусто, с функцией походу прийдётся на потом оставить, а так всё работает именно так, как я себе предствляю исходя из местных условий:
Код
 'определяем первую ячейку с кодом тнвед:
         KodV = [d23]
         If KodV = "" Then
         KodV = [d24]
         End If
        Select Case KodV
 ' Алкоголь(вообще с воды начанием):
 Case 2202100000# To 2208909900#
Изменено: Домкрат - 20.01.2020 04:07:44
 
Домкрат,  Конечно если хотите запутать кого-либо , а через некоторое время и себя, то можно и так, но:
1. если не менять названия темы то читайте документацию
2.Сама по себе функция возвращает значения и использоваться должна как  Rez=Function(Arg1,[Arg2]) . Допускается, что изменений значений переменных указанных как аргументы в функциях возвращаются в вызывающий модуль измененными
посмотрите простой пример
Код
Function ABCsum(ByRef aa As Integer, ByVal bb As Integer, Cc As Integer) As Integer
ABCsum = aa + bb + Cc
aa = aa + 1
bb = bb + 1
Cc = Cc + 1
End Function
Sub ttt()
Dim a As Integer, b As Integer, C As Integer, D As Integer
a = 1
b = 2
C = 3
D = ABCsum(a, b, C)
Debug.Print "a=" & a
Debug.Print "b=" & b
Debug.Print "c=" & C
Debug.Print "d=" & D
End Sub

Обратите внимание отсутствие ByVal по умолчанию если не описано иное
Что касается ваших попыток, то с трудом понятна идея, что вы куда хотите передать и что куда вернуть , но Function KodVd(KodVd As Variant) обязана выдать ошибку при компиляции.
Изменено: БМВ - 19.01.2020 09:01:44
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ написал:
то с трудом понятна идея, что вы куда хотите передать и что куда вернуть
спасибо за подсказку, буду смотреть тему дальше, что могу сказать, коряво может сделано, НО работает все! я  вижу два слабых момента, это: нумерация циклов на самом активном листе, - хотел в коде, но пока никто не помог; и с этим моментом ,- переменная  KodVd  возвращает первый код  ТНВЭД в инвойсе, в зависимости от этого макрос либо будет обрабатывать дальше инвойс, либо пропускать его и смотреть следующий. Сама переменная выглядит так:
Код
KodVd = Cells(Columns(4).Find("Код ТН ВЭД").row + 2, Columns(4).Find("Код ТН ВЭД").Column).Value
 
Код
Sub test()
txt = "Код ТН ВЭД"
MsgBox KodVd(txt)
End Sub
Private Function KodVd(txt As Variant)
KodVd = Columns(4).Find(txt).Offset(2).Value
End Function
 
RAN, спасибо: идеально всё встало. Была подляна, что в отдельных инвойсах код тнвед находится в 3 столбце.. Ну вроди всё: ньуансы уже учтены на 100%, осталось только собрать всю и кучу по модулям расфасовать. Больше уже не должно быть никаких подстав, насколько я уже протестировал. С этими циклами по файлам такой гемар..  вот так я адаптировал Вашу тему у себя:
Код
txt = "Код ТН ВЭД"
KodV = KodVd(txt)

        Select Case KodV
'и погнали наши городских!
Изменено: Домкрат - 19.01.2020 16:29:18
Страницы: 1
Наверх