Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 3 4 5 След.
Задать значение пользовательской функции при несоблюдении условия
 
Подскажите, как задать значение пользовательской функции при несоблюдении условия?
Есть 2 моих корявых кода. Первый работает, второй нет.
Не могу понять, где во втором ошибка

Первый
Код
Function КОД_ПАРТИИ(Код_номенклатуры, Дата_производства)
Dim m As String
Dim y As String
Dim d As String

If Код_номенклатуры = 0 Then
    КОД_ПАРТИИ = "Введите код номенклатуры!"
Exit Function
ElseIf Дата_производства = 0 Then
    КОД_ПАРТИИ = "Введите дату!"
Exit Function
End If

If Month(Дата_производства) = 1 Then
    m = "R"
End If

If Year(Дата_производства) = 2019 Then
    y = "X"
End If

If Day(Дата_производства) = 1 Then
    d = "R"
End If

КОД_ПАРТИИ = m & y & d

End Function

Второй
Код
Function TEST1(A, B)
Dim iFullName As String

iFullName = "C:\Program Files\1234.jpg"
If Dir(iFullName) = "" Then
    TEST1 = "ffgg"
    Exit Function
Else
    TEST1 = A & B
End If
End Function

Если файл 1234.jpg есть по указанному пути, все работает, функция выдает верный ответ.

Если файла нет, то функция выдает ошибку #ЗНАЧ!

Расчет по формуле в одной книге, а исходные данные и результат в другой книге.
 
Цитата
StepanWolkoff написал: запишите свою формулу в виде пользовательской функции
получилось! Спасибо =)

Но теперь мне нужна подсказка в другом. вопрос не по теме [МОДЕРАТОР]
Изменено: Андрей Прокофьев - 19 май 2020 02:31:05
Расчет по формуле в одной книге, а исходные данные и результат в другой книге.
 
хм, а это вариант! надо испытать, спасибо за подсказку.

Цитата
StepanWolkoff написал:
PS А вообще, как показывает практика, ворует тот кто охраняет.
Не наш случай =)) у нас похоже ворует тот, кто руководит.
Расчет по формуле в одной книге, а исходные данные и результат в другой книге.
 
Да, я знаю про нее.
Это не защитит от "кражи" алгоритма.
Также как и защиты листа и книги паролями штатными методами - вскрывается на раз.

Идея - именно разнести вычисления и выдачу результатов по разным файлам.
Если украдут клиентский, то в нем ничего не будет, кроме неких "ссылок" на другой файл.
А вот файл с вычислениями (формулой шифра) будет лежать в недоступном месте, откуда пользователи его точно не смогут забрать.
Расчет по формуле в одной книге, а исходные данные и результат в другой книге.
 
Всем добра!
Друзья, подскажите, как и можно ли реализовать мою идею.
Смысл таков.
Есть некая формула, которая по особому алгоритму шифрует изначальные данные и выдает в результате "шифр".
Пользователь имеет эти изначальные данные и должен в итоге получить шифр, но никаким образом не должен видеть саму формулу и принцип формирования "шифра".
Сейчас я это реализовал в одной книге, но на разных листах - пользовательский и служебный.
Пользовательский имеет 2 ячейки для заполнения и одну для результата-"шифра".
Служебный - саму формулу. Этот лист скрыт.
Но у меня есть опасения, что книгу целиком могут скопировать, унести, передать в ненужные руки и алгоритм расшифруют.

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

Простейший пример во вложении. Шифр, естественно, намного сложнее, чем тут. =))
Сравнить строки по значениям в столбцах и выделить одинаковые
 
Это очень круто. Правда есть ошибка. Пока не понял где именно в коде, но он неверно определяет "уникальный kod" и kod1, начиная с 6 строки.
Сравнить строки по значениям в столбцах и выделить одинаковые
 
великолепно! Ваш макрос определяет совпадение по составу, но не определяет совпадение по пропорциям входящих в состав компонентов.
Но это можно доработать просто еще одним столбцом с суммой по условию =))
Спасибо!
Сравнить строки по значениям в столбцах и выделить одинаковые
 
не работает =((
Добавил еще несколько строк, но ваша формула массива их тоже выделяет, хотя рецептуры другие. Вы же формулу просто протягивали по строкам, верно?
Причем я не понял, почему некоторые желтым выделяет, а некоторые зеленым, хотя они все разные.

Я понял! =)) вы суммируете номера столбцов и если сумма одинакова, окрашиваете в какой-либо цвет. Но ведь может быть так, столбцы 2+4+5+9 = 20 и столбцы 8+12 тоже 20.
Изменено: Андрей Прокофьев - 2 апр 2020 00:29:30
Сравнить строки по значениям в столбцах и выделить одинаковые
 
Конечно. Если он будет самым последним, вообще идеально =)
Таблица с рецептами у меня статичная, ее просто надо привести в порядок и забыть на еще один год. Потом по новой проверять...
Сравнить строки по значениям в столбцах и выделить одинаковые
 
Цитата
Ігор Гончаренко написал:
по какому признаку вы найдете пару любой из этих зеленых строк
Вручную. Это в разы проще, чем перебирать вручную 400 строк.
Если можно как-то попарно выделять, то это идеально. Причем надо еще и различие "одинаковый - идентичный" оставить.
Сравнить строки по значениям в столбцах и выделить одинаковые
 
Цитата
Valo написал:
а почему 3 и 5 состав не покрашены
Потому что в 3 строке используются компоненты 6 и 10, которых нет в других составах.
А в 5 строке - компоненты 3 и 5, которые тоже не используются в других составах.
Т.е. если два состава имеют даже 9 одинаковых компонентов, а 10го в одном из них нет, это уже разные рецептуры.

Поясню на простом примере.
Блины обычные и блины с начинкой. Блины обычные рецепт - вода 100 гр, мука 100 гр, яйца 2 шт, сахар 20 гр. Блины с начинкой - вода 100 гр, мука 100 гр, яйца 2 шт, сахар 20 гр, начинка 50 гр.
Это два разных рецепта из-за наличия начинки в одном из них.

Но! Если я делаю Блины обычные рецепт - вода 100 гр, мука 100 гр, яйца 2 шт, сахар 20 гр. и Блины обычные рецепт - вода 100 гр, мука 100 гр, яйца 2 шт, сахар 60 гр., то это уже одинаковые рецепты по составу, но разные по пропорциям.
Изменено: Андрей Прокофьев - 1 апр 2020 22:59:46
Сравнить строки по значениям в столбцах и выделить одинаковые
 
Цитата
Ігор Гончаренко написал:
это КРЕПКО ПОМОГЛО??вам именно это нужно?
Да, если учесть, что строк более 400, а одинаковых из них будет процентов 10-15, не больше
И вы не заметили, что зеленым будут выделяться совершенно одинаковые строки (с идентичными числовыми значениями в столбцах). И эти зеленые составят половину от этих 10-15 процентов.
Итого желтых останется только 20-30 строк из 400+.
Сравнить строки по значениям в столбцах и выделить одинаковые
 
Эм. У вас все строки желтым просто выделены. Либо я опять не понял, либо вы решили пошутить.
Неужели я и правда непонятно описал, что хочу получить в итоге?

Или вы хотели сказать, что у меня в результате все сроки могут оказаться желтыми?
нет, такого точно не будет. Максимум 50-70 строк будут одинаковыми или даже идентичными.
Изменено: Андрей Прокофьев - 1 апр 2020 22:27:24
Сравнить строки по значениям в столбцах и выделить одинаковые
 
Друзья, уже всю голову сломал.
Существует ли какой-то быстрый метод сравнить строки в таблице?

Суть задачи такова.
Есть столбец "А" со списком составов неких веществ.
В столбцах "B:K" указаны некие химические компоненты.
На пересечении строки и столбца указано цифрами, сколько конкретно берется компонента для этого вещества.
Другими словами это таблица рецептур.

Необходимо в таблице выделить каким-либо образом (цветом или еще как-то):
1. Вещества (строки) в которых используются одни и те же компоненты. В данном примере выделены зеленым. Компоненты одинаковые, но пропорции разные.
2. Вещества (строки) с совершенно одинаковыми рецептами. В данном примере выделены желтым. И компоненты и пропорции одинаковые.

В полной таблице у меня 400+ строк (веществ) и 200+ столбцов (компонентов).

Забыл добавить, что всю таблицу можно транспонировать, если это потребуется.
Изменено: Андрей Прокофьев - 1 апр 2020 22:03:29 (забыл =)))
как сделать динамическую таблицу с данными из таблиц на разных листах
 
Цитата
vikttur написал:
Об этом нужно сразу сообщать.  
Сообщил во втором сообщении.
как сделать динамическую таблицу с данными из таблиц на разных листах
 
Спасибо! К сожалению надо на формулах т.к. это в итоге будет гуглтаблица.
как сделать динамическую таблицу с данными из таблиц на разных листах
 
Не нашел, к своему сожалению.
Все приемы просмотрел, но к данной задаче не смог адаптировать.
Тут выборка из "горизонтальной" таблицы и выбирать надо сразу 2 значения по условию "если есть второе значение >0, то выводить оба в динамическую таблицу"
Причем эти "горизонтальные" таблицы расположены на 5 листах и из них надо собирать информацию в одну таблицу.
Не могу сообразить, как это сделать. Причем без макросов, только на формулах.
Изменено: Андрей Прокофьев - 18 апр 2018 14:27:25
как сделать динамическую таблицу с данными из таблиц на разных листах
 
Добрый день.

Озадачился вопросом, как можно сделать выборку данных из таблиц на разных листах в одну динамически изменяющуюся таблицу.
Пример во вложении.

Есть одинаковые по структуре таблицы на разных листах (всего 5 листов будет с такими таблицами)
Коды - уникальны и не повторяются ни на одном листе.
Приоритеты - проставляются и меняются руками по мере надобности. Всего будет 3 приоритета или вообще без него.
Суть задачи - Выбрать из всех этих таблиц коды с указанными приоритетами от 1 до 3 в одну таблицу (я ее на первом листе расположил для примера), которая бы изменялась динамически при изменениях значений приоритетов, т.е. какие-то строки бы исчезали из этой сводной таблицы, если приоритет у кода снимался или наоборот появлялись, если приоритет проставлялся.

P.S. Решение необходимо только на формулах
Изменено: Андрей Прокофьев - 18 апр 2018 18:57:19
Счет по формату ячейки
 
Цитата
JayBhagavan написал:  ctrl+alt+F9 пробовали?
нет.
Помогло, спасибо! Как я понимаю, это аналог Application.CalculateFull?

Это все-таки лечение симптома, но не лечение причины. Может быть кто-то знает, как от этого избавиться в корне?
Изменено: Андрей Прокофьев - 29 июл 2016 21:15:37
Счет по формату ячейки
 
Еще раз подниму тему.
Есть проблемка с функцией, обнаружилась в процессе работы.

Крайне странная проблема.

В приложении пример.
Что необходимо сделать, чтобы увидеть ошибку.
1. Выделяем красную ячейку I11 и копируем ее.
2. выделяем диапазон I12:K14
3. Правой кнопкой мыши щелкаем по диапазону
4. Выбираем варианты вставки во всплывающем окне, но НЕ НАЖИМАЕМ на них, а просто "перещелкиваем" и смотрим пример результата вставки. Через 5-6 таких "перещелкиваний" формулы в ячейках B8:B11 принимают вид #Н/Д.

Исправить это возможно ТОЛЬКО обновлением этих формул в КАЖДОЙ ячейке, т.е. два раза щелкнуть мышкой, нажать Enter. Никаким другим способом у меня не получилось заставить пересчитаться их, даже сохранение файла, закрытие и его открытие не помогают.

Что это может быть? Крайне мешает в работе, т.к. в рабочем файле у меня более 500 ячеек с функцией "СчётФормат" и все их обновлять по Enter безумие.
Изменено: Андрей Прокофьев - 29 июл 2016 11:38:41
Счет по формату ячейки
 
Цитата
JeyCi написал: то переход по циклу с отметки nextC
во жеж =) как все просто. Спасибо вам огромное за науку.
Счет по формату ячейки
 
JeyCi,
В попытке разобраться с вашим кодом, обнаружил, что функция считает и пустые ячейки, в которых нет значений, но уже проставлено форматирование по образцу

Пример прикладываю.
Я увидел, что если заменить в строке "c.Interior.ColorIndex <> rTemplate.Interior.ColorIndex"  неравенство на "=", то она перестает считать пустые ячейки, но возникают другие ошибки подсчета. Пока не могу сообразить, что и как надо прописать, чтобы исключить из подсчета пустые ячейки из диапазона. Подскажете?

Хочу понять смысл каждой строки в коде, но пока разобрался только с первой половиной кода.
Счет по формату ячейки
 
Цитата
Сергей Беляев написал: исправил только для искомой ячейки
Формульный вариант тоже работает. Спасибо!
Для меня это проще в понимании, чем код VBA, т.к. я больше "формулист".
Принял ваш вариант на вооружение.
Счет по формату ячейки
 
Цитата
JeyCi написал:
поэтому перешла на чистый счёт, внеся изменения в макрос
Великолепно! Это то, что надо. Спасибо Вам огромное!
Теперь осталось самому разобраться в Вашем коде и понять как это работает =)  
Счет по формату ячейки
 
Добрый день.

Уважаемые форумчане, никак не могу додуматься, почему не правильно работает функция подсчета по формату ячейки.
Пример в приложении, там же описание ошибки функции.
Суть в том, что функция подсчета по формату почему-то ставит значение равное "1", даже если ячеек с нужным форматом в диапазоне нет.

P.S. Код честно стырен с этого форума сто лет назад, исходный топик найти уже не могу. =)
Backup файла xls, копии книги по расписанию
 
Не получается. Сделал все, как по ссылке выше.
Код
Dim tStart
Sub mymak()
    tStart = Now + TimeValue("00:01:00")
    Application.OnTime tStart, "Backup_Active_Workbook"
End Sub
Код
Sub StopOnTime()
    Application.OnTime tStart, "Backup_Active_Workbook", , False
End Sub
Код
Sub Backup_Active_Workbook()
    Dim x As String
    strPath = "E:\TEMP"
    On Error Resume Next
    x = GetAttr(strPath) And 0
    If Err = 0 Then
        strDate = Format(Now, "dd-mm-yy hh-mm-ss")
        FileNameXls = strPath & "\" & Left(ThisWorkbook.Name, InStrRev(ThisWorkbook.Name, ".") - 1) & " (" & strDate & ")" & ".xls"
        ThisWorkbook.SaveCopyAs Filename:=FileNameXls
    Else
        MsgBox "Папка " & strPath & " недоступна или не существует!", vbCritical
    End If
    Call mymak
End Sub

Вызываю StopOnTime при закрытии книги
Код
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Call Backup_Active_Workbook
    Call StopOnTime
    End
End Sub

Все равно, если в этот момент открыта другая книга ("Книга 2"), то OnTime продолжает работать и открывает сам через 1 минуту закрытую книгу ("Книга 1").

Также есть вторая проблемка. При открытой "книге 1" делается две копии файла в папку E:\TEMP с разницей по времени в 1 секунду.
Изменено: Андрей Прокофьев - 12 июл 2016 15:25:38
Backup файла xls, копии книги по расписанию
 
Подниму тему с вашего позволения.
Вопрос так и не решил.
Цитата
Макрос RunOnTime продолжает выполняться, даже при закрытии книги "Проект.xls", но при другой открытой книге.
Перебрал все в Private Sub Workbook_BeforeClose(Cancel As Boolean) : End, Stop и даже Application.EnableEvents = False =)


Подскажите, куда копать?
Backup файла xls, копии книги по расписанию
 
Сработало, спасибо!

Обнаружил еще одну проблемку. Макрос RunOnTime продолжает выполняться, даже при закрытии книги "Проект.xls", но при другой открытой книге.
Перебрал все в  Private Sub Workbook_BeforeClose(Cancel As Boolean) : End, Stop и даже Application.EnableEvents = False  =)
Backup файла xls, копии книги по расписанию
 
Добрый день
Имею рабочий проект "Проект.xls". (название проекта меняется каждый месяц, например на "Проект1.xls")
В модуле прописан макрос и он запускается каждые полчаса автоматом
Код
Sub Backup_Active_Workbook()
    Dim x As String
    strPath = "E:\TEMP" 
    On Error Resume Next
    x = GetAttr(strPath) And 0
    If Err = 0 Then 
        strDate = Format(Now, "dd-mm-yy hh-mm")
        FileNameXls = strPath & "\" & Left(ActiveWorkbook.Name, InStrRev(ActiveWorkbook.Name, ".") - 1) & " (" & strDate & ")" & ".xls"
        ActiveWorkbook.SaveCopyAs Filename:=FileNameXls
    End If
End Sub

Запуск автоматом через модуль
Код
Private Sub backup()
    Call Backup_Active_Workbook
    Application.OnTime Now + TimeValue("00:30:00"), "backup"
End Sub

Sub RunOnTime()
    Application.OnTime Now + TimeValue("00:30:00"), "module8.backup"
End Sub


Все работает, НО! Если  в момент автоматического запуска макроса открыта и активна другая книга, создается резервная копия именно активной книги, а не той, где прописан этот макрос.
Пример прикладывать бесполезно, весь код тут =) Чувствую, что проблема в ActiveWorkbook.Name, но как изменить только на "Проект.xls" не понимаю.
Изменено: Андрей Прокофьев - 30 июн 2016 13:59:26
всплывающий калькулятор в TextBox, калькулятор на VBA x64
 
Цитата
Dima S написал:
Вот - когда то делал для себя калькулятор
Красиво! Для самообучения обязательно просмотрю код.
Украинский не проблема. Немного выучил по роликам Дядьки Максима, если Вы его знаете =)
Спасибо!
Страницы: 1 2 3 4 5 След.
Наверх