Нельзя допускать ручного ввода единиц измерений, т.к. даже у одного и того же пользователя в разное время может по-разному ввестись
Опять же: что-то в логике надо исправлять. Давайте попробуем разобраться вместе. Я так понял, что, например, отделу метрологии нужно поверять достаточно большой "зоопарк" электроизмерительных приборов. Для каждого из типов приборов существует своя методика поверки по "контрольным точкам": - для каждой из нескольких измеряемых прибором величин (Вольты, Амперы, Омы, Герцы, Фарады, Генри, Гауссы, … ) - в каждом из диапазонов измерения производится по несколько замеров (очевидно, в начале, середине и конце диапазона) Т.е. логика должна быть примерно такая: 1. В определённую ячейку вводится тип прибора (ручного ввода лучше не допускать, а выбирать из списка) 2. Для выбранного типа прибора АВТОМАТИЧЕСКИ формируется таблица для ввода замеров в контрольных точках. В первой ячейки каждой строки этой таблицы должен быть указан диапазон измерения. В следующей - величина контрольной точки (измеряемый эталон из "магазина"). Потом - замеренное значение (оно должно вводиться в ручную и содержать только цифры). Далее - допустимая и вычисленная погрешности.
Вообще-то, так как приборов много и количество контрольных точек может быть сильно разным, я бы это всё стал делать макросом. Можно совсем тупо: Создать книгу со скрытыми листами-шаблонами протоколов испытаний по каждому из типов приборов. При открытии файла виден только стартовый лист. На этом листе - кнопка "Создать шаблон протокола". При нажатии на неё выводится запрос о типе прибора из предлагаемого списка, который формируется из скрытых листов-шаблонов. После выбора шаблона соответствующий лист шаблона копируется (в новый не скрытый лист или в новый файл-протокол). Протокол открывается метрологу для заполнения.
Нельзя допускать ручного ввода единиц измерений, т.к. даже у одного и того же пользователя в разное время может по-разному ввестись
Опять же: что-то в логике надо исправлять. Давайте попробуем разобраться вместе. Я так понял, что, например, отделу метрологии нужно поверять достаточно большой "зоопарк" электроизмерительных приборов. Для каждого из типов приборов существует своя методика поверки по "контрольным точкам": - для каждой из нескольких измеряемых прибором величин (Вольты, Амперы, Омы, Герцы, Фарады, Генри, Гауссы, … ) - в каждом из диапазонов измерения производится по несколько замеров (очевидно, в начале, середине и конце диапазона) Т.е. логика должна быть примерно такая: 1. В определённую ячейку вводится тип прибора (ручного ввода лучше не допускать, а выбирать из списка) 2. Для выбранного типа прибора АВТОМАТИЧЕСКИ формируется таблица для ввода замеров в контрольных точках. В первой ячейки каждой строки этой таблицы должен быть указан диапазон измерения. В следующей - величина контрольной точки (измеряемый эталон из "магазина"). Потом - замеренное значение (оно должно вводиться в ручную и содержать только цифры). Далее - допустимая и вычисленная погрешности.
Вообще-то, так как приборов много и количество контрольных точек может быть сильно разным, я бы это всё стал делать макросом. Можно совсем тупо: Создать книгу со скрытыми листами-шаблонами протоколов испытаний по каждому из типов приборов. При открытии файла виден только стартовый лист. На этом листе - кнопка "Создать шаблон протокола". При нажатии на неё выводится запрос о типе прибора из предлагаемого списка, который формируется из скрытых листов-шаблонов. После выбора шаблона соответствующий лист шаблона копируется (в новый не скрытый лист или в новый файл-протокол). Протокол открывается метрологу для заполнения.Alex_ST
я из Литвы и русский язык не пройдет через границу
а за Омегой для Омов или за мю для микро Вы, что, в таблицу символов лазаете? И опять же: если единицы вводятся автоматически, то какая разница, на каком языке? Да хоть иероглифами. Ведь вводить её придётся только один раз при создании пользовательского формата.
я из Литвы и русский язык не пройдет через границу
а за Омегой для Омов или за мю для микро Вы, что, в таблицу символов лазаете? И опять же: если единицы вводятся автоматически, то какая разница, на каком языке? Да хоть иероглифами. Ведь вводить её придётся только один раз при создании пользовательского формата.Alex_ST
Вот Вам вариант для Вашей задачи. Только милиОмами не пользуйтесь, т.к. иксел не делает различий между мОм и МОм. все время будет МОм. Столбец G можно скрыть
Вот Вам вариант для Вашей задачи. Только милиОмами не пользуйтесь, т.к. иксел не делает различий между мОм и МОм. все время будет МОм. Столбец G можно скрытьRichman
Alex_ST, 1. Приборы выбираются из списка 2. Пытаюсь сделать заполнение таблицы через ВПР, но выходит коряво, правильно заметили все приборы разные и точки разный, сплошной звиздец 3. К сожалению с макросами проблема, они со мной не дружат Спасибо большое что откликнулись на мою проблему
Alex_ST, 1. Приборы выбираются из списка 2. Пытаюсь сделать заполнение таблицы через ВПР, но выходит коряво, правильно заметили все приборы разные и точки разный, сплошной звиздец 3. К сожалению с макросами проблема, они со мной не дружат Спасибо большое что откликнулись на мою проблемуandreika21
К сожалению с макросами проблема, они со мной не дружат
Ну и фиг с ними. Главное, чтобы Вы с ними решили попробовать подружиться. А макросы, вообще-то, имхо намного проще и мощнее формул. К сожалению (или к счастью), свободное время на работе не безгранично. Поэтому заняться чем-то более серьёзным чем на 0,5 часа максимум я не могу. Хотя задача в таком алгоритме, как я изложил выше, не очень то и сложная... Может быть хотя бы часть "для приманки" и смогу слепить. А там уж кто-нибудь подключится и добьёт.
К сожалению с макросами проблема, они со мной не дружат
Ну и фиг с ними. Главное, чтобы Вы с ними решили попробовать подружиться. А макросы, вообще-то, имхо намного проще и мощнее формул. К сожалению (или к счастью), свободное время на работе не безгранично. Поэтому заняться чем-то более серьёзным чем на 0,5 часа максимум я не могу. Хотя задача в таком алгоритме, как я изложил выше, не очень то и сложная... Может быть хотя бы часть "для приманки" и смогу слепить. А там уж кто-нибудь подключится и добьёт.Alex_ST
"Если на клетке слона вы видите..." "Бейсик, которому вас учили" - очень мало похож на то, что вы можете наблюдать в VBE своего Офиса. Просто потому, что (кодом) в Офисе обычно приходится работать с объектной моделью приложения, к языку имеющей отношение постольку поскольку. А в синтаксисе языка Visual Basic for Application - от Васика можно найти только общие принципы записи листинга Ну и такие же структуры - но ведь условие(), выбор() , цикл() есть во всёх структурных языках
"Если на клетке слона вы видите..." "Бейсик, которому вас учили" - очень мало похож на то, что вы можете наблюдать в VBE своего Офиса. Просто потому, что (кодом) в Офисе обычно приходится работать с объектной моделью приложения, к языку имеющей отношение постольку поскольку. А в синтаксисе языка Visual Basic for Application - от Васика можно найти только общие принципы записи листинга Ну и такие же структуры - но ведь условие(), выбор() , цикл() есть во всёх структурных языках AndreTM
Ну вот, блин... Я-то думал, что макросов только бюстгалтерши боятся А ведь уже практически всё, что нужно сделал... Только чуть дооформить и комментарии к коду написать для новичков. Хоть там и делов-то было в сумме на пол-часа, но обидно, что пропадёт. На всякий случай "труды плодов" выложу. Вдруг кому-нибудь ещё кроме andreika21 пригодится
Ну вот, блин... Я-то думал, что макросов только бюстгалтерши боятся А ведь уже практически всё, что нужно сделал... Только чуть дооформить и комментарии к коду написать для новичков. Хоть там и делов-то было в сумме на пол-часа, но обидно, что пропадёт. На всякий случай "труды плодов" выложу. Вдруг кому-нибудь ещё кроме andreika21 пригодитсяAlex_ST
Alex_ST, Спасибо интересное решение. Попробую применить. Честно пробовал разобраться как это работает но пива не хватило . Если не трудно, вы можете изменить макрос чтобы открывал не новый файл а шаблоны выводил где кнопки. Макрос ругается если сразу нажимаешь выбрать шаблон, с начала надо нажать "Показать все шаблоны" тогда все работает. Я макросов не боюсь, просто в лохматом 88 году нам электрикам трех этажный с фонтаном для охолождения комп показывали раз а неделю, и работал он через раз, потому что какой то физик загрузил свои перфокарты. А сейчас элементарно не хватает времени чтобы вникать, поэтому и мучаю умных людей глупыми вопросами.
Alex_ST, Спасибо интересное решение. Попробую применить. Честно пробовал разобраться как это работает но пива не хватило . Если не трудно, вы можете изменить макрос чтобы открывал не новый файл а шаблоны выводил где кнопки. Макрос ругается если сразу нажимаешь выбрать шаблон, с начала надо нажать "Показать все шаблоны" тогда все работает. Я макросов не боюсь, просто в лохматом 88 году нам электрикам трех этажный с фонтаном для охолождения комп показывали раз а неделю, и работал он через раз, потому что какой то физик загрузил свои перфокарты. А сейчас элементарно не хватает времени чтобы вникать, поэтому и мучаю умных людей глупыми вопросами.andreika21
Макрос ругается если сразу нажимаешь выбрать шаблон, с начала надо нажать "Показать все шаблоны" тогда все работает.
Ещё раз проверил код... Ничего, вроде бы, не должно вылетать вне зависимости от того, видны или скрыты листы шаблонов... Попробуем разобраться по пунктам: 1. Какой у Вас Офис, какая Винда? 2. При открывании файла окно с запросом "выберите шаблон" показывается? И листы шаблонов при этом ведь скрыты? 3. Если вы ничего не выбрали, по после нажатия кнопки "Создать файл по шаблону" форма просто закрывается. Остаётся видным только один лист с кнопками "Выбрать шаблон" и "Показать все шаблоны". Листы шаблонов не видны. 4. Если нажать кнопку "Выбрать шаблон", то будет то же, что и при открытии файла (см.п.2) 5. Как ругается? Что пишет? На какую строку кода переходит, если в "ругательном" окошке нажать "Отладка"?
Макрос ругается если сразу нажимаешь выбрать шаблон, с начала надо нажать "Показать все шаблоны" тогда все работает.
Ещё раз проверил код... Ничего, вроде бы, не должно вылетать вне зависимости от того, видны или скрыты листы шаблонов... Попробуем разобраться по пунктам: 1. Какой у Вас Офис, какая Винда? 2. При открывании файла окно с запросом "выберите шаблон" показывается? И листы шаблонов при этом ведь скрыты? 3. Если вы ничего не выбрали, по после нажатия кнопки "Создать файл по шаблону" форма просто закрывается. Остаётся видным только один лист с кнопками "Выбрать шаблон" и "Показать все шаблоны". Листы шаблонов не видны. 4. Если нажать кнопку "Выбрать шаблон", то будет то же, что и при открытии файла (см.п.2) 5. Как ругается? Что пишет? На какую строку кода переходит, если в "ругательном" окошке нажать "Отладка"?Alex_ST
В 87-86 году я собирал самодельный радиолюбительский персональный компьютер "РК-86" на процессоре КР580ИК80 (советский Intel-8080) по инструкциям в журнале "Радио" Тогда же примерно начал самостоятельно осваивать азы программирования на Ассемблере и Бэйсике
В 87-86 году я собирал самодельный радиолюбительский персональный компьютер "РК-86" на процессоре КР580ИК80 (советский Intel-8080) по инструкциям в журнале "Радио" Тогда же примерно начал самостоятельно осваивать азы программирования на Ассемблере и БэйсикеAlex_ST
С уважением, Алексей MS Excel 2003 - the best!!!
Сообщение отредактировал Alex_ST - Суббота, 25.10.2014, 20:16
Alex_ST, Извините только сейчас добрался до компа. 1. win7, office 2010 2. При открывании файла показывается "выберите шаблон", листы шаблонов скрыты 3. Остаётся видным только один лист с кнопками "Выбрать шаблон" и "Показать все шаблоны". Листы шаблонов не видны. 4. Да 5. Нажимаю "выберите шаблон", из списка выбираю прибор "АВОметер1" нажимаю "Создать файл по шаблону", выскакивает "Run-time error 1004", а в макросе ругается на строчку If Len(.Value) Then Sheets(.Value).Copy 6. Нажимаю "Показать все шаблоны" появляются листы с шаблонами, нажимаю "выберите шаблон", из списка выбираю прибор "АВОметер1" нажимаю "Создать файл по шаблону" и создается новый файл с этим шаблоном, кнопок в новом файле уже нет.
Alex_ST, Извините только сейчас добрался до компа. 1. win7, office 2010 2. При открывании файла показывается "выберите шаблон", листы шаблонов скрыты 3. Остаётся видным только один лист с кнопками "Выбрать шаблон" и "Показать все шаблоны". Листы шаблонов не видны. 4. Да 5. Нажимаю "выберите шаблон", из списка выбираю прибор "АВОметер1" нажимаю "Создать файл по шаблону", выскакивает "Run-time error 1004", а в макросе ругается на строчку If Len(.Value) Then Sheets(.Value).Copy 6. Нажимаю "Показать все шаблоны" появляются листы с шаблонами, нажимаю "выберите шаблон", из списка выбираю прибор "АВОметер1" нажимаю "Создать файл по шаблону" и создается новый файл с этим шаблоном, кнопок в новом файле уже нет.
Прикольно... Попробовал запустить свой файл на компе с Вин-7 из-под Excel-2010 Тоже ругается при попытке копирования скрытого листа... Так вот в чём ещё кроме интерфейса Офис-2003 лучше, чем 2007 и выше!!! Ну и ладно. Раз от такой гад, то переделать не сложно, хотя процедура становится не такой компактной и красивой. Файлы с макросами с работы выкладывать не могу (Спасибо собакам-сисадминам, чтобы их за это в Гугле забанили!) Попробуйте в коде формы заменить текст в процедуре, в которой "ругалось: [vba]
Код
Private Sub btnOK_Click() Dim sShName$: sShName = Me.cbxSheets.Value If Len(sShName) Then With Application: .ScreenUpdating = False: .EnableEvents = False: .DisplayAlerts = False: .Calculation = xlManual: End With With ThisWorkbook.Sheets(sShName): .Visible = True: .Copy: .Visible = False: End With With Application: .ScreenUpdating = True: .EnableEvents = True: .DisplayAlerts = True: .Calculation = xlAutomatic: End With End If Unload Me End Sub
[/vba]
Прикольно... Попробовал запустить свой файл на компе с Вин-7 из-под Excel-2010 Тоже ругается при попытке копирования скрытого листа... Так вот в чём ещё кроме интерфейса Офис-2003 лучше, чем 2007 и выше!!! Ну и ладно. Раз от такой гад, то переделать не сложно, хотя процедура становится не такой компактной и красивой. Файлы с макросами с работы выкладывать не могу (Спасибо собакам-сисадминам, чтобы их за это в Гугле забанили!) Попробуйте в коде формы заменить текст в процедуре, в которой "ругалось: [vba]
Код
Private Sub btnOK_Click() Dim sShName$: sShName = Me.cbxSheets.Value If Len(sShName) Then With Application: .ScreenUpdating = False: .EnableEvents = False: .DisplayAlerts = False: .Calculation = xlManual: End With With ThisWorkbook.Sheets(sShName): .Visible = True: .Copy: .Visible = False: End With With Application: .ScreenUpdating = True: .EnableEvents = True: .DisplayAlerts = True: .Calculation = xlAutomatic: End With End If Unload Me End Sub
Alex_ST, Ура работает, если бы еще новый файл не открывало было бы замечательно. Не подскажите где код заменить. Сисадминов надо в темном переулке воспитывать Спасибо вам выручили.
Alex_ST, Ура работает, если бы еще новый файл не открывало было бы замечательно. Не подскажите где код заменить. Сисадминов надо в темном переулке воспитывать Спасибо вам выручили.andreika21
Что значит "новый файл не открывало?" В этом как раз и фича программы... Ведь если лист создастся в той же книге, то он скроется после закрытия формы. Я так понимаю, что в принципе по каждому из приборов у метрологов должна быть книга из протоколов всех прошедших поверок. Т.е. для каждого прибора - свой файл Excel с листами-протоколами поверки. Ну так и делать нужно, наверное, так: 1. Открываете файл-сборник протоколов конкретного прибора. 2. Открываете файл-генератор шаблонов протоколов и создаёте с его помощью файл-шаблон для заполнения протокола поверки данного прибора. 3. Щелчком ПКМ по ярлыку листа созданного шаблона протокола перемещаете его в файл-сборник протоколов прибора. 4. Сохраняете файл-сборник.
Можно, конечно, и больше автоматизации сделать, чтобы все эти операции делались сами, но лень разбираться в Ваших именах файлов и системе их хранения в файловой системе ... Единственно, что в принципе можно было бы для удобства изменить - это сделать добавку даты к имени листа создаваемого шаблона чтобы удобно было собирать их в одну книгу.
Что значит "новый файл не открывало?" В этом как раз и фича программы... Ведь если лист создастся в той же книге, то он скроется после закрытия формы. Я так понимаю, что в принципе по каждому из приборов у метрологов должна быть книга из протоколов всех прошедших поверок. Т.е. для каждого прибора - свой файл Excel с листами-протоколами поверки. Ну так и делать нужно, наверное, так: 1. Открываете файл-сборник протоколов конкретного прибора. 2. Открываете файл-генератор шаблонов протоколов и создаёте с его помощью файл-шаблон для заполнения протокола поверки данного прибора. 3. Щелчком ПКМ по ярлыку листа созданного шаблона протокола перемещаете его в файл-сборник протоколов прибора. 4. Сохраняете файл-сборник.
Можно, конечно, и больше автоматизации сделать, чтобы все эти операции делались сами, но лень разбираться в Ваших именах файлов и системе их хранения в файловой системе ... Единственно, что в принципе можно было бы для удобства изменить - это сделать добавку даты к имени листа создаваемого шаблона чтобы удобно было собирать их в одну книгу.Alex_ST
С уважением, Алексей MS Excel 2003 - the best!!!
Сообщение отредактировал Alex_ST - Понедельник, 27.10.2014, 12:24
сделать добавку даты к имени листа создаваемого шаблона
[vba]
Код
Private Sub btnOK_Click() Dim sShName$: sShName = Me.cbxSheets.Value If Len(sShName) Then With Application: .ScreenUpdating = False: .EnableEvents = False: .DisplayAlerts = False: .Calculation = xlManual: End With With ThisWorkbook.Sheets(sShName): .Visible = True: .Copy: ActiveWorkbook.Sheets(1).Name = ActiveWorkbook.Sheets(1).Name & " (" & Format(Now(), "YYYY-MM-DD") & ")": .Visible = False: End With With Application: .ScreenUpdating = True: .EnableEvents = True: .DisplayAlerts = True: .Calculation = xlAutomatic: End With End If Unload Me End Sub
сделать добавку даты к имени листа создаваемого шаблона
[vba]
Код
Private Sub btnOK_Click() Dim sShName$: sShName = Me.cbxSheets.Value If Len(sShName) Then With Application: .ScreenUpdating = False: .EnableEvents = False: .DisplayAlerts = False: .Calculation = xlManual: End With With ThisWorkbook.Sheets(sShName): .Visible = True: .Copy: ActiveWorkbook.Sheets(1).Name = ActiveWorkbook.Sheets(1).Name & " (" & Format(Now(), "YYYY-MM-DD") & ")": .Visible = False: End With With Application: .ScreenUpdating = True: .EnableEvents = True: .DisplayAlerts = True: .Calculation = xlAutomatic: End With End If Unload Me End Sub
Alex_ST, Попробую приучить сотрудников может не побьют. Как поменять цвет этих кнопок, нажимаю ПКМ и у меня свойства не выскакивают, есть только форматирование текста или я не там копаю?
Alex_ST, Попробую приучить сотрудников может не побьют. Как поменять цвет этих кнопок, нажимаю ПКМ и у меня свойства не выскакивают, есть только форматирование текста или я не там копаю?andreika21
Это кнопки не из набора элементов управления (ActiveX), а из элементов форм. Их использовать намного проще, но зато не изменяется цвет и нет большого количества обрабатываемых событий. Заморачиваться с ActiveX-кнопками я не стал для простоты. Мне-то не сложно, но я побоялся, что Вам будет сложнее понять. Да и с объяснениями при невозможности (с моей стороны) выложить пример было бы труднее. Просто по ПКМ выделите эти кнопки и удалите их. А вместо них вставьте на лист любые картинки (можно из автофигур) и по ПКМ назначьте на них те же макросы, что были назначены кнопкам. К стати, от делать нечего я чуть пошаманил и сделал процедуру-переключатель видимости/скрытия шаблонов
[vba]
Код
Sub ShowHideTemplates() Dim bShow As Boolean Dim oSh As Worksheet For Each oSh In ThisWorkbook.Worksheets bShow = oSh.CodeName <> "shStart" And oSh.Visible = -1 If bShow Then Exit For Next oSh Call TemplatesVisible(Not (bShow)) End Sub
[/vba]
Запишите её в тот же модуль Module1, где и ShowTemplates Создайте на листе Start картинку или кнопку и припишите к ней этот макрос.
Это кнопки не из набора элементов управления (ActiveX), а из элементов форм. Их использовать намного проще, но зато не изменяется цвет и нет большого количества обрабатываемых событий. Заморачиваться с ActiveX-кнопками я не стал для простоты. Мне-то не сложно, но я побоялся, что Вам будет сложнее понять. Да и с объяснениями при невозможности (с моей стороны) выложить пример было бы труднее. Просто по ПКМ выделите эти кнопки и удалите их. А вместо них вставьте на лист любые картинки (можно из автофигур) и по ПКМ назначьте на них те же макросы, что были назначены кнопкам. К стати, от делать нечего я чуть пошаманил и сделал процедуру-переключатель видимости/скрытия шаблонов
[vba]
Код
Sub ShowHideTemplates() Dim bShow As Boolean Dim oSh As Worksheet For Each oSh In ThisWorkbook.Worksheets bShow = oSh.CodeName <> "shStart" And oSh.Visible = -1 If bShow Then Exit For Next oSh Call TemplatesVisible(Not (bShow)) End Sub
[/vba]
Запишите её в тот же модуль Module1, где и ShowTemplates Создайте на листе Start картинку или кнопку и припишите к ней этот макрос.Alex_ST
С уважением, Алексей MS Excel 2003 - the best!!!
Сообщение отредактировал Alex_ST - Понедельник, 27.10.2014, 15:11