Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.03.2015, 17:19   #1
Bezdar
Форумчанин
 
Регистрация: 03.06.2008
Сообщений: 213
По умолчанию как программно записать документ поверх этого же но под другим именем

Здравствуйте, уважаемые профи!
Подскажите, пожалуйста, как программно записать документ поверх этого же, но под другим именем. Например, есть "Книга1". Лежит она в опеределенной папке на ПМЖ, но гуляет между пользователями. Как программно сохранить эту же книгу в этой же папке, но под другим именем? Сейчас она "Книга1", потом она же будет "Книга1_1", потом "Книга1_2" и тыды. Чего-то я как-то и не соображу
Помажите.
Спасибо!
Bezdar вне форума Ответить с цитированием
Старый 24.03.2015, 18:17   #2
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Пробуйте функцию
Код:
Function NewName() As String
Dim n$, i&, j&, ext$
  n = ThisWorkbook.FullName
  i = InStrRev(n, ".")
  ext = Mid$(n, i)                        'расширение с точкой
  n = Left$(n, i - 1)                     'путь без расширения
nameWoExt:
  i = InStrRev(n, "_")
  If i Then                               'есть "_"
    If IsNumeric(Mid$(n, i + 1)) Then     'после "_" номер
      j = Mid$(n, i + 1)
      n = Left$(n, i)
      Do
        j = j + 1
        NewName = n & j & ext
      Loop Until Dir(NewName) = ""
    Else: GoTo noNum
    End If
  Else
noNum:
    n = n & "_0"
    GoTo nameWoExt
  End If
End Function
По идее, для сохранения с новым именем надо выполнить
Код:
thisworkbook.SaveAs newname
exceleved@yandex.ru Яндекс.Деньги: 410011500007619

Последний раз редактировалось Казанский; 25.03.2015 в 01:54. Причина: доработал алгоритм
Казанский вне форума Ответить с цитированием
Старый 25.03.2015, 10:12   #3
Bezdar
Форумчанин
 
Регистрация: 03.06.2008
Сообщений: 213
По умолчанию

Спасибо!
Я, конечно, ничего не поняла. Тупо скопировала. Результат меня не порадовал. Мне нужно чтобы в папке была одна! единственная книга "Книга1" (она же либо будет "Книга1_1", либо будет "Книга1_2", либо будет "Книга1_3" и тыды). А не десять, и не двадцать книг с разными индексами.
Как то так
Bezdar вне форума Ответить с цитированием
Старый 25.03.2015, 11:06   #4
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Пробуйте. Возможно, надо будет ввести задержку между сохранением и удалением, особенно если это сетевой диск.
Код:
Sub SaveMeWithNewName()
Dim oldName$
  oldName = ThisWorkbook.FullName
  ThisWorkbook.SaveAs NewName
  Kill oldName
End Sub
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 25.03.2015, 12:23   #5
Bezdar
Форумчанин
 
Регистрация: 03.06.2008
Сообщений: 213
По умолчанию

Огромное спасибо!!!
Все слова знакомые. Все работает. Я тоже, грешным делом, подумывала об удалении старого файла. А тут вы с уже готовым решением!
А все таки заменить файл можно, не прибегая к услугам киллера? Так, для общего развития.
Bezdar вне форума Ответить с цитированием
Старый 25.03.2015, 13:15   #6
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Если делать макросом из другой книги, то можно переименовать закрытый файл
Код:
name староеимя новоеимя
Но я бы старые варианты вообще не удалял, а переносил в архив. Наверняка когда-нибудь да пригодится предыдущая версия.
Ну совсем старые раз в год можно вручную или кодом удалить, если напрягают.
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 25.03.2015 в 13:18.
Hugo121 вне форума Ответить с цитированием
Старый 25.03.2015, 13:22   #7
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Файл можно переименовать. Но для этого он не должен использоваться приложением, т.е. кодом в самОм файле это сделать невозможно. Значит, перед закрытием файла надо создать и запустить файл со скриптом (.bat или .vbs, .js), который через некоторое время (тут без задержки уже 100% не обойдешься) переименует файл, а потом удалит себя.
Можете попробовать
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 25.03.2015, 14:34   #8
Bezdar
Форумчанин
 
Регистрация: 03.06.2008
Сообщений: 213
По умолчанию

Спасибо!
Логику поняла, слишком заморочно (для меня, во всяком случае).
Про архив - дельная мысль.
Bezdar вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задание:распечатать массивы в две строки,один под другим?Как это сдел (№2 в картинке) Алан1114 Паскаль, Turbo Pascal, PascalABC.NET 1 30.01.2014 20:26
Окно и изображение поверх этого окна spamer Общие вопросы Delphi 4 14.12.2012 00:24
поиск и сохранение под другим именем fitc Общие вопросы Delphi 3 17.07.2009 18:50
Как скопировать проект под другим именем? Dimoney Свободное общение 4 17.12.2007 13:50
Как узнать под каким именем залогинился юзер? =LeonZone= Win Api 12 11.11.2007 16:03