P.S. Но Вы же понимаете, что это хорошо работает только если поддерживаются динамические массивы? Иначе можно попробовать вводить как формулу массива в несколько ячеек.
При формирование письма с помощью VBA макрос в Excel в Outlook формат даты отображается как общий., При формирование письма с помощью VBA макрос в Excel в Outlook формат даты отображается как общий.
Что-то скрин как-то не очень похож на Excel для Windows(а именно в Windows привязка кодов идет к имени книг в этом окне, а не к VBProject). Какая версия Excel используется? Какая ОС?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Выше по ссылке вроде бы рабочий вариант приложен без всяких вот этих вот Кусочек, отвечающий за получение подписи:
Код
'обязательно отображаем письмо ДО отправки и добавления своего текста
'без этого может не подгрузиться подпись
.Display
'добавляем к пустому письму с уже прогруженной подписью свой текст(sBody)
.HTMLBody = sBody & .HTMLBody
В Вашем случае вместо sBody надо просто поставить YourHTMLBody.
Если честно - читать и понять происходящее сложно. Адреса ячеек в описании ничего общего с примером не имеют. Если конечная цель разбить по разделителю - почему не применить Данные -Текст по столбцам? Если такой вариант тоже не подходит - озвучьте допустимую версию Excel. В новых версиях это сделать можно достаточно просто через функции вроде ТЕКСТДО.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
т.е. сотня файлов типа "ОсновнаяКнига" с такими ссылками? Начинайте изучать макросы - с их помощью это можно сделать за минуту Жмете кнопочку - указываете папку с этими файлами(если они все в одной папке, конечно). Код переберет все эти файлы и заменит в них во всех листах ссылки с полных путей на краткие. Правда, есть нюанс: перед этим надо будет открыть все "КнигиИсточники" для этих файлов.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Zozel написал: если открыта книга на которую ссылается ячейка, то при закрытии ссылка останется "Относительной",
ни разу такого не встречал Т.е. когда Вы закрываете книгу источник у Вас в ячейке ссылки на эту книгу не выглядят как конкретный путь к этой книге? Мы может опять про разное что-то говорим? Может Вы имеете ввиду, что закрываете саму книгу со ссылками, а не книгу-источник, на которую ведут ссылки? И даже в этом случае такой механизм нет-нет да будет давать сбой и Excel в какой-то момент может прописать последний известный путь к книге, а не искать среди открытых.
т.е. Вам не в одной книге это надо сделать, что ли? Просто вроде бы достаточно одной такой замены по всей книге(в параметрах можно делать замену во всех листах разом).
ponrussell написал: Данные-получить данные-из файла-из папки. Объединить и загрузить
Это новое подключение или существующее? Может надо просто изменить способ выгрузки для запроса, т.к. сейчас установлено выгружать в таблицу, а надо "только подключение"?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Zozel написал: но все лежат в той же папке, что и рабочая книга
Да, Excel не умеет создавать относительные пути. Никак Вы этого не избежите, всегда после закрытия книги с ячейками будет преобразование в абсолютную адресацию к папке. Быстро можно заменить с помощью Ctrl+F так(при открытом файле источнике): найти: *[ Заменить на: [ Убедиться, что в параметрах поиска-замены снята галочка с "Ячейка целиком" и поиск идет по формулам.
SergeyD, Вы бы файлик приложили - может быть другой выход из ситуации нашелся бы... Потому что не до конца понятно - ячейки всегда идут подряд или может быть в итоге рваный диапазон из более чем одной непрерывной области? Если всегда подряд - вообще проблем нет:
Код
=ИНДЕКС(ДВССЫЛ("A1:A4");1)
если рваный - надо изобретать что-то.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
написал: тут говорится про ссылки на ячейки, а у меня проблема с ссылками на книги
а в чем разница, извините? В других книгах нет ячеек?
Цитата
Zozel написал: $A$1 против C:User/desctop/papka/papkavpapke/нужный файл.xlsx
речь точно про ссылки или это пути какие-то? Может ГИПЕРССЫЛКИ? По сути у Вас ссылки на папки, верно? Тогда здесь надо как минимум видеть файл, в котором прописаны эти все "ссылки", чтобы понимать, что вообще надо корректировать.
Наличие библиотеки PDF принтера можно проверить так:
Код
If Dir(Environ("commonprogramfiles") & "\Microsoft Shared\OFFICE" & Format(Val(Application.Version), "00") & "\EXP_PDF.DLL") = "" Then
msgbox "Виртуальный PDF принтер не доступен!"
end if
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Это значит, что установлен запрет на создание папки. Как минимум, из под VBA или из Excel это делать запрещено. Попробуйте вручную создать эту папку и запустить макрос. А по хорошему перед созданием папки надо проверять необходимость создания - вдруг папка такая уже существует. Тогда попытка создания так же может вызывать ошибку. В итоге надо как-то так:
Код
If Dir(ActiveWorkbook.Path & "\" & REPORTS_FOLDER, 16) = "" Then
MkDir ActiveWorkbook.Path & "\" & REPORTS_FOLDER
End If
И опять же - если будет выдавать ошибку, то создайте папку вручную и запустите макрос. Если отработает - ищите причину отказа в доступе(может это сетевой ресурс и тогда лучше будет через FSO все это делать).
john22255 написал: наверное ошибку бы выдавал макрос
нет. Уберите On Error Resume Next и проверьте работу. По идее, Outlook можно вызывать всегда методом CreateObject("Outlook.Application") - если он уже запущен, будет подключение к существующему экземпляру. Т.е. проверка через GetObject совершенно не обязательна и для проверки работы кода этот блок можно убрать, оставив лишь нужное:
Код
Dim objOutlookApp As Object, objMail As Object
Dim sTo As String, sSubject As String, sBody As String, sAttachment As String
Application.ScreenUpdating = False
Set objOutlookApp = CreateObject("Outlook.Application")
objOutlookApp.Session.Logon
Set objMail = objOutlookApp.CreateItem(0) 'создаем новое сообщение
Возможно, Outlook конфликтует с 2007 офисом или просто "криво" установлен и в итоге подключения просто не происходит. Тоже самое с PDF - посмотрите, нет ли где выше по коду On Error Resume Next и уберите(или закомментируйте). В 2007 может экспорт не работать, если не подключен специальный PDF принтер. Начиная с 2010 он уже как бы встроен, а в 2007 вроде бы надо было проверять, что он точно есть. Или установить все доступные для офиса обновления - в каком-то из них накатывался этот принтер вроде бы.
можно поподробнее? Что именно не можете найти? Саму формулу Вы нам продемонстрировали. Т.е. она известна. Судя по последнему сообщению - ячейку с ней тоже нашли. Что Вы ищете и что хотите отредактировать?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
А еще можно просто макрос написать с показом диалога открытия файла. Выбираем файл и все - там уже через Workbooks.Open прописываем пароль. Т.е. по факту все сведется к нажатию кнопки и указания файла для открытия.
Код
Sub ShowGetOpenDialod()
Dim avFiles
'по умолчанию к выбору доступны файлы Excel(xls,xlsx,xlsm,xlsb)
avFiles = Application.GetOpenFilename _
("Excel files(*.xls*),*.xls*", 1, "Выбрать Excel файлы", , False)
If VarType(avFiles) = vbBoolean Then
'была нажата кнопка отмены - выход из процедуры
Exit Sub
End If
Workbooks.Open avFiles, Password:="1234"
End Sub
написал: Если было изменение и запись не нужна то все равно будет принудительно записано
да, это цена подобного решения. По сути нельзя 100% определить, что делал пользователь и в зависимости от этого принять корректное решение о сохранении. Ведь при открытии книги изменения уже были - отображались листы. А следовательно - их надо скрыть. Можно, конечно, манипулировать свойством Saved - но нюансов слишком много. Не стал загромождать код. Все же в основе статьи лежит простая затея - показать возможные варианты и принцип. А докручивать можно сколько угодно Возможно, позже расширю статью: дополню описание со всеми нюансами и т.д.
Автоматическое обновление сводной таблицы из постоянно пополняемой таблицы, Надо чтобы итоговая таблица содержала свод позиций с другого листа с добавляемыми строками
Andrew Rubanov написал: подтягивание в Excel необходимых данных
а необходимые данные - это что? Можно же сделать еще один запрос в PQ на основании существующего, отфильтровать там только нужное(или иные обработки сделать) и уже это выгружать на лист.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Да и версия макрорекордера нормально работает, если ссылки привести в порядок. У Вас записано RefersToR1C1, значит ссылки должны быть в стиле R1C1, а Вы пытаетесь передать в стиле А1. Отсюда и проблема. Если записать так:
Код
Sub Добавить_имена()
Worksheets("График").Names.Add Name:="namecount", RefersTo:="=График!$CJ$15:$CJ$4200"
Worksheets("График").Names.Add Name:="namecount2", RefersTo:="=График!$CM$15:$CM$4200"
Worksheets("График").Names.Add Name:="namecount3", RefersTo:="=График!$CS$15:$CS$4200"
Worksheets("График").Names.Add Name:="namecount4", RefersTo:="=График!$BP$15:$BP$4200"
Worksheets("График").Names.Add Name:="namelist", RefersTo:="=График!$CJ$15:$CK$4200"
Worksheets("График").Names.Add Name:="namelist2", RefersTo:="=График!$CM$15:$CM$4200"
Worksheets("График").Names.Add Name:="namelist3", RefersTo:="=График!$CS$15:$CT$4200"
Worksheets("График").Names.Add Name:="namelist4", RefersTo:="=График!$BP$15:$CBQ$4200"
End Sub
все будет работать Или ссылки указывать в стиле R1C1(на примере одной - остальные лениво переделывать):
olege1983 написал: Макрорекордер выдал Activeworkbook.Names и вот эту фразу я изменил на Worksheets
если нет понимания разницы - лучше оставить Activeworkbook. В том варианте, в котором у Вас сейчас - созданные имена создаются с областью видимости в листе "График" и будут доступны в итоге исключительно на этом листе. Если же создавать через Activeworkbook.Names - имена будут доступны для применения в любом листе этой книги.
Так очевидно же - данные просто не найдены. А когда убираете 0 - идет поиск методом интервального просмотра. Напишите, что именно ищете и определитесь что хотите делать в случаях, если данные не найдены - тогда можно будет подсказать более конкретно что-то. Возможно, надо Вы пытаетесь искать часть слова, но функции указываете искать точное совпадение. Если надо найти строку, начинающуюся на "Присоед", то делать правильно так:
Есть у меня подозрение, зачем это сделано. Не факт, но других идей нет. По сути имя листа добавляется как правило в случаях, когда ссылка ведет на ДРУГОЙ лист или книгу. И если мы отсортируем таблицу со ссылками, а ссылки сортировать не станем - они могут в этом случае перестать ассоциироваться с нужными данными. Например, если мы ссылаемся на конкретную строку другого листа для получения из неё нужных данных. И для каждой строки текущей таблицы - это разная строка. При этом формула может не зависеть вообще от данных в текущей таблице - это ведь может быть совершенно самостоятельная формула, которая просто "тащит" показатель из другого листа просто на основании того, что пользователь решил, что для строки "Иван" текущей таблицы надо взять строку "7" листа "коэффициенты". И если мы не будем сортировать такие формулы - их ассоциации просто собьются. Понятно, что более-менее продвинутые пользователи не делают такой бредовины, но ведь и Excel когда-то разрабатывали не для профи. Другой вопрос, почему до сих пор не реализован механизм распознавания ссылок с именем листа текущего Думаю, просто забили на это дело, ибо общая статистика ошибок из-за этого бага явно незначительная.
P.S. Чтобы более понятно что я имею ввиду - добавьте еще один столбец в листе "Неправильно" и пропишите в нем на все значения формулы типа:
Код
=Правильно!A1
Т.е. ссылка на ячейку другого листа, которая соответствует конкретному имени. Отсортируйте таблицу. Всё будет отсортировано корректно с точки зрения соответствия данных - т.е. Петя напротив Пети, Вася напротив Васи. При этом ссылки изменятся.