Новости:

Интересные и полезные статьи по работе с Excel и VBA
можно найти в разделе ХИТРОСТИ

Главное меню

Просмотр сообщений

В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.

Просмотр сообщений

Сообщения - Alex_ST

#16
Блин, Дмитрий, всю голову сломал, так и не понял, что возвращают массивы при обращении не к их элементам, а целиком? И почему двойное бинарное отрицание этой величины, возвращаемой безразмерным массивом, равно 0?
#17
Цитата: Kroha1954 от 14.11.2013, 13:56:47Метод 1. Работает прекрасно, но ... даже при удалении макроса выдается сообщение об ошибке и не дает ничего вводить в ячейку с формулой.
Ну, вообще-то так и должно быть.
Ведь макрос всего лишь устанавливает для ячеек с формулами условие проверки данных (валидацию). А после этого он уже не нужен.
Снимается валидация обычным способом.
Выделяете ячейку, с которой хотите её снять ( в Вашем случае если ячеек много, то просто выделите все ячейки с установленной проверкой данных через F5->выделить... ), а потом в меню "Данные" в пункте "Проверка ..." в форме на вкладке "Параметры" задаёте условие проверки "Тип данных" - любое значение и таким образом снимаете установленную макросом проверку (валидацию) для всех выделенных ячеек.
(Где это закопано в риббон-интерфейсе у Ех-2007/2010 можете у меня не спрашивать. Именно из-за этого интерфейса сижу до сих пор на Офисе-2003)
#18
Цитата: Rama от 21.10.2013, 22:01:43
Можно ли помочь собрать надстройку ? Хоть убей, не получается, а ЗДЕСЬ помочь некому, все пытаются научить по своему.
Есть форма, на нее нужно наложить макрос в модуле (возможно его придется чуть исправить)
ПОМОЧЬ-то было бы, наверное, и можно.
Но судя по дискуссии на Планете, на которую Вы дали ссылку, Вы хотите, чтобы это кто-нибудь СДЕЛАЛ ДЛЯ ВАС.
Разницу улавливаете?
На Планете Вам долго пытались объяснить как сделать то, что Вы хотите, т.е. именно ПОМОГАЛИ
Не помогло...
Здесь, у Дмитрия, так же, как и на нескольких других форумах, между прочим, общается большинство форумчан с Планеты.
Там Вы уже "засветились". Здесь теперь тоже вряд ли кто-нибудь захочет попусту терять время.
#19
Вам нужно определить по какому из событий слетает защита.
Поэтому нужно после сохранения (событие Workbook_BeforeSave) не закрывая книгу (не вызывая события Workbook_BeforeClose) проверить, работает ли защита.
#20
Цитата: TofigSTC от 18.07.2013, 03:06:10Все нормально работает ДО закрытия.... Открываю книгу - все...
Ну, значит что-то сбрасывает защиту листа при сохранении, закрытии или открытии книги.
Проверьте, что у Вас происходит при этих событиях (проще всего это сделать в пошаговом режиме, прописав инструкции Stop в Workbook_BeforeClose и Workbook_Open.

Вполне может быть, что работает и "гадит" какая-то надстройка.
Проверьте, работает ли установленная защита после сохранения книги.
Если работает, то очень хорошо бы проверить, осталась ли защита книги при открытии её на другом компьютере.
Или отключите у себя все надстройки и попробуйте открыть книгу.
Если после сохранения не работает, то проходите пошагово Workbook_BeforeSave
#21
TofigSTC,
давайте попробуем разобраться без обид.
Вы слишком не внятно задали вопрос, предварив его без разрыва ответом на вопрос. Потому и непонятки.

Я так понял из Вашего крайнего поста, что Вы использовали защиту формул макросами по моему Варианту2?
Тогда опишите:
1. Какую из двух процедур и куда Вы положили.
2. Как включали защиту формул.
3. Что и когда сработало, а что и когда нет.
#22
Цитата: TofigSTC от 17.07.2013, 03:25:42Посмотрите 9-й трюк...
1. Если это приказ, то на каком основании? Если это заказ, то на каких условиях? Если это просьба о помощи, то почему так сформулирована? :(
2. Говоря так, Вы должны либо привести выдержку из текста книги, либо приложить ссылку для ознакомления с "трюком" всех интересующихся
3. В разделе "Трюк №9. Блокировка и защита ячеек, содержащих формулы" описано ТРИ метода.
На основании второго и третьего я написал и выложил выше макросы.
Цитата: TofigSTC от 17.07.2013, 03:25:42После сохранения, закрытия и последующеяо открытия код почему-то не сработал...
В первом методе никакого кода нет, поэтому не сработать он не мог в принципе. Так же, впрочем, как и сам метод не мог не сработать.
4. Более подробно изложите, что и в какой последовательности Вы делали и что не получилось.
Выложите всой фай, в котором не работает установленная Вами защита. Посмотрим.
_______________________________________________________
P.S. Ссылки для скачивания книги «Excel. Трюки» Холи Р., Холи Д. можно взять ЗДЕСЬ.
Для не читавших книгу: первый метод - это установить защиту только ячеек с формулами. Для этого предлагается:
- сделать все ячейки не защищаемыми
- по F5->"Выделить..." выбрать ячейки с формулами
- сделать выбранные ячейки защищаемыми
- поставить защиту листа
#23
Привет, Николай.
Прикольно при помощи InStr уникальные собираешь. Я такого простого решения ещё не встречал :)
Но вообще-то, делать что-то не универсальное, а жёстко заточенное на конкретные книгу\лист\диапазон я очень не люблю, т.к. потом придётся при каждом чихе код править.
#24
Привет, Николай!
astradewa кросспостит. У Сержа в Миру я ему сегодня утром уже предлагал использовать (подпилить) макрос с использованием словаря, выложенный в Готовых решениях. Реакции не последовало...
#25
Дмитрий, наверное, описАлся.
Так должно сработать:
Sub Del_Pan()
    Application.Commandbars("АвОтчет").Delete
End Sub
#26
Цитата: snake100771 от 07.02.2013, 13:33:48Смена цвета на коммутаторе не подойдет - эти журналы выдаются на печать и мне нужно, чтобы менялся именно номер.
Насчет протягивания мышкой номеров порта - мы и сейчас так делаем, и очень хотели бы от этого отойти.
Ну, смена цвета - это именно для того, чтобы проще было на экране наблюдать переход на другой коммутатор. А для печати надо поставить "гульку" черно-белая печать и никто Вашу заливку не увидит (будет напечатано даже то, что спрятано как белое на белом).
Вы, наверное, просто не достаточно полно знаете возможности "протягивания".
Как раз именно протягивание ЧИСЛОВЫХ ЗНАЧЕНИЙ, но ПРАВОЙ КНОПКОЙ МЫШИ (тогда откроется пункт меню ячейки "Прогрессия...")  в сочетании с соответствующим форматированием ячеек даёт Вам возможность заполнить выделение нужной прогрессией чисел с требуемым шагом и выглядящей именно так как надо.
Вот с шагом 2:
01
03
05
07
09
11
13
15
а вот с шагом 4:
01
05
09
13
17
21
25
29
И всё получается "лёгким движением руки" и при этом не зависит от положения на странице и прочих факторов, которые могут исказить результаты вычисления формулами.
Но дело, конечно Ваше.
Хотите формулами, делайте ими.
#27
Ну, можно, конечно, и формулами вычислять...
Но уж больно легко их попортить при неаккуратном (малокомпетентном) пользовании Excel'ем.
Не дай Бог кто-то строку в заголовок добавит... Вся нумерация может незаметно съехать. Потом вылавливать замучаетесь.
Уж лучше, наверное, поиграть форматами.
Для первой задачи я сделал пример на основе примера условного форматирования "смена цвета при смене значения". Тогда очень хорошо становится видна смена коммутатора в столбцах W и AC (формулы УФ не мои, я "макрушник", а не "формулист", но на всякий случай пример реализации такой "зебры" я у себя в копилке откуда-то сохранил).
А в столбцах портов просто применен цифровой формат "00" чтобы показывался 0 в начале. А потом введены номера пары первых портов и "протянуто" мышкой до момента смены коммутатора, который чётко виден по изменению цвета заливки ячеек в столбце левее.
#28
Цитата: FlintFD от 21.01.2013, 21:17:48...несовместимость кодов 2010 и 97-2003 экселей, записанных макрорекордером, в 2010 всё прекрасно работает, а в старом ошибку выдаёт...
А поподробнее? На какой команде? Какую ошибку?
Я погглил. Знатоки утверждают, что на листе 2007/2010 по сравнению с 2003 новых объектов, методов и свойств практически не обнаружено.
Единственно, что недомудрили с числом ячеек всего листа - Сells.Сount вызывает ошибку из-за переполнения (несоответствия размерности).
#29
FlintFD,
Вы, наверное, не вникли в то, что делает процедура из моего крайнего поста.
Она просто облегчает Вам поиск некорректно заполненных листов в книге. А для этого просто создаёт дополнительный лист, называемый Errors (имя задаётся константой в коде), на который выводит в столбик имена листов, а в соседнем столбце выводит значения из ячеек А1 этих листов.
Можно, конечно, чуть изменить так, чтобы выводились не все значения, а только те листы, на которых ошибка заполнения. Так же можно по двойному клику на имени листа переходить на его ячейку для её исправления. Это совсем не трудно допилить.
И только после исправления ошибок Вы переименуете первым макросом листы.
#30
Цитата: FlintFD от 21.01.2013, 12:52:07
Выискивать каждый раз в куче присланных файлов битый довольно долго. Возник вопрос, как сделать чтоб файлы переименовывались по условию если ячейка не пуста (данное условие есть) и в ней не содержится текст
Так может быть лучше не переименовывать, а потом смотреть, что не переименовалось, а сначала проверить листы на правильность заполнения, исправить ручками ошибки, а потом уже переименовывать листы?
Ну, хотя бы так, например:Sub Check_A1()
   Const sWsName$ = "Errors"
   Dim wSh As Worksheet, i%
   On Error Resume Next
   Application.DisplayAlerts = False: Worksheets(sWsName).Delete: Application.DisplayAlerts = True
   With ThisWorkbook.Worksheets.Add
      .Name = sWsName
      For Each wSh In Worksheets
         If wSh.Name <> sWsName Then
            i = i + 1
            .Range("A" & i) = wSh.Name
            .Range("B" & i) = wSh.Range("A1")
         End If
      Next
   End With
End Sub

Яндекс.Метрика Рейтинг@Mail.ru