Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/30: Рейтинг темы: голосов - 30, средняя оценка - 4.93
 Аватар для каролинка
0 / 0 / 0
Регистрация: 28.10.2012
Сообщений: 152

Бэкап открытой книги Excel

04.12.2012, 17:32. Показов 6110. Ответов 17

Студворк — интернет-сервис помощи студентам
Всем привет!
Может кто мне подскажет, как с помощью ВБА сделать бэкап открытой книги эксель. у нас есть файл эксель, мы его открываем, жмем кнопку и создается копия этого файла в указанной папке.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.12.2012, 17:32
Ответы с готовыми решениями:

Поиск открытой книги Excel Из Access
Помогите, пожалуйста, процедура, написанная Excele находит открытые книги, а в любом другом приложении, например Accese, не находит... ...

Данные из другой открытой книги
Есть Книга1 (поля "наименование" и "цена") и Книга2, с идентичными полями. Необходимо в Книге2 сравнить сначала наименования с теми, что...

Считать значение из открытой книги
Доброго времени суток , помогите написать макрос на открытие файла экселя для того что бы взять значение из вновь открытого файла и...

17
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,576
04.12.2012, 18:13
Visual Basic
1
2
3
4
5
6
7
Sub Макрос1()
    
    Const sPath As String = "C:\Users\User\Desktop\BackUp.xlsx"
    
    ActiveWorkbook.SaveCopyAs sPath
    
End Sub
2
 Аватар для каролинка
0 / 0 / 0
Регистрация: 28.10.2012
Сообщений: 152
04.12.2012, 20:00  [ТС]
о, надо проверить

Скрипт, а если мне нужно чтобы в название ставилось имя этого файла_дата_параметр_из_книги?
это возможно вообще?
0
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,576
04.12.2012, 20:05
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Sub Макрос1()
    
    Dim sPath As String
    
    'Делаем путь файла.
    sPath = ActiveWorkbook.Path & "\"
    
    'Делаем имя файла.
    sPath = sPath & Date & ".xlsx"
    
    'Делаем копию активной книги.
    ActiveWorkbook.SaveCopyAs sPath
    
End Sub
1
 Аватар для каролинка
0 / 0 / 0
Регистрация: 28.10.2012
Сообщений: 152
04.12.2012, 22:09  [ТС]
Скрипт, а как еще название добавить к дате?
0
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
04.12.2012, 22:34
Visual Basic
1
2
3
4
5
6
7
8
9
10
Sub bb()
Dim p$, s$, i&
p = ActiveWorkbook.FullName 'полный путь
i = InStrRev(p, ".")        'позиция последней точки (перед расширением)
s = Left(p, i - 1) & "_" & Date & "_" & [A1] & "_" & Mid(p, i)
                            'сформированный новый путь
                            '"параметр_из_книги" - ячейка А1 активного листа
'MsgBox s 'контроль пути сохранения
ActiveWorkbook.SaveCopyAs s
End Sub
1
 Аватар для каролинка
0 / 0 / 0
Регистрация: 28.10.2012
Сообщений: 152
04.12.2012, 22:40  [ТС]
Казанский, чтото оно мне какието сообщения выдает и пытается сохранить и закрыть открытую книгу
0
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
04.12.2012, 22:49
Цитата Сообщение от каролинка Посмотреть сообщение
оно мне какието сообщения выдает
Не догадываетесь - какие, и как это отключить?

Поправил код выше.
1
 Аватар для каролинка
0 / 0 / 0
Регистрация: 28.10.2012
Сообщений: 152
04.12.2012, 23:38  [ТС]
уже вроде все ок)

Добавлено через 25 минут
Казанский, а как в вашем коде указать путь к папке?
0
Почетный модератор
 Аватар для Памирыч
23251 / 9163 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
05.12.2012, 08:54
Цитата Сообщение от каролинка Посмотреть сообщение
а как
Пора включаться в процесс и Вам.
0
 Аватар для каролинка
0 / 0 / 0
Регистрация: 28.10.2012
Сообщений: 152
06.12.2012, 16:08  [ТС]
В общем, на данный момент код такой вышел

Visual Basic
1
2
3
4
5
6
7
8
     par1 = ThisWorkbook.Worksheets("Parameters").Range("A8").Value
     
p = par1 & ThisWorkbook.Name 
i1 = InStrRev(p, ".")
m = ThisWorkbook.Worksheets("WEEKSHEET").Range("F1").Value
s = Left(p, i1 - 1) & "_" & Date & "_" & [m] & "_" & Mid(p, i1)
                      
ActiveWorkbook.SaveCopyAs s

вопрос: если ли способ проверить ссылку? мы копируем в папку, путь указан в А8. как проверить есть ли такая папка?
0
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,576
06.12.2012, 17:41
Можно попробовать использовать средство языка программирования VBA - функцию Dir. Но я не понимаю, как с помощью неё узнать: существует папка или нет.

Поэтому предлагаю использование специальной библиотеки для работы с папками и файлами: Windows Script Host Object Model. При использоании этой библиотеки всё ясно и понятно.

Ранняя связка (нужно подлкючить библиотеку: Tools - References... - Windows Script Host Object Model):
Кликните здесь для просмотра всего текста
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Sub Procedure_3()
 
    'Создаём переменную "oFSO" и объект "FileSystemObject" для работы с папками и файлами.   
    Dim oFSO As New IWshRuntimeLibrary.FileSystemObject
   
    Dim sPath As String
    
    'Здесь нужно указать путь папки.
    sPath = ""
    
    If oFSO.FolderExists(sPath) = False Then
        MsgBox "Папки нет!", vbCritical
        Exit Sub
    End If
 
End Sub

Поздняя связка:
Кликните здесь для просмотра всего текста
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Sub Procedure_4()
    
    Dim oFSO As Object
    Dim sPath As String
    
    'Здесь нужно указать путь папки.
    sPath = ""
    
    'Создаём объект "FileSystemObject" для работы с папками и файлами.
    Set oFSO = CreateObject(Class:="Scripting.FileSystemObject")
    
    If oFSO.FolderExists(sPath) = False Then
        MsgBox "Папки нет!", vbCritical
        Exit Sub
    End If
 
End Sub
1
 Аватар для каролинка
0 / 0 / 0
Регистрация: 28.10.2012
Сообщений: 152
07.12.2012, 14:00  [ТС]
Скрипт, спасибо, все приспособила и работает как надо!)
0
 Аватар для каролинка
0 / 0 / 0
Регистрация: 28.10.2012
Сообщений: 152
12.12.2012, 13:49  [ТС]
еще по этой теме вопрос, может кто подскажет
как сделать так, чтобы если второй раз копируем один и тот же файл, то добавлялась единичка к названию, например. как у виндовс с папками: если есть уже новая папка, то создает новая папка(1)

Я пробовала так:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
     par1 = ThisWorkbook.Worksheets("Parameters").Range("A8").Value
   
If oFSO.FolderExists(par1) = True Then
          
p = par1 & ThisWorkbook.Name 'iieiue ioou
i1 = InStrRev(p, ".")
 
m = ThisWorkbook.Worksheets("WEEKSHEET").Range("F1").Value
m1 = ThisWorkbook.Worksheets("WEEKSHEET").Range("J1").Value
For q=1 to 10
s = Left(p, i1 - 1) & "_" & [m1] & "_" & q  & "_" & [m] & "_" & Mid(p, i1)
Next q
ActiveWorkbook.SaveCopyAs s
но не получается то, что надо
0
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,576
12.12.2012, 14:16
каролинка, в цикле проверяйте, существует файл с таким именем нет. На каждом витке цикла увеличивайте переменную на единицу. Если не существует, то добавляете полученное число к имени файла.
1
 Аватар для каролинка
0 / 0 / 0
Регистрация: 28.10.2012
Сообщений: 152
13.12.2012, 12:47  [ТС]
Скрипт, спасибо, сообразила и заработало

Добавлено через 22 часа 11 минут
Цитата Сообщение от Казанский Посмотреть сообщение
s = Left(p, i - 1) & "_" & Date & "_" & [A1] & "_" & Mid(p, i)
подскажите как мне избавиться от этого Left , чтобы вместо имени файла брался параметр из листа
я пыталась подставлять так
Visual Basic
1
2
3
4
5
p = par1 & ThisWorkbook.Worksheets("WEEKSHEET").Range("B3").Value
 
i1 = InStrRev(p, ".")
 
s = Left(p, i1 - 1) & "_" & [m] & "_" & Year(ThisWorkbook.Worksheets("WEEKSHEET").Range("W1").Value) & "_" & WorksheetFunction.WeekNum(ThisWorkbook.Worksheets("WEEKSHEET").Range("W1").Value) & "_" & Mid(p, i1)
но так не работает...(
0
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,576
13.12.2012, 13:13
Visual Basic
1
2
3
4
5
6
7
8
p = par1 & ThisWorkbook.Worksheets("WEEKSHEET").Range("B3").Value
 
i1 = InStrRev(p, ".")
 
s = p & "_" & [m] & "_" & _
    Year(ThisWorkbook.Worksheets("WEEKSHEET").Range("W1").Value) & "_" & _
    WorksheetFunction.WeekNum(ThisWorkbook.Worksheets("WEEKSHEET").Range("W1").Value) & "_" & _
    Mid(p, i1)
1
 Аватар для каролинка
0 / 0 / 0
Регистрация: 28.10.2012
Сообщений: 152
13.12.2012, 14:32  [ТС]
Скрипт, спасибо, но оно не хотело работать с ThisWorkbook.Worksheets("WEEKSHEET").Ran ge("B3").Value.
и я сообразила так сделать:
Visual Basic
1
s = par1 & "_" & [m] & "_" & Year(ThisWorkbook.Worksheets("WEEKSHEET").Range("W1").Value) & "_" & WorksheetFunction.WeekNum(ThisWorkbook.Worksheets("WEEKSHEET").Range("W1").Value) & "_" & Mid(p, i1)
где par1- адрес папки был, а m - значение ячейки с фио
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.12.2012, 14:32
Помогаю со студенческими работами здесь

Обращение к ячейкам открытой книги (не текущей)
Макрос должен запускаться, спрашивать - какой файл ему взять. Открыть его, разделить определенную ячейку на 1000, сохранить файл. ...

Экспорт функции из другой открытой книги
Нужна помощь.Есть две открытые книги. В 1ой написан макрос и функция. 2ая пустая, та книга, в которой нужно применить макрос из первой...

Копирование вкладки из одной открытой книги в другую
Есть две книги которым в коде назначены переменные, но если в первый раз копирование проходит, то уже на втором копирование выдает ошибку....

VBA может узнать имя неактивной открытой книги и сделать её активной?
Привет! Столкнулся со следующей проблемой: Открыто две книги. Имя первой известно (она активная), и есть еще одна открытая книга, имя...

Всю информацию с открытой HTML страницы в интернете перекинуть в таблицу Excel
Здравствуйте, подскажите: как написать макрос чтобы вся информация с открытой HTML страницы в интернете перекидывалась в таблицу Excela,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru