Код |
---|
Вот, сам код как выглядит, подчеркнуты места, где находится переменная. Option Compare Text Dim myTMes ---ВОТ ЗДЕСЬ, ВНАЧАЛЕ Я ОБЪЯВИЛ ТЕМУ, КАК ОСИЛИЛ В ИНЕТЕ , ========================================================================= 'В этом модуле происходит определение первой ячейки(вид инвойса) с кодом тнвед(макрос); ' все виды товаров здесь есть.Отсюда начинаем искать уже определенный вид товара и объяединять инвойсы по етоим признакам 'на каждый вид будет свой модуль, чтоби не путаться. Sub ВидИнвойса(control As Office.IRibbonControl) Dim spec As Variant ' ' проверяем на наличие тестеров: ' Set spec = ActiveSheet.Cells.Find(what:="Тестеры", LookAt:=xlPart, MatchCase:=False) ' If Not spec Is Nothing Then ' Application.ScreenUpdating = False ' AA_Nad_ModuleSformi_A_Testera.LoopFilesTestera ' End If Call ВидИнвойс End Sub Sub ВидИнвойс() Dim KodVd As Variant Dim sh_res As Worksheet Dim Nachalo As Integer, lngKonec As Integer Dim myF As Range Dim myF2 As Range ' это для игрушек, у них нет столбца с ящиками Dim spec As Variant Set sh_res = ActiveSheet ' Откл. монитора. Application.ScreenUpdating = False ' отслеживаем столбец с названием, если не в столбце D, то добовляем-скрываем один столбец: Set myF = sh_res.Columns("D").Find("Код ТН ВЭД", , , xlPart) If myF Is Nothing Then sh_res.Columns("C").Insert sh_res.Columns("C").Hidden = True End If 'Cells(Columns(4).Find("Код ТН ВЭД").row + 2, Columns(4).Find("Код ТН ВЭД").Column).Select 'определяем первую ячейку с кодом тнвед: ' если на листе встречается слово тетсрры, то ето тестеры))): Set spec = ActiveSheet.Cells.Find(what:="Тестеры", LookAt:=xlPart, MatchCase:=False) If Not spec Is Nothing Then AA_Nad_ModuleSformi_A_Testera.LoopFilesTestera End If KodVd = Cells(Columns(4).Find("Код ТН ВЭД*").row + 2, Columns(4).Find("Код ТН ВЭД*").Column).Value Select Case KodVd ' 1)Алкоголь(вообще с воды начанием): Case 2202100000# To 2208909900# 'MsgBox "это пойло!" ' ищем алкогольные инвойсы: Call AA_Nad_ModuleSformi_A_Alko.LoopFilesAlko ' 2)Сигареты:+ Стики: Case 2402209000# 'MsgBox "это сигареты!" AA_Nad_ModuleSformi_A_Sigi.LoopFilesSigi ' 2а)+ Стики: Case 2403999009# 'MsgBox "это стики!" AA_Nad_ModuleSformi_A_Stiki.LoopFilesStiki ' 3)Шоколадки (под шоколадками подразумеваются разные товары, а не только шоколад): Case "0701100000" To "2106108000", 9500000000# To 9503999999# ' для игрушек смотрим столбци, если не хватает, то добовляем: Set myF2 = sh_res.Columns("H").Find("кол-во", , , xlPart) If myF2 Is Nothing Then sh_res.Columns("F").Insert sh_res.Columns("F").ColumnWidth = 9.29 ' sh_res.Columns("F").Hidden = True sh_res.Columns("F").Insert sh_res.Columns("F").ColumnWidth = 9.29 ' sh_res.Columns("F").Hidden = True 'заполняем названия столбцов: Nachalo = НачалоДанных lngKonec = КонецДанных With Range(Cells(Nachalo - 2, "F"), Cells(Nachalo - 2, "F")) .Borders.LineStyle = xlContinuous .Borders.Weight = xlMedium '.Interior.Color = 14994616 .Value = "кол-во" & Chr(10) & "в коробке" End With With Range(Cells(Nachalo - 2, "G"), Cells(Nachalo - 2, "G")) .Borders.LineStyle = xlContinuous .Borders.Weight = xlMedium '.Interior.Color = 14994616 .Value = "кол-во коробок" End With mesta End If 'MsgBox "это шоколадки!" AA_Nad_ModuleSformi_A_Shok.LoopFilesShok ' 4)Парфюм(вполть до мыла): Case 3302909000# To 3408900000# 'MsgBox "это порфюм!" AA_Nad_ModuleSformi_A_Parff.LoopFilesParff '5) Бижутерия:(от сумочек до прочих, маникюрный комлект=8214200000; зонт=6601910000; очки = 90 04 101000 to 90 04 909000 ' зеркала=7009920000# ; кольца-кулоны=7117900000+ часи двух видов! Case 4202210000# To 4205009000#, 8214200000#, 6601910000#, 9004101000# To 9004909000#, 7009920000#, 7117900000# AA_Nad_ModuleSformi_A_Bijj.LoopFilesBijj '6)ЧАСЫ(ОНИ КАК БИЖУТЕРИЯ ТОКЛЬКО ОТДЕЛЬНО ДЯДЯ НАДОБЛЯ): Case 9102110000#, 9102120000# AA_Nad_ModuleSformi_A_Watches.LoopFilesWatches ' 7)СИГАРЫ(ОНИ КАК БИЖУТЕРИЯ ТОКЛЬКО ОТДЕЛЬНО ДЯДЯ НАДОБЛЯ): Case 2402100000# AA_Nad_ModuleSformi_A_Sigari.LoopFilesSigari Case Else MsgBox "я не знаю, чё ет за код такой(!" End Select End Sub 'запоминаем количество мест в переменную myTMest : Sub mesta() Dim myFMest As Range Dim myTMest As Range Dim shFrom As Worksheet, thisB As Workbook Set shFrom = ActiveSheet Set thisB = ActiveWorkbook Dim shTo As Worksheet Dim wbTo As Workbook Dim Wb As Workbook Dim myF As Range Dim stype As String Set myTMest = Cells.Find("Кол-во мест", , , xlPart) myTMes = myTMest.Offset(0, 3).Value ================== ВОТ ЭТА ПЕРЕМЕННАЯ, В ЭТОМ МОДУЛЕ ВСЁ НОРМАЛЬНО ============================================================================================================ ' End If End Sub ВОТ СЛЕДУЮЩАЯ ПРОЦЕДУРА, КУДА НУЖНЫ ДАННЫЕ ИЗ ПЕРЕМЕННОЙ ЭТОЙ: Option Explicit Dim myTMes - Я ЗДЕСЬ ТОЖЕ В НАЧАЛЕ ОБЪЯВИЛ, НО НИФИГА ЧЁТА(( ================================================================== ' Вкладка "Шоколадки" - группа "Шоколадки" - "Сумма". ' Макрос работает с активным листом. ' Макрос обрабатывает лист после макроса "Сортировка". ' Вставка формул под каждым товаром. 'Sub Main(myControl As Office.IRibbonControl)- откзаываемся от кнопки Sub ChockSumm() Dim shAct As Excel.Worksheet, tbl As Excel.Range Dim arrB() As Variant, cn As New Collection Dim lngHRow As Long, lngLRow As Long Dim i As Long, r As Long Dim k As Long Dim Nachalo As Integer, lngKonec As Integer Dim rCell As Range, spec As Variant, specF As Variant ' Поиск первой и последней строки. Nachalo = НачалоДанных lngKonec = КонецДанных '1. VBA-наименование активного листаи присвоение имени Set shAct = ActiveSheet If shAct Is Nothing Then Exit Sub End If '2. Отключение монитора. ' Application.ScreenUpdating = False '3. Поиск шапки и низа таблицы. Call S_Hr.Function2(shAct, lngHRow, lngLRow) '4. Vba-именование таблицы. ' В таблицу включается строка, которая находится под таблицей. Set tbl = shAct.Rows(lngHRow & ":" & lngLRow + 1) '5. ' Копирование столбца B в массив "arrB". ' Подготовка данных к сравнению. arrB() = tbl.Columns("B").Value For i = 2 To UBound(arrB, 1) Step 1 arrB(i, 1) = CStr(arrB(i, 1)) Next i '6. Запись номеров пустых строк в коллекцию. ' Во вторую строку формула не вставляется, но эта строка нужна ' для составления формулы под первым товаром. For i = 2 To UBound(arrB, 1) Step 1 If arrB(i, 1) = "" Then cn.Add Item:=i End If Next i '7. Вставка формул. ' В коллекции находятся два вида пустых строк: '1) строки-заголовки групп; '2) строки, которые находятся под товарами. ' В коллекции первая пустая строка - это строка-заголовок. В неё не надо вставлять формулы. For i = 2 To cn.count Step 1 ' Запись порядкового номера эксель-строки в переменную для удобства. r = cn(i) ' Пустые строки-заголовки пропускаем. ' Они определяются по двум подрядстоящим пустым строкам. If arrB(r - 1, 1) <> "" Then Stop ' Вставка формул. tbl.Range("J" & r).Resize(1, 2).FormulaR1C1 = "=SUM(R[-" & r - cn(i - 1) - 1 & "]C:R[-1]C)" If tbl.Range("J" & r) = 0 Then tbl.Range("J" & r) = myTMes - ПУСТО, ВООБЩЕ НИЧЕГО НЕ ПЕРЕДАЁТ СЮДА ============================ ========================================= End If |
Передача данных переменной из одной процедуры в другую, В первом макросе переменная myTMes нормально возвращает значение. А дальше ничего..
06.11.2020 13:27:33
Пошаговый проход по коду (F8) в помощь. В окне Locals смотрите что у вас в переменной.
|
|
|
|
06.11.2020 13:34:46
а вот в следующей процедуре эта переменная пустая, Спасибо за ценный совет по нажатию на ф8.
Изменено: |
|||
|
|
06.11.2020 13:53:25
Попробуйте использовать глобальную переменную. |
|||
|
|
06.11.2020 13:56:36
вопрос был не про ф8, вообщето. Если , конечно, уважаемый V читал название темы.
|
|||
|
|
06.11.2020 14:02:08
Перед самой первой процедурой напишите public myTMes as rage. Там, где у Вас сейчас Dim myTMes
|
|
|
|
06.11.2020 14:06:11
уважаемый Домкрат,
а в чем вопрос? передача переменных в процедуры - это одна из основ, на которой держится программирование и из-за которого все это имеет смысл понимаете когда на калькуляторе нужно вычислить полином от Х в шестой степени с семью заданными коэффициентами вы еще посчитаете такое 2-3 раза но если нужно считать 100 или 1000 раз значение этого полинома при разных Х, вы устанете стучать как дятел по клавишам, сделаете кучу ошибок, набирая цифры, некоторые ошибки не заметите.... начнете сначала по-тихоньку, а потом все громче проклинать калькулятор, математику, полиномы, жизнь... то в программировании вы 1 раз набираете формулу для вычисления этого полинома, а потом хоть 1000 хоть сколько угодно раз вычисляете его для разных Х, как раз передавая Х как параметр в функцию вычисления этого самого полинома. где сложность? а у вас что за вопрос? и для примера достаточно двух процедур с 5-ю строками кода в каждой для демонстрации сути проблемы для этого не нужны километровые простыни кода, где в какой-то одной из строк проблема что вы пытались сделать и что не получилось? сможете обьяснить простыми словами - скорее всего получите ответ на свой вопрос, а не сможете .... можете еще несколько дней жать F8 в надежде, что когда-то все сработает так как было задумано
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
|
|
|
|
06.11.2020 14:06:42
|
|
|
|
06.11.2020 14:09:34
|
|||
|
|
06.11.2020 14:17:15
Файл секретный? Если нет, то в студию его.
Изменено: |
|
|
|
06.11.2020 14:20:00
У Вас переменная - диапазон. Сначала нужно его установить (Set). А уже ДРУГОЙ переменной присвоить значение ячейки, отстоящей на 3 столбца правее от Вашей переменной/
|
|
|
|
06.11.2020 14:24:16
переменные САМИ не обнуляются при передаче в другие процедуры
пока ничья 1:1, и пока у вас как не было результат, так его и нет и результата не будет пока вы не перестанете всем делать одолжение выдавливая из себя скупые фразы обьясниний, которые по факту ничего не обьясняют и пока не обьясните что хотите сделать и на небольшом примере, сделанном специально для этом темы не покажете что вы делаете и что не получается
Изменено:
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
|
|
|
|
06.11.2020 14:26:18
я вытащил два модуля в файл которые нужны сейчас. вот он. |
|||
|
|
06.11.2020 14:36:02
передать значение переменной из одного модуля в другой.
В одном макросе я записываю это количество мест. Далее, мне нужно его запомнить, и когда при окончательной обработке обнаружится, что в столбце J пусто, то в итоговою строку подставить значение из переменной, из первого макроса. Само суммирование будет делать другой макрос.
|
|||||
|
|
06.11.2020 14:45:25
Доброе время суток
Далее, нигде нет в этом модуле присвоения какого-либо значения переменной. В процедуре Sub mesta1() есть только её затенение
|
|||||||
|
|
06.11.2020 14:49:14
в одном из стандартных модулей обьявляете переменную
Public МояПеременная as Какого-тоТипа все. суть публичной переменной ЕЕ НЕ НУЖНО НИКУДА ПЕРЕДАВАТЬ, она известна во всех модулях данного проекта пользуйтесь ею в любом модуле, в любой процедуре, она уже известна ВСЕМ! есть одни грабли в любой процедуре вы можете обьявить локальную переменную с таким же именем и тогда нужно понимать что в этой процедуре МояПеременная - это уже локальная МояПеременная, а не та публичная МояПеременная к той МояПеременная в этой процедуре нужно обращаться ИмяМодуляВКоторомОбьявленаПеременная.МояПеременная
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
|
|
|
|
06.11.2020 14:53:29
|
|||
|
|
06.11.2020 14:56:08
?
Изменено: |
|||
|
|
06.11.2020 15:04:36
Домкрат, посмотрите, как это выглядит в общем случае (выполните макрос Main).
|
|
|
|
06.11.2020 15:16:43
Юрий М, ну , сделал по вашим мотивам:
|
|
|
|
06.11.2020 15:21:04
да, правильно
только не найден метод или член данных (так написано))) и кроме того MyTMes и MyTMest - это переменные с разными именами и можно не заморачиваться с именем модуля
Изменено:
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
|
|
|
|
06.11.2020 15:21:46
В моём файле переменная во второй процедуре видна? Значит сделали не всё правильно. А Ваш скрин вообще ни о чём.
|
|
|
|
06.11.2020 15:31:03
Возвращает теперь как надо, остальное в понедельник уже добью, Спасибо Юрий! |
|||||
|
|
||||