вот, переменная 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#
Домкрат, Конечно если хотите запутать кого-либо , а через некоторое время и себя, то можно и так, но: 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) обязана выдать ошибку при компиляции.
БМВ написал: то с трудом понятна идея, что вы куда хотите передать и что куда вернуть
спасибо за подсказку, буду смотреть тему дальше, что могу сказать, коряво может сделано, НО работает все! я вижу два слабых момента, это: нумерация циклов на самом активном листе, - хотел в коде, но пока никто не помог; и с этим моментом ,- переменная KodVd возвращает первый код ТНВЭД в инвойсе, в зависимости от этого макрос либо будет обрабатывать дальше инвойс, либо пропускать его и смотреть следующий. Сама переменная выглядит так:
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
'и погнали наши городских!