Аппетиты растут, с познанием новых возможностей. Теперь очень нужно следующее: Некий макрос создаёт файл "Отчёт.xlsb" в конкретную папку. Очень нужно, чтобы после слова "Отчёт" (в имени файла) добавлялось значение ячейки (имеет имя) или указать адрес, и текущий месяц (Март 2010) который тоже находится в определённой ячейке. Другими словами, нужно добавить к заданному имени - значения двух разных ячеек. Пробовал переписать код "Резервного копирования". Не получилось. Видел похожие вопросы. Ответов не нашёл
Konstanta, ведь и в правду не однократно обсуждалось. Если Вы все это уже просмотрели и все равно не выходит каменный цветок - приложите файл с кодом. Вам его поправят быстрее чем на слух искать ошибку:)
Спасибо Hugo и все ! Я начал со ссылки http://www.planetaexcel.ru/tip.php?aid=72 Но правда не понятно мне. Вам хорошо рассуждать. Вы профи в этом. Но проявите снисходительность ... :)
Я попробую последний код. Хотя уже приготовил файл. Не получится, выложу. Спасибо!
Уже писал, переписывал всю голову сломал... вот файлик: описание проблемы там. Код, предложенный уважаемым Hugo тоже пробовал. Да, поначалу сохранил. Потом вообще запутался. Он мне стал сохранять по другому пути но с именем False.xlsx В то время как мне нужно в конкретную папку с нужным именем. В общем файл прикрепил в первоначальном виде. Да файлик xlsm 2007 MS Спасибо!
Konstanta, не нашел Ваш макрос:( Что сразу заметно - у Вас в столбце В ДАТА с примененным форматом, а Вам надо строковое/ тестовое значение. Использование некоторых символов в имени файла, включая кавычки, - ЗАПРЕЩЕНО. Может у Вас стоит пропуск ошибок On Error Resume Next? Отключите его и Ваш код вывалится в отладку. Что то и сам с удалением кавычек в ВБА запутался - решил по простецки через формулу RC1. Держите вариант. И обратите внимание в примере кода - крайний слеш формируется в строке макроса, поэтому при написании пути для сохранения крайняя ПАПКА не закрывается слешем.
Проблема в том, что в рабочем файле макросов много. (Кстати, есть возможность обозвать модули именами? А то я ищу каждый раз открывая поочерёдно каждый). Вот сохраняя файл для отправки, видимо удалил не тот макрос. Голова уже пухнет...
Вот фрагмент кода, в котором проблема: Sub Выгрузить_отчёт() ' Sheets("Экспорт").Select Sheets("Экспорт").Copy ActiveWorkbook.SaveAs Filename:="C:\Оперативный анализ\Экспорт\Отчёт.xlsb", _ FileFormat:=xlExcel12, CreateBackup:=False ActiveWindow.Close End Sub Я пытался сюда вписать все присланные варианты. Получается полный хаос.
Спасибо Hugo! Уже большой прогресс! Сделал имя. Одна загвоздка: в моём файле месяц представлен как Март 2010. Беда в том, что это дата в таком формате. То есть макрос берёт 31.03.2010. Естественно он в имя файла указывает дату. А (наверное) можно "сказать ему, чтобы он оставил значение как текст?
Симотрел пример ( в прикреплённом файле). Он как архив zip сохранился. Открыл, там как из "Опена" всё. Отдельные папочки, файлики. Поглядел, внутрь, ничего не понял.
Рабочий код: PartOfName = ActiveWorkbook.ActiveSheet.[d1] & " " & ActiveWorkbook.ActiveSheet.[b1] ActiveWorkbook.SaveAs Filename:="C:\Оперативный анализ\Экспорт\Отчёт " & PartOfName & ".xlsb", FileFormat:=xlExcel12, CreateBackup:=False ActiveWindow.Close Он вместо желаемой "Март 2010", выдаёт 31.03.2010 Куда вписать и что? Я пока затрудняюсь.
Я попытался в эту самую ячейку (откуда макрос берёт месяц) превратить в текстовое значение. Но там (заноза) формула у меня стоит. Она берёт дату из имени "Конец периода". Может можно при выгрузке в новый файл, это значение преобразовать в текст? Пытался через спец. вставку. Не выходит (точнее он выдаёт именно 31.03.2010). Хотя это был бы выход (и не плохой) я бы это значение потом ещё и фильтровал по названиям месяцев...
Сегодня получилось удалить кавычки и без формулы листа. Доработанная версия файла и код прилагаются:) Так, как автор использует 2007 - файл в этом формате.
Option Explicit
Sub Backup_Workbook() Dim ishWB As Workbook Dim newWB As Workbook Dim x As String, strPath As String, FileNameXls As String 'переменные пути и имени файла Dim strFirma As String, strDate As String Dim iNum As Integer
Set ishWB = ThisWorkbook 'книга из которой запущен макрос Set newWB = Workbooks.Add 'новая книга
ishWB.Sheets("Экспорт").Copy Before:=newWB.Sheets(1) 'копируем лист отчета в новую книгу
iNum = Val(Application.Version) 'проверка версии Ехс 'указываем путь (папку) для сохранения файла strPath = "F:\DownLoad\тест" 'strPath = "C:\Оперативный анализ\Экспорт" 'если нужно сохранить в ту же папку что и исходный файл с макросом 'strPath = ishWB.Path 'определяем путь к папке из которой запущен файл
'обработка ошибки On Error Resume Next x = GetAttr(strPath) And 0 If Err = 0 Then ' если путь существует - сохраняем копию книги strDate = Format([c1], "mmmm yyyy") 'преобразуем дату в текст 'сосчитываем имя фирмы из ячейки strFirma = [d1].Text 'записали значение в переменную 'удаляем кавычки - они запрещены в имени файла strFirma = Trim(Replace(strFirma, """", "")) strFirma = Replace(strFirma, Chr(171), "") strFirma = Trim(Replace(strFirma, Chr(187), ""))
'формируем полный путь и имя файла для сохранения FileNameXls = strPath & "\" & "Отчёт " & strFirma & " " & strDate & ".xlsb" 'сохраняем книгу ActiveWorkbook.SaveAs Filename:=FileNameXls, FileFormat:= _ xlExcel12, CreateBackup:=False Else 'если путь не существует - выводим сообщение
MsgBox "Папка " & strPath & " недоступна или не существует!", vbCritical
Спасибо за содействие! P/s Igor67 благодарю Вас! У меня уже работает код. Хотя в нём нет такой защиты от ошибок, как в Вашем. Я сохранил его. Покопаюсь обязательно. Попробую. Мне это нужно самому.