Новости:

Название темы должно отражать суть задачи.
Темы типа "ПОМОГИТЕ!!!", "Срочно!" и т.п. будут удаляться без объяснения причин

Главное меню

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

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

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

Сообщения - Alex_ST

#1
Цитата: Дмитрий Щербаков(The_Prist) от 25.01.2021, 15:00:25А могу и не начаться.
:) Спасибо. Учтём если вдруг придётся использовать (и склероз не помешает)
#2
Цитата: Дмитрий Щербаков(The_Prist) от 25.01.2021, 13:41:43она не всегда правильно перестраивается после назначения новых разрывов
Не знаю, не пробовал.
Т.е. даже метод sh.ResetAllPageBreaks не уверенно помогает?
#3
Цитата: YuriF от 25.01.2021, 09:59:56с таким кодом
Грамотно (кроме Private Sub(), конечно ;) )!
В первый раз вижу работу с коллекцией HPageBreaks. Надо взять на заметку. Вдруг пригодится.
А по поводу кода, то для удобства пользователя хорошо бы сначала запоминать в дополнительной Integer-переменной текущий вид (их всего 2 возможно: xlNormalView := 1 и xlPageBreakPreview := 2), а после отработки макроса восстанавливать его.
#4
Здравствуйте.
Рад, что Вам нравится моя разработка.
К сожалению, данный макрос заточен только на фильтрацию текста, т.к. текст - он текст и есть и никаких других вариантов отображения, а тем более численных соответствий не предполагает.
Переделать процедуру под фильтрацию дат - это отдельный проект уже хотя бы потому, что одна и та же дата, хоть ей и соответствует одно и то же числовое значение, в зависимости от формата ячейки может отображаться по-разному.
Как "костыль" могу предложить сделать рядом с основной таблицей дополнительные столбцы ДЕНЬ, МЕСЯЦ, ГОД, в которые формулами будут выводиться в ВИДЕ ТЕКСТА соответствующие значения из ячеек основного столбца
#5
Цитата: lu-lu от 17.12.2016, 18:20:55Есть 2 функции для генерации чисел по показательному распределению
Ваши функции либо всегда возвращают 0, либо вообще не работают.
Поясняю: т.к. переменные tcl и tser у Вас не заданы, то, если не декларирована Option Explicit, их значения всегда = 0. А умножение чего-либо (кроме бесконечности, конечно  :) ) на 0 всегда даст результат 0.
Если же Option Explicit всё-таки продекларирована, то функции вообще будут вылетать по ошибке.
#6
Цитата: Starbirst от 28.12.2016, 08:13:47не работает в моем файле
Для удобства отладки измените запись процедуры - разверните однострочный If ... Then в многострочную классическую запись If ... Then ... End If и поставьте в начале СТОП:
    Sub Auto_Open()
        Stop
        If ThisWorkbook.ReadOnly Then
            MsgBox "ReadOnly"
            ThisWorkbook.Close False 
        End If
    End Sub 
Попробуйте открыть файл.
Если откроется, значит по какой-то причине событие открытия файла почему-то не обрабатывается.
Если вылетит в VBE, то пройдите дальше в пошаговом режиме F8 и выясните, почему не работает процедура.
#8
Я, честно говоря, даже не представляю, какие могут быть варианты вставки кода...
Хотя... Есть ещё один редко используемый, т.к. это "рудиментарный орган" для обеспечения совместимости с совсем уж старыми версиями, но до сих пор работающий способ: использовать не обработчик события Workbook_Open, а Auto_Open (это событие возникает и обрабатывается даже ещё раньше)
Попробуйте вместо  Workbook_Open в модуле ЭтаКнига создать стандартный модуль (Insert — Module ...) и прописать в нём Sub Auto_Open()   'Открытие файла - событие, предшествующее Workbook_Open
    If ThisWorkbook.ReadOnly Then MsgBox "ReadOnly": ThisWorkbook.Close False
End Sub
Вдруг так получится?
#9
По заданному вопросу о запрете открытия в режиме ReadOnly вот это точно работает:Private Sub Workbook_Open()
    If ThisWorkbook.ReadOnly Then MsgBox "ReadOnly": ThisWorkbook.Close False
End Sub

А по поводу Вашего крайнего поста:
Цитата: Starbirst от 11.12.2016, 08:06:16Есть макрос, запрещающий доступ к файлу при отсутствии ключевого файла
Если у Вас есть списанный откуда-то макрос и по нему есть вопросы, то создайте новый топик, выложите там макрос (очень желательно со ссылкой на первоисточник) и там же и задавайте вопросы.
#10
Упс!
Проверил на локальном файле у себя на компе, сохранив его с рекомендацией открывать только для чтения.
Проверил процедуру. Не работает.
Стал разбирать в пошаговом режиме.
Оказывается, что GetAttr считывает не режим, в котором открыт файл, а атрибуты файла в файловой системе. А т.к. атрибуты файла в ФС - это сосвем не то, что опция, с которой он открыт, то процедура, естественно, не срабатывает, т.к. GetAttr(ThisWorkbook.FullName) всегда не зависимо от режима открывания возвращает 32 (vbArchive), а не 1 (vbReadOnly)  :(
Какая-то команда явно должна быть и для чтения режима открытия. Но я не помню.
Может быть Дмитрий подскажет?


#11
Вы сначала говорите, что
Цитата: Starbirst от 10.12.2016, 15:03:38Файл около 1 м весит
потом добавляете, что к тому же
Цитата: Starbirst от 10.12.2016, 20:05:10Файл сложный и ещё до конца не доработанный
А потом предлагаете в нём разобраться мне? Благодарю покорно. Но лучше уж Вы сами как-нибудь.
Например, попробуйте в модуль ЭтаКнига файла прописать обработчик события её открытия, который, увидев, что книга открыта только для чтения, должен закрыть еёPrivate Sub Workbook_BeforeClose(Cancel As Boolean)
    If GetAttr(ThisWorkbook.FullName) And vbReadOnly Then ThisWorkbook.Close False
End Sub

#12
Starbirst, у вас задача поставлена с ног на голову.
Ситуация такая: на сети есть файл, с которым нужно работать нескольким пользователям, но разрешать общий доступ в нём нельзя, т.к. написанные Вами макросы перестают работать.
И вместо того, чтобы пытаться проанализировать, что мешает Вашим макросам работать в режиме общего доступа к файлу Вы пытаетесь просто запретить доступ к нему более чем одного пользователя.
The_Prist дал Вам ссылку на описание ограничений при работе с файлами общего доступа.
Почитайте её. Она на русском языке. Если Ваши макросы делают что-то из списка запрещённых для файлов общего доступа операций, пересмотрите логику работы.
Если ничего из запрещённых нет, то значит макросы делают что-то не разрешённое для достижения нужных не запрещённых результатов.
#13
Да, без основ английского, конечно очень тяжело с VBA
Даже контекстная Справка и та на инглише.
#14
Дмитрий, Starbirst в Миру практически одновременно создал кросспост.
Я ему там уже практически всё то же самое, что ты здесь советовал. И другую функцию для проверки статуса книги советовал If GetAttr(ThisWorkbook.FullName) And vbReadOnly Then MsgBox "Файл занят. Зайдите позже"
, но оттуда он исчез.
(К стати, брат-близнец твоей IsBookOpen, но с, ИМХО, более корректной обработкой Err, у меня тоже в копилке лежит, но я его описывать не сталFunction FileIsBusy(File$) As Boolean   ' не открывая файла проверяет, открыт ли он вообще кем-либо
    Dim FN%: FN = FreeFile
    On Error Resume Next
    Open File For Random Access Write Lock Write As #FN
    Close #FN
    FileIsBusy = (Err <> 0)
End Functio
)
Что мешает ему использовать макросы в файле с общим доступом. лежащим на расшаренном сетевом диске, я не знаю...
Скорее всего просто макросы там кривые и на общий доступ не рассчитаны. А IT-шник, эти макросы когда-то написавший, по каким-то причинам дорабатывать файл не хочет или не может.
#15
Опять всё накрылось на прошлой неделе...
Батник уже не помогает :(
На Планете выяснили, что на этот раз это из-за KB2965291
Удалил его. ActiveX заработали!
В общем, для себя на сегодняшний день составил такую инструкцию по исправлению трудов плодов мелко-мягких:
Если в Excel перестали работать элементы ActiveX, то попробовать по очереди следующие варианты:

1. Пропатчить батником
@echo off
del "%APPDATA%\Microsoft\Forms\*.exd"
del "%APPDATA%\Roaming\Microsoft\Forms\*.exd"
del "%Temp%\VBE\*.exd"
del "%Temp%\Excel8.0\*.exd"
del "%APPDATA%\Microsoft\Local\*.exd"
del "%USERPROFILE%\Local Settings\Temp\*.exd"
del "%USERPROFILE%\Local Settings\Temp\VBE\*.exd"
del "%USERPROFILE%\Local Settings\Temp\Excel8.0\*.exd"
del "%SystemRoot%\Temp\VBE\*.exd"
del "%SystemRoot%\Temp\Excel8.0\*.exd"


2. Удалить анинсталлером обновления
KB2553154 - декабрь 2014
KB2920813 - март 2015
KB2965291 - май 2015

3. Заменить "исправленную" обновлением библиотеку C:\Windows\System32\FM20.dll на последнюю нормально работавшую FM20.dll v.14.0.7140.5001 от 19-11-2014 (его выложить, к сожалению, здесь не могу, т.к. он весит 531 кило, а можно только 150 ...)
Яндекс.Метрика Рейтинг@Mail.ru