Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 След.
Подсчет количества страниц при печати листа, Количество страниц не обновляется при изменении разметки страницы
 
Всем чмоки в этом чатике :D
Для экономии бумаги программно меняю ориентацию с альбомной на портретную и обратно. В портретной выходит 1 страница на печать, в альбомной - 2.
Желательно печатать в альбомной, если одна страница, если их две - портрет.
Код
Sub pbreaks()
    Dim sh As Worksheet
    Set sh = Workbooks.Open("D:\АктСверки № 336 от 31-03-2022.xls", False, False).ActiveSheet

    yyy = sh.VPageBreaks.Count
    zzz = sh.HPageBreaks.Count
    xxx = sh.PageSetup.Pages.Count
    uuu = countp(sh.Name)
    With sh.PageSetup
        .Orientation = xlLandscape
        .FitToPagesWide = 1
    End With
    yyy = sh.VPageBreaks.Count
    zzz = sh.HPageBreaks.Count
    xxx = sh.PageSetup.Pages.Count
    uuu = countp(sh.Name)
    sh.Parent.Close False
End Sub

Public Function countp(Tabx As String) As Long
    countp = ExecuteExcel4Macro("Get.Document(50,""" & Tabx & """)")
End Function


Ни одна из величин xxx, yyy, zzz, uuu не меняется после поворота в xlLandscape. Если сделать превью печати или Файл - Печать, то величины обновляются.
Application.PrintCommunication = False/True пробовал, принудительный пересчет Application.Calculate пробовал.
Подскажите, куда копать?
Изменено: Лузер™ - 26.04.2022 17:00:57
Bite my shiny metal ass!      
Максимум по условиям в другом диапазоне
 
Дано:
1) 24 значения некоторой величины (в строке 2 приложенного файла) - на каждый час.
2) Некоторый набор  отчетных часов (в строке 5 файла). Значения могут повторяться, количество от 10 до 30.

Среди них интересуют уникальные, которые я получаю в строке 7. Уникальных может быть сколько угодно, от 1 до тех же 30
Для них в строке 8 подтягиваю значения из строки 2 и в ячейке Z8 нахожу максимум этих значений.

Хотелось бы сделать не так громоздко. Наверняка же можно какой-нить формулой массива без промежуточных вычислений?
В приложенном файле расчет для одних суток, а этих суток на самом деле много.
ЗЫ подписка на Office 365 не ожидается, поэтому МАКСЕСЛИМН непригодна от слова совсем. Сейчас стоит офис 2010, в скором будущем ожидается переход на 2016.
Bite my shiny metal ass!      
Хитрая защита проекта VBA
 
Всем привет!
Наткнулся на хитровызащищенный файл.
При обращении к проекту вылезает такое сообщение

Запрос на ввод пароля к проекту не выдается.
Как такое реализовано?
Нашел файл тут: https://cloud.mail.ru/public/6eyi/xdu5Ynb2M
Bite my shiny metal ass!      
Формула, вытаскивающая самые левые значения из таблицы в отдельный столбец
 
Привет всем!
Есть таблица из 15 столбцов. Некоторые данные в таблице могут отсутствовать.Задача вытащить в отдельный столбец самое левое число.
Что должно получиться - в столбце R (желтым)
Вроде ПОИСКПОЗ должен справиться, но туплю что-то.
Bite my shiny metal ass!      
Небольшие окошки при открытии и сохранении книги, Как предотвратить появление?
 
В разное время разные макросы открывают книгу, пишут туда данные и сохраняют ее. Запуск макросов зависит от времени суток, прихода почты, фаз луны и прочая.
В процессе появляются следующие окошки:



Окошки отбирают фокус на себя, можно случайно нажать отмена, что собьет выполнение макроса.
Размер книги 16 метров. Только данные, без формул.
Уже стоит:
Application.Visible = False
Application.DisplayAlerts = False

Может еще что поставить, чтобы их развидеть?
Bite my shiny metal ass!      
Обнаружено содержимое которое не удалось прочитать..., Это "содержимое" не удается прочитать только когда книга в режиме только чтение.
 
Офис 2010.
Книга с паролем на запись. Сделан пароль для того, чтобы разные макросы могли туда писать в любое время, а люди и другие макросы только читать. То бишь, чтобы книга была доступна на запись всегда.
Если открывать с паролем - все ОК. Если открывать "только для чтения", то "Обнаружено содержимое которое не удалось прочитать". Если ответить "Да", то пытается открыть раз 5, но так и не открывает.
Аналогично происходит с книгами, которые открываю из сообщений в аутлуке. Напрямую не открываются - "Обнаружено ...", стоит их вытащить (любым способом на любой диск) - нет проблем.

На другом компе, с таким же железом и софтом книги открываются хоть так, хоть так.

Куда копать?
Bite my shiny metal ass!      
Ошибка открытия книги макросом.
 
Дано:
Офис 2010.
В аутлук приходит письмо, по факту прихода запускается макрос, у которого есть строчка:
Set WbIn = XLApp.Workbooks.Open(fName, False, True)
На ней макрос говорит Runtime error 1004, метод Workbooks.Open Failed
Если написать так:
Set WbIn = XLApp.Workbooks.Open(fName)
то все работает. О_о.
Если написать так: Set WbIn = XLApp.Workbooks.Open(fName, UpdateLinks:=False, ReadOnly:=True), тоже валится.
Внимание! Макрос верой и правдой работал ежедневно в течение лет трех(!), строка была с  False, True), винда и офис не обновлялась. Почему оно вдруг сегодня перестало работать?
Изменено: Лузер™ - 30.11.2015 15:42:13
Bite my shiny metal ass!      
Управление двусторонней печатью из Эксель., Нарыл на просторах инета.
 
Возможно тут это уже было, но не могу не поделиться. Вдруг кому надо будет.
Начну издалека  :)  
Однажды мой офисный принтер внезапно напечатал анкету на визу в пдф с двух сторон. До этого момента я думал, что он односторонний. Тут же у меня родилась идея как сэкономить бумагу родной фирме, а себе время, затрачиваемое на печать и переворачивание листов.
Однако ни одна из установленных прог не хотела печатать в дуплексе, кроме того же адобе ридера, да и тот печатал только ту самую анкету (как ему подготовили этот пдф для меня до сих пор загадка).
С помощью бубна, такой-то матери и наших эникейщиков айтишников удалось найти крыжик ответственный за включение дуплекса у принтера (лучи ненависти фирме НР).
Дело осталось за малым - найти как управлять этим свойством из VBA. Ну и нашлось. На всякий случай выкладываю пример и сюда.

Из найденных ограничений. Поменять дуплекс из кода можно только с правами админа, хотя ручками, тыкая мышкой в панель управления и далее, мне это доступно и под обычным пользователем. А так как я решил, что больше не буду все время сидеть под админом, то понизил себе права и включением/выключением дуплекса не пользуюсь. (У автора по ссылке есть псевдорешение - не тестил).
Зато перед печатью мне выводится алерт о состоянии дуплекса на принтере и предложением продолжить или отказаться - не ошибусь. А еще написал переписал под себя функцию для ограничения очереди печати в винде. Так как под опять же обычным пользователем удалить все задания из очереди невозможно, а макрос отправляет на печать куда быстрее чем съедает принтер и в очереди может скопиться "over9000" заданий. Нужно оно когда оказывается, что на печать отправлена чушь, а оказывается это почему-то когда очередь уже битком  :)  .

Функция:
Код
Public Function print_queue_count()
Dim locator As WbemScripting.SWbemLocator
Dim Service As WbemScripting.SWbemServices
Dim myob As WbemScripting.SWbemObjectSet
Set locator = New WbemScripting.SWbemLocator
Set Service = locator.ConnectServer
' язык WQL - почти SQL
Set myob = Service.ExecQuery("SELECT *   FROM Win32_PrintJob ")
print_queue_count = myob.Count
End Function 
Вызов функции:
Код
Do While print_queue_count > 1: DoEvents: Loop 
Сообссно пока в очереди больше одного задания, макрос отдыхает.
Емнип, для нее требуется Tools - References - Microsoft WMI Scripting V1.2 Library
Функцию тоже честно спер, но не вспомню откуда  :)  

Ну вот как-то так.
Bite my shiny metal ass!      
Подбор ширины столбца в объединенной ячейке макросом, Объединенные ячейки - зло!
 
Имеется счет-фактура, которую выплевывает 1С.
По договору точность отображения цены составляет 11 знаков после запятой.
Кроме того, имеется замороченный сотрудник контрагента, который докапывается до каждой запятой в документе.
Для успокоения этого сотрудника применяется нехитрый
Код
Set rSF = .Cells.Find("Цена (тариф) за единицу измерения", , , xlPart)
If Not rSF Is Nothing Then
    rSF.Offset(2, 0).NumberFormat = "#,##0.00000000000"
End If 
После него бывало, что число не влезает в ячейку и отображается  как "#########"
Решался вопрос просто:
rSF.EntireColumn.AutoFit

Однако ребятам в 1С тоже хочется кушать и они выпускают новую версию, где rSF является объединенной ячейкой и соответственно плюет на .EntireColumn.AutoFit

Замороченный сотрудник в ярости, я боюсь за его душевное здоровье. Как мне его спасти без потери своего душевного здоровья?
Вообще давно интересовал вопрос: есть некое содержимое ячейки .Value, кроме того про ячейку я знаю вид и размер шрифта, перенос строк и т.п.
Как эти знания перевести в ширину столбца?
Bite my shiny metal ass!      
Отображение состояния переменной VBA на панели быстрого доступа
 
Имею следующую последовательность в VBA:

объявляю глобальную переменную
Public  NewMaket As Range

выполняю некую процедуру в которой этот NewMaket задается.

затем (после распития чая) запускаю другую процедуру или третью в которой  этот диапазон используется.

Если во время чая или выполнения процедуры произошел reset проекта vba, то ессно переменная становится nothing. Конечно состояние переменной проверяется в процедурах, но хочется наглядности, а именно: иметь кнопку на панели, которая бы отражала состояние переменной и меняла бы иконку. Пришел, глянул на панель и запустил в случае чего этой кнопкой первую процедуру.

Алсо. Аналогичная задача стоит в аутлуке, где объявляется
Private WithEvents ItemsT As Outlook.Items
Аутглюк вообще гад, может вообще втихаря сбросить переменную и обработка писем остановилась. (Функционала "правил" в аутлуке мне не хватает для обработки).


Офис 2010
Изменено: Лузер™ - 15.01.2015 11:43:38
Bite my shiny metal ass!      
Отключение расчета формул на одном листе
 
Скрытый текст
Привет всем, рад вас видеть в добром здравии!

Возникла следующая задача:
Есть книга весом 16 метров. Содержит связь с мсАкцесс, кучу формул и сводных таблиц. Открывается минуты за две. В процессе открытия эксель занимает больше гига в оперативе. Короче тяжелый файл. Думаю, что прилагать нет нужды. Да и задача не связана с конкретным файлом.

В файл добавлен новый функционал на одном листе, вес увеличился на 2 метра (как и время открытия). Фишка в том, что функционал на регулярной основе не нужен, а только в нештатных ситуациях, то есть изредка.

Хочется, чтобы формулы на этом листе в штатном порядке не пересчитывались, но в любой момент их можно было бы включить одним кликом.
Выносить в отдельную книгу этот лист не вариант, так как основной файл каждый месяц меняет имя, старый переезжает в архив, а замена связей происходит ну очень долго - формул на листе овердоху 100500 (а может и больше).

Upd. Забыл добавить: Эксель 2010, если имеет значение.

Что посоветуете?
Изменено: Лузер™ - 15.01.2015 10:04:57 (Upd)
Bite my shiny metal ass!      
Всем привет!, Давно сюда не заглядывал :)
 
Скажите, всех сегодня через личку Виктория позвала работать в Н.Новгород или я один такой счастливчик?  8)
Bite my shiny metal ass!      
=ЕСЛИОШИБКА()
 
При создании формулы =ЕСЛИОШИБКА()  в книге появляется скрытое имя  "_xlfn.IFERROR" со значением       : Value : "=#NAME?"    
Это только у меня так? Эксель 2010  
 
Обращаю внимание на слово "скрытое"    Visible = False, в диспетчере имен его не видно  
Но если сделать Visible = True, то отображается и его можно удалить. Программно не удаляется.
Bite my shiny metal ass!      
Не обновляется сводная при закрытом файле-источнике
 
Источник: data.xlsb  
сводная в: Книга2.xlsx  
 
Если обе книги открыты - нет проблем.  
Если только Книга2.xlsx - ругается, что не может открыть.  
 
Проблему локализовал. Нашел, что если удалить столбцы А:В в data, то обновляется нормально.  
Причем, если эти столбцы перенести на соседний лист (т.е. они уже не относятся к данным для обновления), то ошибка возникает все равно.  
 
Что-то мне подсказывает, что таки глючный у меня офис.
Bite my shiny metal ass!      
Сбивается формат ячеек в сводной таблице при группировке
 
Всем привет, рад видеть!  
 
Имею базу в Аксессе. В ней есть поле TimeStamp в формате Дата/время.  
Строю сводную в хлс. Пока нет группировки - формат поля отображается как надо (05.12.2011 14:30) и меняется как захочешь.    
 
Стоит включить группировку формат меняется на 05.дек и ведет себя как будто это текст, т.е. не реагирует на смену формата.  
 
То ли мой 2010 глючный, то ли лыжи не едут...
Bite my shiny metal ass!      
Невидимая книга
 
Просто книга. Несколько листов, ни формул сложных, ни макросов.  
Сотрудник правил ее на моем компе, сохранил, закрыл. Далее открывается только эксель, как будто в нем ни одной книги не открыто. Файл при этом помечается системой, как занятый экселем.  
 
Куда она делась?  
И как вернуть?
Bite my shiny metal ass!      
Глючный офис попался? Или он просто глючный?
 
Я уже писал о плавающих ошибках...  
Теперь вот постоянная ошибка, но на ровном месте.  
Написал макро1(). Делает следующее:  
- копирует два листа в новую книгу.  
- удаляет лишние строки/столбцы  
- заменяет значениями  
- удаляет имена  
 
Все это в цикле для 16 объектов.  
На 13-м (может пора в мистику начать верить?) объекте встает с ошибкой, там где предыдущие 12 спокойно выполнялись.  
Эксель при этом "слегка подвисает": есть возможность менять листы, но ни одна ячейка не выбирается. Сохранить или просто закрыть невозможно - только снять задачу.  
При пошаговом выполнении - сбоев нет.  
Тот же 13-й объект ставлю в начало цикла - сбоев нет  
 
сделал так:  
Саб макро1()  
цикл по 12 объектам  
Call макро2  
енд саб  
 
Макро2()  
цикл по 4 объектам  
енд саб  
 
Кода в два раза больше, но работает без сбоев.  
Офис 2007 SP2
Bite my shiny metal ass!      
Сводные таблицы на одном кэше в 2007
 
В 2003, в мастере, прям в самом начале можно было указать "на основе данных другой сводной"  
А в 2007 это где?
Bite my shiny metal ass!      
Отправка письма из Эксель: распознование имен в поле SM.To
 
Имеем код:  
 
Sub Posting(FullNameOS As String, rPerStr As String)  
Dim OL As New Outlook.Application  
Dim SM As Outlook.MailItem  
Application.DisplayAlerts = False  
Set SM = OL.CreateItem(olMailItem)  
SM.Attachments.Add (FullNameOS)  
SM.To = ThisWorkbook.Sheets("Ruling").Range("SendMailTo").Value  
SM.CC = ThisWorkbook.Sheets("Ruling").Range("SendMailCC").Value  
SM.Subject = "Сравнительный анализ результатов планирования за  " & rPerStr  
SM.Display  
 
Когда в поле SM.To подставляется "Иванов И А; Петров В.В." - нет вопросов, аутлук адресатов распознает и подчеркивает.  
Но когда подставляется "Список рассылки" (содержащий тех же "Иванов И А; Петров В.В." ), то он остается просто текстом. Нужно или "проверить имена" нажать или кусрор в поле То поставить и чего-нибудь нажать. Тогда аутлук "понимает" и подчеркивает.  
 
Вопрос. Как аутглюку сообщить, что это не просто адрес, а список рассылки?  
Или программно нажать "проверить имена"?
Bite my shiny metal ass!      
Условное форматирование 2007
 
Мне не на чем теперь проверить.  
Как отображается условное форматирование 2007-го в 2003-ем?  
Не всякие новомодные стрелочки, а просто когда правил много.  
 
И вопрос номер 2.  
Как условное форматирование перевести в обычное? Чтобы уменьшить вес отчета и его "ворочаемость". Я формулы убиваю, оставляя значения. Вот и условные форматы хотелось убить, так как цифры уже не изменяться.
Bite my shiny metal ass!      
OFFTOP. У ворда 2007 новый год?
 
При выделении* мышью текста, последний выделяется разными цветами. Иногда двумя, а иногда аж 4 разных, причем одного из них от фона не практически отличить.  
Это баг, фича или ворд так празнует новый год.  
 
______  
* Выделение показано зеленой скобкой на скрине
Bite my shiny metal ass!      
Модальность окна открываемой книги
 
Всегда использую один код для открытия книги:  
Set wb = Workbooks.Open(SourcePath & fName)  
При этом, если поставить далее макрос на паузу (любым способом) книга wb становится модальной по отношению к ThisWorkbook. Т.е. пока макрос на паузе или wb открыта, окно ThisWorkbook не хочет выходить на передний план.  
 
Или не становится модальной.  
От чего это зависит - не пойму.
Bite my shiny metal ass!      
PivotCaches.Item(1).SourceData
 
Когда в кэше только одна сводная, то без разницы как писать:  
ActiveSheet.PivotTables("СводнаяТаблица1").SourceData = "[Книга3.xls]Лист1!R1C1:R323C9"
или  
ActiveWorkbook.PivotCaches.Item(1).SourceData = "[Книга3.xls]Лист1!R1C1:R323C9"
 
А вот когда две и более таблицы построены на одном кэше, то    
ActiveWorkbook.PivotCaches.Item(1).SourceData = "[Книга3.xls]Лист1!R1C1:R323C9"
вызывает ошибку, а  
ActiveSheet.PivotTables("СводнаяТаблица1").SourceData = "[Книга3.xls]Лист1!R1C1:R323C9"
работает, но таблицы становятся на независимых кэшах.  
 
Абыдно, да? ©  
 
Или без эмоций:  
Как одним махом (или не одним) поменять .SourceData у всех таблиц на одном кэше?
Bite my shiny metal ass!      
Незаконченные вычисления
 
При обновлении кэша сводной таблицы с источником в другом файле про этот источник выдется сообщение (см. вложение).  
Это о чем?  
И как его избежать?  
Application.DisplayAlerts = False - не предлагать: мне другие сообщения важны.
Bite my shiny metal ass!      
Есть ли такая встроенная встроенная функция?
 
Дано: эмпирическая зависимость функции С от переменных А и В, живет в таблице. Есть некоторые значения А и В, которые точно не совпадают с значениями в таблице. Найти функцию С я могу с помощью какой-либо интерполяции (хоть линейной) или экстраполяции.  
Но может есть встроенная функция? Что-то типа:  
=интерполяция(F1;F2;A2:C21)
Bite my shiny metal ass!      
Самопроизвольное изменение пути к данным в сводной таблице.
 
Дано: на сетевом диске файл "оперативный_отчет.xls" с кучей сводных, построенных на основе других файлов на том же сетевом диске. Соответственно свойство SourceData имеет следующий вид:  
'Y:\Corps\2010\02\РСВ\[эффект.xls]БД'!R3C1:R35000C20
И кочуют эти файлы из месяца в месяц. Есть макрос, который меняет путь на ...\2010\03\...  
И вот этот макрос споткнулся "увидев" такой путь:  
'\Corps\2010\02\РСВ\[эффект.xls]БД'!R3C1:R35000C20
 
Я сохранил файл "оперативный_отчет.xls" к себе на рабочий стол, пусть стал нормального вида Y:\Corps\2010\02\...  
Перенес обратно на Y:, снова имею \Corps\2010\02\...  
 
Я понимаю, что путь относительный, но он был долго абсолютным и хочется его вернуть взад.  
 
 
Важно! Забить на все и изменить руками путь не предлагать! Сводных в файле больше сотни, многие из них построены на общем кэше и ручное изменение пути приведет к увеличению объема файла в дцать раз.  
Кроме того, хочется избежать такой байды в дальнейшем.
Bite my shiny metal ass!      
[off] Когда Вам совсем будет нечем занятся...
 

... попробуйте повторить: http://www.youtube.com/watch?v=4YG_WWZYqUs Только макрорекордер не забудьте включить, что бы менюшки не вылетал потом.

Bite my shiny metal ass!      
Как передать в UDF трехмерную ссылку?
 
Вопрос навеян темой http://www.planetaexcel.ru/forum.php?thread_id=12798  
Собственно как записать что-то типа =VLookUpAllSheets("w";'Лист1:Лист4'!A1:E10;2)  
Вижу, что никак. Но вдруг...
Bite my shiny metal ass!      
ОффТоп глюк ворда.
 
Кто-нибудь может объяснить этот бред?  
http://slil.ru/28360662  
120 КБ  
Счас буду сносить 2007  
Хотя в 2003 ворде творится тоже самое.  
шрифт гарамонд сносил и брал с соседнего компа.  
С другими шрифтами такого не происходит. Все шрифты, разумеется, не проверял.
Bite my shiny metal ass!      
2007 офис. List Property. Как задать?
 
Было в 2003 так:  
UserForm1.ListBox1.List = Range("A2").Resize(UsedRange.Count - 1, 1).Value  
UserForm1.Show (False)  
Все работало.  
в 2007 оказалось, что Could not set the List property. Вдруг стал Invalid property array index.  
Читаю справку:  
object.List( row, column ) [= Variant]
row Required. An integer with a range from 0 to one less than the number of entries in the list.    
column Required. An integer with a range from 0 to one less than the number of columns.    
 
Думаю, ладно раз Required, то подставим. (Хотя при открывании скобки после List аргументы идут в квадратных скобках - так они Optional или Required?)  
 
Ваяю цикл - ошибка та же.  
For iList = 0 To Range("A2").Resize(UsedRange.Count - 1, 1).Count - 1  
UserForm1.ListBox1.List(iList, 0) = Range("A2").Resize(UsedRange.Count - 1, 1).Cells(iList + 1, 1).Value  
Next  
 
.RowSource нельзя использовать, так как потом удалять не дает элементы списка.
Bite my shiny metal ass!      
Страницы: 1 2 След.
Наверх