Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 След.
Функция расчёта времени производства, нужна помощь в отладке
 
Товарищи очень нужна помощь,  вообще не могу понять, что с функцией не так?

Ни в одном описании не нашёл ни намёк о подобных проблемах  
Функция расчёта времени производства, нужна помощь в отладке
 
И снова здравствуйте  :D

Всё выскакивают проблемы в источнике которых не могу разобраться.
В данном случае проблемы с переменной S в функции.
Как можете увидеть- она выбрана для каждой ячейки и ссылается на столбец, где стоят числа от 1 до.... 99 (скажем).
При этом при пошаговом проходе функции при помощи F8 её значение указывается как 0.
Если преобразовать в Variant, то значение Value2 = значению из ячейки, но при этом с расчётом таже проблема.
Менял тип на Byte, тоже самое....

Периодически подобная ситуация возникает и с переменной N (исходные значения в таблице покрашены белым)
Изменено: Trafka - 14.06.2016 16:52:46
Функция расчёта времени производства, нужна помощь в отладке
 
В очередной раз спасибо за помощь, с отладчиком дело пошло шустрее и за пол дня смог поправить ошибки и пару новых дополнений к файлу сделать.
была проблема со знаками, из-за чего он в некоторых случаях делал смещение (0, 0) или (0, 1) , после чего и возникали циклические ссылки.
Функция расчёта времени производства, нужна помощь в отладке
 
Sanja написал:
Цитата
При по-шаговом прохождении кода функции проблемы не обнаружили?
Прошу прощения, но совсем недавно начал изучать VBA, так что со многими очивидными методами видимо не знаком.
Её в можно как и Sub проходить? а какую ячейку она тогда берёт за основу, или как это делается, можете поделиться ссылкой?
Изменено: Trafka - 09.06.2016 17:02:19
Функция расчёта времени производства, нужна помощь в отладке
 
Естественно,  поэтому я дублировал ПРОИЗВОДСТВО _2 и называл ПРОИЗВОДСТВО _3 а потом в одной ячейке 2 на 3 менял и в ней смотрел переменные через MsgBox (совпадение с посчитанными вручную )

Но то что функция работает не везде - впервые вижу....
Можно на соседнем листе параметр Мк в год поменять и появятся пару рассчитанных ячеек,  но в целом картина не меняется,  алгоритм много раз проходил, проблемы не вижу в упор


У меня предупреждение о циклической ссылке вылетело при определённой компановке,  ищу причину  
Изменено: Trafka - 09.06.2016 16:40:46
Функция расчёта времени производства, нужна помощь в отладке
 
Добрый день.
Никак не закончу с этим файлом, всё проблемы вылезают.
После внесений всех исправлений формула заработала и я её поставил на место в файле.
Пока было мало столбцов- всё считалось отлично, но при увеличении количества столбцов возникла непредвиденная ситуация она стала выдавать ошибки.

Тоесть до 17 столбца всё считается, а после не хочет... точнее даже не так- он кусочками просчитывает, причём размер кусочков меняется при изменении входных данных, но не сильно.

Поскольку формула для расчёта берёт только значения из строчки выше и на столбец левее- не ясно почему возникает проблема...

Ну и моё любимое- начал проверять переменные c MsgBox (скопировав функцию, переназвав и вставив её только в 1 ячейку)
и MsgBox снова 2 раза срабатывает и выдаёт невнятные результаты....

Понимаю что вопрос сложный и без поллитра тут не разобраться, но без вас похоже решить не смогу. С утра уже ковыряюсь.
Как бы проверить на каком этапе расчёта, в какой переменной вылетает проблема? Не весь же механизм переделывать с нуля.
Функция расчёта времени производства, нужна помощь в отладке
 
Цитата
Sanja написал: Не все здесь с Вами на одной производственной волне
Понимаю, просто уже совсем замучился с этим файлом, так что извините. Буду в следующий раз стараться.

После исправления проблемы с часами оставалась ещё одна в исходных данных - расчётном времени операций, убрал их и всё заработало.
Спасибо за отзывчивость.
Изменено: Trafka - 08.06.2016 15:59:08
Функция расчёта времени производства, нужна помощь в отладке
 
Ещё немного поработав столкнулся со следующей проблемой, не знаю сможете ли помочь, но надежда умирает последней)

Идея в том, что функция выбирает максимальное время между освобождением станка и приходом детали с предыдущей операции,
прибавляет время оброботки и если оно больше времени окончания дня- назначает старт на утро.

Вроде всё так и написано, (в итоге в данном случае конец дня в 15:00 а начало в 7:00) но выдаются значения по всей длине дня.
---------------
Нашёл 1 косяк- не перевёл часы в нормальный вид и он их днями считал
(добавлял 8 дней, а не часов)
но всё равно встречается время 1:00 ; 3:00 и подобные...
Изменено: Trafka - 08.06.2016 15:46:41
Функция расчёта времени производства, нужна помощь в отладке
 
Спасибо, с обычными ифами всё заработало корректно
а если в IIF использовать вместо переменной для итога  уравнения - он выдаёт ошибки.
поскольку вводить дополнительные переменные нет смысла - вариант с If Then Else  подошёл лучше.
Функция расчёта времени производства, нужна помощь в отладке
 
При закрытии скобок выдаёт ошибки....
сейчас на обычный If перепишу
Функция расчёта времени производства, нужна помощь в отладке
 
Снова добрый день.

Никак не могу разобраться почему не считается функция, поэтому прошу Вашей помощи.
Вроде бы я в нашёл где возникает ошибка, но не могу понять почему и собственно не могу исправить.
Прикладываю файл с примером, в нём 2 функции, проблемы у ПРОИЗВОДСТВО_2

Ячейка на листе с этой формулой отмечена цветом, все переменные уже расставлены.
Дополнительно поставил 2 MsgBox с переменными, поидее значения в данном случае должны быть одинаковыми,
поскольку Тсо выбирает большее из Тпд и Тко
Тко тут =0.
Изменено: Trafka - 08.06.2016 10:54:15
MsgBox дважды выдаёт значения одной переменной
 
Вот сам код, в конце и вызывал Msg Box
(Через почту пересылал, не хочет как код показывать, а через блокнот срывает кодировку)
Код
Function ПРОИЗВОДСТВО_2(N  As Integer, IntП  As Integer, IntS As Integer, _
Tnd As Date, Tраб  As Date, Tоп As  Date)
 
Dim Пx As Integer 'Номер партии в которой обрабатывается деталь
Dim Nк As Integer 'Номер конечной детали партии
Dim Nн As Integer 'Номер начальной детали в партии
Dim Tко As Date 'Время конца обработки предыдущей детали
Dim Tпд As Date 'Время получения последней детали для партии
Dim Tсо As Date 'Время старта операции
Dim Tmax As Date 'Дата и время окончания дня
 
Пx  = Int((N / IntП)  - 0.0001) + 1
Nк  = Пx * IntП
Nн  = ((Пx - 1) * IntП)  + 1
 
IIf (IntS * IntП)  < N, _
Tко  = Range(Application.Caller.Address).Offset(0, ((Nн  - N) - 1)), _
Tко = 0
'обнаружение времени конца обработки предыдущей партии на оборудовании
 
Tпд  = Range(Application.Caller.Address).Offset(-1, (Nк  - N))
'обнаружение времени конца обработки посленей детали для партии
 
IIf Tпд > Tко, Tсо = Tпд, Tсо = Tко
'обнаружение стартового времени операции
 
Tmax = Int(Tсо) + Tраб
'обнаружение времени окончания работы оборудования
 
If (Tсо + Tоп) > Tmax Then
    Tсо = Int(Tпд) + 1 + Tnd 'перенос старта на следующий день
End If

MsgBox Tпд

ПРОИЗВОДСТВО_2 = Tсо + Tоп

End Function
Проблема в том,что Тсо выдаёт 0, хотя и не может такого быть... но для этого надо наверное отдельную тему заводить...
Пока сам попробую разобраться, но если у кого какие идеи будут- чиркните уж )
Изменено: Trafka - 08.06.2016 15:11:50
MsgBox дважды выдаёт значения одной переменной
 
Извиняюсь, какой-то глюк ....
при вводе MsgBox в код и изменении кода он первый раз выдаёт 2 раза сообщения, при этом с разными данными,
при повторном запуске макроса только 1 раз и верное значение....

видимо ошибка не в этом, буду  действовать в соответствии с постом #2  =)
MsgBox дважды выдаёт значения одной переменной
 
Цитата
Hugo написал: значит механизм не верный!
у меня в переменной типа Date (пусть будет DtA) дата и время расчитанное заранее
при вызове MsgBox DtA возникает окно с нулями (00:00:00), кликаешь ок, а после сразу вылезает окно с рассчитаным(верным) значением в формате 08.06.16 9:45 (например)
MsgBox то один.... да и переменную одну запрашиваю

проблема в том, что для следующего расчёта он почему то из переменной 00:00:00 берёт
Изменено: Trafka - 08.06.2016 15:10:58
MsgBox дважды выдаёт значения одной переменной
 
Добрый день.
Написал пользовательскую функцию, весь механизм вроде верный, но почему - выдаёт не верный результат...
Начал разбираться, при помощи MsgBox проверяя переменные и тут возникла странная вещь :
первый раз MsgBox выдёт нулевое значение в нужном формате (00:00:00), жмёшь ОК и вылетает 2й MsgBox с верным расчётным значением!!!

У меня собственно 2 вопроса:
1) как такое вообще может быть, что в одной переменной одновременно 2 значения
2) как это исправить )

На сколько понимаете - тип переменной Date.
Если это не повседневная проблема- выложу файл или код (много переменных, без шаблона не протестировать)
Функция для получения значения в ячейке при помощи OFFSET и CALLER
 
Спасибо, всё работает!!!!!

Буду доделывать эту страшную функцию =)
Функция для получения значения в ячейке при помощи OFFSET и CALLER
 
Там весь расчёт внутри матрицы через дата/время, а остальные Integer и single, но только округлённые int в OFFSET присутствовать будут.
Сейчас опробую.
Функция для получения значения в ячейке при помощи OFFSET и CALLER
 
А не подскажете тогда как это будет в контексте переменной выглядеть?
так мне дату и время достать в переменную?
Код
Dim DtA as Date
DtA = Range(Application.Caller.Address).Offset(КудаПоСтрокам, КудаПоСтолбцам)
Изменено: Trafka - 07.06.2016 17:56:54
Функция для получения значения в ячейке при помощи OFFSET и CALLER
 
Ну собственно я это и делаю, только не через цикл, а при помощи функций, проблемма только в поиске  I и J.

Но на сколько я понял в этом мне помогает
R = Application.Caller.Address   (присваивание R значения RANGE ячейки с пользовательской функцией)
теперь R = $I$J
мне нужно его разбить на I и J, либо использовать сразу для OFFSET каким-то образом прибавляя свои смещения по горизонтали и вертикали

Может конечно что-то путаю
Функция для получения значения в ячейке при помощи OFFSET и CALLER
 
Так пожалуй и происходит.

У меня есть самозаполняемая матрица, в которой расчитана только первая строчка,
дальнейшие вычисления производятся исходя из констант(общих и в начале строки) и значений в первой строке.

Тоесть утрировано  есть входной параметр в столбце А, строка с данными (дата и время) в В1:М1
и начиная со 2й строки начинаются эти пользовательские функции.
Исходя из параметров строки сверху и ячеек слева идёт расчёт каждой конкретной ячейки.
При этом OFFSET для каждого конкретного случая по своему расчитываетя.

Тоесть чтобы понять к какой ячейке обращаться функция должна знать свой адрес и исходя из него понимать к какой ячейке делать запрос.
Механизм запроса тоже зашит в самой функции и уже отлажен, не получается только достать данные из ячеек для обработки.

Понимаю что возможно стоило бы через массив попробовать решить проблему и потом его выложить на лист, но навыков пока не хватает, приходится изголяться.
Кстати в этой функции у меня 9 переменных задаваемых в шапке формулы и 5 промежуточных переменных, поэтому сложно конкретно описать весь принцип действия, да и думаю что никому не интересно.
В общем расчитывается когда можно произвести обработку N-ной детали в N-ной части тех процесса исходя из времени обработки и времени работы оборудования, а также партий запуска.

Исходя из всего этого- я уже знаю значения для OFFSET для каждого случая, а достать это значение и поместить в переменную не могу
Изменено: Trafka - 07.06.2016 17:16:56
Функция для получения значения в ячейке при помощи OFFSET и CALLER
 
Вы предлагаете внутри функции вызывать процедуру, делать глобальную переменную, в которую вносить RANGE и к ней обращаться возвращаясь в функцию?
А попроще как-нибудь можно?
Функция для получения значения в ячейке при помощи OFFSET и CALLER
 
R (T в вашем случае) это адрес ячейки в которой находится функция.
Если я выбираю её вручную- вылетает ошибка о циклической ссылке, поскольку функция ссылается на себя.
Также дополнительная задаваемая переменная усложняет процесс введения функции.

Моя задача в том, чтобы можно было делать отклонение от координат ячейки с функцией, выбирать значения в этих ячейках и работать с ними далее.
в данном случае только на экран вывести.
Изменено: Trafka - 07.06.2016 16:40:10
Функция для получения значения в ячейке при помощи OFFSET и CALLER
 
На сколько понял, Range я устанавливаю в переменную R,
если проводить проверку MsgBox, то выдаёт верные значения исходной ячейки в формате $A$1
а со смещением ввеерх/лево с "-" в курсе, извините, попутал.
я как раз и пытался использовать переменную как Range, но толи в синтаксисе беда, толи ещё что.

Ну или как присвоить значение адреса для Range из переменной?
Изменено: Trafka - 07.06.2016 16:25:35
Функция для получения значения в ячейке при помощи OFFSET и CALLER
 
Добрый день.
Нужна помощь в написании кусочка макроса, никак не получается сформулировать верно.

Есть пользовательская функция, которая обрабатывает как константы, так и данные из матрицы вокруг себя.
Задача в том, чтобы при определённых условиях мой макрос брал значения из соседних ячеек.

В данном случае рассмотрим вариант смещения на 1 строку выше относительно места написания функции.
Понимаю, что пишу какую-то ерись, так что сильно не бейте )
Код
Function TEST()
Dim R as Variant

R = Application.Caller.Address

TEST = R.Offset(0, -1).Value

End Function 
Изменено: Trafka - 07.06.2016 16:17:46
Автозакрытие книги по истечении времени
 
Замечательный вариант, отдельное спасибо за это.

Правда на сколько я понял курсор отслеживается независимо от того, активна ли эта книга, либо пользователь перешёл в другую книгу, либо программу.
Возникает следующая проблема- файл бездействует, а человек работает в другом файле, либо по интернету шарится (утрировано) и макрос не закрывает.

Можно ли это отслеживание изменения координат X Y (в Вашем примере) производить только при активности данной книги?
(соответственно при переходе на другой файл/программу- останавливать, а при возвращении запускать заново)
Автозакрытие книги по истечении времени
 
Спасибо, но мне пожалуй нужно более абстрактное решение, которое можно массово и быстро в различных книгах использовать.
К несчастью в месяц создаётся с десяток таких сетевых файлов, которые в основном через пару месяцев теряют актуальность, или коренным образом перестраиваются. (используются они для сбора статистики под конкретные проекты)

Раз на прокрутку сделать нереально, может тогда со списком действий, отслеживаемых макросом подскажете.
Я подумал что наверное нужно добавить:
- изменение размеров окна
- сохранение  
- печать
Чтобы ещё в таком роде подошло?
dtStep я планирую 10 минут в дальнейшем выставить

И ещё 1 вопрос, на сколько я выяснил изменений в VBA с 2003 серьёзных не было, так что в нём этот макрос должен работать?
А то у нас периодически третий офис встречается.
Изменено: Trafka - 29.04.2016 12:54:17
Автозакрытие книги по истечении времени
 
Добрый вечер.
Недавно начал изучение макросов, так что не силён ещё, есть задача- автоматически закрывать документ, если им не пользуются N времени.
(некоторые засранцы открывают посмотреть файл в сети и не закрывают/выключая комп сваливают с работы, или на обед, причиняя уйму проблем)

Макрос запускается при открытии файла и отслеживает следующие параметры :
- выбор ячеек
- изменение ячеек
- смена листа
не работает только пролистывание страницы (нужно хотя бы вверх/вниз), наверняка ошибка синтаксиса....

Если будут ещё предложения по расширению списка параметров- буду безмерно благодарен
(люди ж в нём работают, печально будет, если он закроется в процессе :D )

Таймер пока стоит на 20 секунд, будьте внимательны!
Код
Option Explicit
Public N As Integer   'Состояние проверки 1=в работе/0=простой


Sub Закрытие()
    Dim dtTime As Date 'абсолютное время проверки
    Dim dtStep As Date 'относительное время до следующей проверки

    dtStep = #12:00:20 AM#
    dtTime = Time + dtStep

    If N = 1 Then
        Application.OnTime dtTime, "ЭтаКнига.Закрытие"
        N = 0
    Else
        ThisWorkbook.Save
        ThisWorkbook.Close
    End If

End Sub

Private Sub Workbook_Open()
    'MsgBox "Workbook_Open"
    N = 1
    Call Закрытие
End Sub

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
 '   MsgBox "Workbook_SheetSelectionChange " & Chr(13) & Sh.Name & Chr(13) & Target.Address
    N = 1
End Sub

Private Sub Scroll_vertical_Change()
       N = 1
End Sub

Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
    N = 1
End Sub

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Excel.Range)
    N = 1
End Sub
Изменено: Trafka - 29.04.2016 12:55:19
Количество просроченных заданий относительно выбранного месяца
 
К несчастью пришлось уехать по делам,  смогу лишь завтра протестировать.
С доп столбцом не хотел делать,  но видимо придётся.

Юрий, я немного не понял о чём Вы.
Количество просроченных заданий относительно выбранного месяца
 
Цитата
Юрий М написал:
Trafka, а чего не через ТРИ строки пишете?
Это из-за формы документа итогового
Количество просроченных заданий относительно выбранного месяца
 
Спасибо, проглядел.

Хоть и применяю проверку данных- эти чудики всё равно умудряются ввести что-нибудь новенькое.

Тогда можете ещё помочь с годом, как его в формулу эту загнать?
Страницы: 1 2 След.
Наверх