Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Excel VBA (часть 2)

Автор: visual73
Дата сообщения: 24.09.2009 21:01
Solenaja

Логическое выражение - либо True либо False.

Sub superprotect()

Dim PWORD As String, i As Integer, n As Integer
PWORD = "xxxxx"
n = ActiveWorkbook.Sheets.Count
For i = 2 To n
With Sheets(i)
.EnableSelection = xlUnlockedCells
.Visible = 2
.Protect Password:=PWORD, AllowFormattingRows:=True
End With
Next

Sheets(1).Protect Password:=PWORD, AllowFormattingRows:=True
Sheets(1).EnableSelection = xlUnlockedCells

With ActiveWindow
.DisplayHorizontalScrollBar = False
.DisplayVerticalScrollBar = False
.DisplayHeadings = False
End With
ActiveWorkbook.Protect PWORD, true, true

End Sub
Автор: Solenaja
Дата сообщения: 25.09.2009 09:26
ActiveWorkbook.Protect Structure:=True, Windows:=False 'защитили структуру
это куда - после PWORD = "xxxxx" ?
Автор: Roka
Дата сообщения: 25.09.2009 09:27
Помогите в реализации задачи:
Имеем защищенный лист в котором нельзя добавлять или удалять строки и столбцы, ячейки с формулами защищены от правки и есть открытые поля для ввода.
Необходимо на этом листе создать кнопку для добавления строки в текущей позиции курсора с форматом предыдущей строки. НУ и при этом чтобы защита листа была сохранна.

спасиб
Автор: visual73
Дата сообщения: 25.09.2009 09:31
Solenaja
поставь в конец, последней строкой. пароль еще можешь добавить
ActiveWorkbook.Protect PWORD, true, true
Автор: Solenaja
Дата сообщения: 25.09.2009 09:39
ругается
Нельзя установить свойство Visisble класса Worksheet
строка .Visible = 2

нужно скрыть все ярлыки книги, т.е. один рабочий лист, но без навигации ярлыков

p.s. Excel 2007
Автор: visual73
Дата сообщения: 25.09.2009 09:44
Roka
ну в чем сложность?
Попробуй понажимай то что ты хочешь под запись макроса, и погляди что он тебе запишет. Небольшой анализ и сам разберёшься.
Схема: в макросе снимаешь защиту, вставляешь строку, ставишь защиту снова; рисуешь на листе кнопку и вешаешь полученный макрос.
Автор: Roka
Дата сообщения: 25.09.2009 09:46
visual73 так и сделал, а как передать пароль ActiveSheet.Unprotect/Protect ?
И надо ли после данной процедуры заново ставить защиту книги?

А еще подскажите, как защитить книгу, чтобы нельзя было войти в Редактор Visual Basic?
И как пароль глабально задать один на все листы и чтобы после внесения изменения в книге при выходе все листы и книга автоматом вставали в защиту?
Автор: visual73
Дата сообщения: 25.09.2009 09:47
Solenaja
у меня всё работает. Возьми новую создай Книгу и вставь туда макрос, и поробуй снова.
Он самый -2007 ))

Roka

Цитата:
И надо ли после данной процедуры заново ставить защиту книги?

ну это я не знаю, надо ли тебе ставить пароль на книгу???))) Если тебе надо, то ставь, а если не надо - то не ставь )

Цитата:
а как передать пароль ActiveSheet.Unprotect/Protect ?

Возьми в редакторе VBA поставь на это слово курсор и нажми F1. Найди в справке команду в сочетании ActiveSheet.Unprotect и увидишь синтаксис. Вот так
ActiveSheet.Unprotect ПеременнаяТвойПароль
Автор: Solenaja
Дата сообщения: 25.09.2009 10:10
visual73
почему то выскакивает окно для ввода пароля - "Снять защиту книги"
Автор: visual73
Дата сообщения: 25.09.2009 10:24
Solenaja
Еще раз взял код из http://forum.ru-board.com/topic.cgi?forum=33&topic=8273&start=3680#15
Вставил в новую книгу. Запустил - все сработало. Сработало то что написано в макросе!
По другому быть не может.

Твой вопрос из области "почему то не работает"! Что не работает, что перед этим сделано, нет конкретики. На такие вопросы нет ответа.
Автор: Solenaja
Дата сообщения: 25.09.2009 10:44
visual73
я же и говорю конкретно
после запуска макроса почему то выскакивает окно для ввода пароля - "Снять защиту книги"
макрос добавлен в PERSONAL.XLSB
запуск из новой книги тоже самое

жмешь отмену вываливается с ошибкой, на книгу ставится пароль
в общем удлив строку ActiveWorkbook.Protect PWORD, true, true - окно с вводом пароля не появляется

Sub superprotect()

Dim PWORD As String, i As Integer, n As Integer
PWORD = "xxxxxx"
n = ActiveWorkbook.Sheets.Count
For i = 2 To n
With Sheets(i)
.EnableSelection = xlUnlockedCells
.Visible = 2
.protect Password:=PWORD, AllowFormattingRows:=True
End With
Next

Sheets(1).protect Password:=PWORD, AllowFormattingRows:=True
Sheets(1).EnableSelection = xlUnlockedCells

With ActiveWindow
.DisplayHorizontalScrollBar = False
.DisplayVerticalScrollBar = False
.DisplayHeadings = False
.DisplayWorkbookTabs = False
.DisplayGridlines = False
End With
ActiveWorkbook.protect Structure:=True
End Sub


большое спасибо !
Автор: Roka
Дата сообщения: 25.09.2009 11:18
Еще подсобите, плиз
Выделяем три ячейки в трех строках, после чего функция Selection.EntireRow.Insert добавляет впереди три новые строки.
Как сделать, чтобы сколько бы ячеек не было выделено, всегда впереди добавлялась только одна?

Тоже самое при удалении, как сделать чтобы удалялась первая из выделенных строк?
Автор: visual73
Дата сообщения: 25.09.2009 11:40
Solenaja
у меня и в PERSONAL.XLSB работает.
Можно означить конкретную книгу по имени.
Автор: alexusav
Дата сообщения: 25.09.2009 18:02
Доброго времени суток!
Возникла проблема с перемещением кнопки по листу. т.е. нужно чтобы кнопка всегда оставалась в видимой части листа. Когда я перемещаюсь по таблице вниз с помощью скролла, кнопка соответственно остается вверху.
Возможно ли сделать так чтобы кнопка перемещалась???
Помогите плиззз! Заранее спасибо!
Автор: visual73
Дата сообщения: 25.09.2009 19:56
alexusav
повесь кнопку не на лист а на панель инструментов/ленту
Автор: alexusav
Дата сообщения: 25.09.2009 21:09
visual73 спасибо за идею! создал новую панель инструментов, теперь не получается поместить на панель кнопку. а что скролл никак нельзя обработать?
Автор: brok3n
Дата сообщения: 25.09.2009 21:59
есть такая табличка:

можно ли как-нибудь сделать, чтобы Excel автоматически выделял номера песен (01, 02... 99) жирным?
если да, то можно как-нибудь применить это к уже введённым данным?
а ещё хочется, если, опять же, можно, чтобы по мере ввода песен ("01 - Название", например), номера становились жирненькими
Автор: alexusav
Дата сообщения: 25.09.2009 22:05
С кнопкой на панели инструментов разобрался. но возникает следующий вопрос))
если скопировать мой .xls файл на другой пк, кнопка с панельки пропадает. можно сделать так, чтобы кнопка помещалась на панельку автоматически, или не пропадала?
Автор: visual73
Дата сообщения: 26.09.2009 08:24
alexusav
Если у тебя не выше Excel2003, то помести в твой файл макрос ВоркБук_Автооупен, и при открытии книги будет создаваться кнопка на панели, а при закрытии можно сделать чтобы удалялась

Добавлено:
brok3n
у тебя там одна ячейка - а это текстовая строка. Обработка каждой такой строки будет достаточно затруднительна. Также нужно учесть что цифры могут попадаться и в названии песен.
Если подходить здраво - не реализуемо (не в смысле того что совсем нельзя).
Автор: brok3n
Дата сообщения: 26.09.2009 09:47
visual73
задача облегчается благодаря тому, что номер песни можно принять за "число проблем дефис пробел", т.е. "01 - ".
Автор: visual73
Дата сообщения: 26.09.2009 11:09
brok3n
великолепно! Можно сказать - тонкое решение проблемы! ))
Автор: SaporousWolf
Дата сообщения: 26.09.2009 11:46
Имеется таблица о ремонте оборудования(номер заказа, ФИО заказчика, наименование оборудования, вид ремонта, стоимость, дата начала ремонта, дата окончания ремонта)

Вопрос1: Как увеличить стоимость ремонта оборудования с заданым наименованием на какой-либо процент(т.е имеется форма с ListBox'ом содержащим список оборудования, нужно сделать так, чтобы можно было выбрать любой элемент из этого списка и для него увеличить или уменьшить стоимость на какй-либо процент процент.
Посоветуйте пожалуйста что-нибудь, заранее благодарен!
Пример формы:
[img][img=http://img22.imageshack.us/img22/1594/121xo.th.jpg][/img]
Автор: visual73
Дата сообщения: 26.09.2009 12:19
SaporousWolf
не проще ли будет реализовать эту задачу в Access? Он намного гибче при работе с выборками и связями. Можно например сделать таблицу со списком оборудования и его стоимостью, таблицу с заказами на ремонт. Если стоимость оборудования увеличилась, легко изменить либо конкретную одну запись, либо всё оборудование списком умножить на константу. Далее формирую новый заказ уже будут использоваться новые цены.

Roka
ActiveCell.Rows(0).Insert
ActiveCell.Rows(0).Delete

SaporousWolf
я так понимаю список оборудования - это уникальные позиции?
Тогда набрав все члены оборудования в ListBox мы уже знаем их расположение. Дальше дело техники.
Автор: InSe0F
Дата сообщения: 27.09.2009 15:21
есть следующая задача:
каждую неделю приходит определенного формата Excel файл с расписанием
надо его импортить в Outlook - есть какие нить штатные возможности или только VBA?
Автор: SaporousWolf
Дата сообщения: 28.09.2009 08:14
visual73, спасибо за совет!
Автор: Roka
Дата сообщения: 28.09.2009 14:49
visual73
Спасибо, но при этом варианте вылазит сообщение: "Данная операция приведет к отмене объединения ячеек. Продолжить?"
Хочется тихого добавления\удаления без всяких там сообщений

Может еще есть какие идеи?

Все, спасибо. Нашел похоже:
ActiveCell.EntireRow.Insert
ActiveCell.EntireRow.Delete

Добавлено:
Люди, а как можно спрятать свои макросы от посторонних глаз в рабочей книге?
Автор: ZlydenGL
Дата сообщения: 28.09.2009 17:06
Разве что запаролить (запаролить макросы, конечно - дописал позже). Или вынести макросы в "общий" файл .xla.

Если нужно запаролить сам ФАКТ присутствия макросов - то либо .xla, либо подписать своим сертификатом макрос, установить этот сертификат на нужной машине и открыть файл, поставив галочку "Запомнить выбор".
Автор: visual73
Дата сообщения: 28.09.2009 20:44
Roka

Цитата:
Люди, а как можно спрятать свои макросы от посторонних глаз в рабочей книге?

можно еще поместить макрос в книгу personal
Автор: Roka
Дата сообщения: 29.09.2009 08:46
Может у кого-то уже есть решение по архивации рабочей книги?
Хочу кнопочку с архивацией ВинРАРом текущей книги и отправкой архива по мылу.
Отправлять книгу по мылу научился, еще бы заархивировать ее перед отправкой.
Заранее спасибо.
Автор: ZlydenGL
Дата сообщения: 29.09.2009 08:50
ВинРАР откажется сжимать файл, если он (файл) открыт другим приложением. Т.е. ситуация аналогична открытию банки, инструкция по открытию которой находится внутри

Как я вижу возможную реализацию:
1. Создаем временную книгу с содержимым всех листов (но, к примеру, БЕЗ макросов, тупым копированием листов).
2. Эту временную книгу уже архивируем через команду Exec
3. Удаляем временный файл

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133

Предыдущая тема: Написание своего HyperTerminal для считывания данных


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.