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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.11.2009, 12:08   #1
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию Автокопирование на сетевой диск

Есть сетевой ИД диск с адресом \\192.168.2.50\public в нем папка "Ноябрь с файлом Ноябрь.xls" и есть такая же папка "Ноябрь с файлом Ноябрь.xls" на диске D, на ПК.
Как сделать, макрос, который при закрытии файла Ноябрь.xls на ПК, автоматом, сделает копию этого файла, Ноябрь.xls в сетевой диск, желательно без вопроса Файл с таким именем существует....
Пробовал, работать непосредственно в сетевом диске, но, связь с ним по Wi-Fi, очень долго сохраняет, любой сбой, что и произошло, и ошибка, невозможно открыть .xls.
valerij вне форума Ответить с цитированием
Старый 22.11.2009, 12:54   #2
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

Здраствуйте valerij.
наверное не судьба, если человек написавший 1,021 сообщение на этом форуме, так и не научился ни обращаться к участникам форуиа, ни здороваться.
Евгений.
Код:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Const s = "\\192.168.2.50\public\Ноябрь'Ноябрь.xls"
On Error Resume Next
ThisWorkbook.Save
If Len(Dir(s)) > 0 Then Kill s
If Err.Number = 0 Then ThisWorkbook.SaveAs Filename:=s, FileFormat:=xlNormal
End Sub
Teslenko_EA вне форума Ответить с цитированием
Старый 22.11.2009, 13:36   #3
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от Teslenko_EA Посмотреть сообщение
если человек написавший 1,021 сообщение
Найдите из этих сообщений, одно и все станет на место, а за макрос, спасибо, вечером, буду дома, проверюсь, отпишусь
valerij вне форума Ответить с цитированием
Старый 22.11.2009, 23:31   #4
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Женя, макрос работает, но требуется коррективы, а если не будет сетевого диска, я об этом не подумал, извиняюсь!!!
Сделаю две папки, одна на сетевом HDD, назову ее "Дом\Ноябрь\Ноябрь.xls", другая папка на ПК на диске D, назову ее "Офис\Ноябрь\Ноябрь.xls"
При закрытии должен дать выбор для сохранения, типа: "Сохранить в папку Дом", если жму ДА, то на сетевой, Нет, то на ПК, а вот если ваще не надо сохранять(часто такое), даже не знаю что и придумать в такой ситуации, три кнопки(Дом, Офис, Нет), что ли??

Может так!!!
А если макрос будет учитывать имя пользователя, например, если находится файл на ПК с именем Бух или Асер, то на Сетевой или Нет, а если имя х200, то на ПК или Нет

Последний раз редактировалось valerij; 22.11.2009 в 23:44.
valerij вне форума Ответить с цитированием
Старый 23.11.2009, 16:25   #5
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

Здраствуйте valerij.
возможно такой вариант кода подойдет:
Код:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Const s0 = "\\192.168.2.50\public\", s1 = "\\Home\public\", s2 = "Ноябрь'Ноябрь.xls"
Const sM = "Сохранить резервную копию ?"
Dim s$
On Error Resume Next
ThisWorkbook.Save
ChDir s0
If Err.Number = 0 Then s = s0 + s
If Not Err.Number = 0 Then Err.Clear: ChDir s1
If Not Err.Number = 0 Then
    'выход без запроса
ElseIf MsgBox(sM, vbQuestion + vbYesNo, Empty) = vbYes Then
    If Len(s) = 0 Then s = s1 + s
    If Len(Dir(s)) > 0 Then Kill s
    If Err.Number = 0 Then ThisWorkbook.SaveAs s, xlNormal
End If
End Sub
Евгений.
Teslenko_EA вне форума Ответить с цитированием
Старый 23.11.2009, 20:40   #6
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от Teslenko_EA Посмотреть сообщение
Код:
Const s0 = "\\192.168.2.50\public\", s1 = "\\Home\public\", s2 = "Ноябрь'Ноябрь.xls"
.
Женя, здравствуйте!!
1. объясните, почему s1 = "\\Home\public\", а не s1 = "\\public\Home\" ??
Что такое папка public, это не я ее создал, она, папка, создается программно в корне сетевого, если я просто наберу 192.168.2.50, то попаду в настройки сетевого диска, ну как в роутере.....
2. Я как раз, вставив Ваш код, нажал на закрытие книги, а сетевой, забыл включить, эксель завис и только когда я вкл. сетевой, тогда задал вопрос "Сохранить резервную копию"

Что бы Вы понимали, что мне надо, я объясню механизм "движения" файла Ноябрь.xls.
Есть у меня Дома, два ПК, за одним Бух, за другим Я, они, ПК, связаны с сетевым диском, Бух. сделав свою работу, должна сохранить файл на сетевом, Я, вечером открываю этот файл с сетевого, проверяю, делаю коррективы и опять сохраняю его на сетевой или если не требуется коррекции, просто закрыл, на вопрос Сохранить, жму, Нет.

Еще я этот файл Ноябрь.xls, копирую на флешку и везу его на работу, там просто ПК, сети ни какой нет, там мы его сообща анализируем и принимаем меры, возможны опять коррективы этого файла, опять его на флешку и дома на сетевой, ну тут просто, метод, копирования.
Может Вам будет проще ориентироваться, после моего монолога!!
""""""""""""""""""""""""""""""""""" """"""""""""""""""""""""""""""""""" """""""""""""""""""""""""""""""

3. Женя еще в первом макросе, строка:
Код:
"\\192.168.2.50\public\Ноябрь'Ноябрь.xls"
сохраняла файл с именем Ноябрь'Ноябрь.xls
я изменил ее так:
Код:
"\\192.168.2.50\public\Ноябрь\Ноябрь.xls"
и все стало ОК!!
valerij вне форума Ответить с цитированием
Старый 23.11.2009, 21:09   #7
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

Логика конструкции построена с учетом того, что резервная копия располагается на сетевом ресурсе, и на рабочем - "\\192.168.2.50\public\", и на домашнем - "\\Home\public\"
Приотитет у адреса - "\\192.168.2.50\public\", сначала проверяется его доступность, затем если первая проверка неудачна проверяется доступность ресурса - "\\Home\public\"
При доступности одного из ресурсов будет выведено предложение "сохранить резервную копию...", иначе файл закроется сохранив изменения только локально.
Имена сетевых ресурсов замените на свои реальные адреса, возможно локальные папки, конструкция собрана "на коленке" и я её не тестировал, претензии принимаются к рассмотрению.
Евгений
Teslenko_EA вне форума Ответить с цитированием
Старый 23.11.2009, 22:48   #8
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от Teslenko_EA Посмотреть сообщение
Логика конструкции построена с учетом того, что резервная копия располагается на сетевом ресурсе, и на рабочем - "\\192.168.2.50\public\", и на домашнем - "\\Home\public\"
Приотитет у адреса - "\\192.168.2.50\public\", сначала проверяется его доступность, затем если первая проверка неудачна проверяется доступность ресурса - "\\Home\public\"
Женя, понял, логику, но что то не так, не хочет на сетевой сохранять, он включен, открываю файл Ноябрь.xls с такого пути:
F:\Home\public\Ноябрь
вот макрос:
Код:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Const s0 = "\\192.168.2.50\public\Ноябрь\", s1 = "F:\Home\public\Ноябрь\", s2 = "Ноябрь'Ноябрь.xls"
Const sM = "Сохранить резервную копию ?"
Dim s$
On Error Resume Next
ThisWorkbook.Save
ChDir s0
If Err.Number = 0 Then s = s0 + s
If Not Err.Number = 0 Then Err.Clear: ChDir s1
If Not Err.Number = 0 Then
    'выход без запроса
ElseIf MsgBox(sM, vbQuestion + vbYesNo, Empty) = vbYes Then
    If Len(s) = 0 Then s = s1 + s
    If Len(Dir(s)) > 0 Then Kill s
    If Err.Number = 0 Then ThisWorkbook.SaveAs s, xlNormal
End If
End Sub
И сохраняет по тому же пути, что я делаю не так?
Женя, а как уменьшить время проверки сетевых ресурсов, я на своем 2-ядерном жду долго, а на старом, Бух ПК, там ваще пол дня будет сохранять!!!

Последний раз редактировалось valerij; 23.11.2009 в 23:04.
valerij вне форума Ответить с цитированием
Старый 23.11.2009, 23:37   #9
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

Код:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Const s0 = "\\192.168.2.50\public\Ноябрь\", s1 = "F:\Home\public\Ноябрь\", s2 = "Ноябрь.xls"
Const sM = "Сохранить резервную копию ?"
Dim s$
On Error Resume Next
ThisWorkbook.Save
s = (Dir(s0, vbDirectory))
If Not Len(s) = 0 Then
    s = s0 + s2:
Else
    s = (Dir(s1, vbDirectory))
    If Not Len(s) = 0 Then s = s1 + s2
    Err.Clear
End If
If Len(s) = 0 Then
    'выход без запроса
ElseIf MsgBox(sM, vbQuestion + vbYesNo, Empty) = vbYes Then
    If Len(Dir(s)) > 0 Then Kill s
    If Err.Number = 0 Then ThisWorkbook.SaveAs s, xlNormal
End If
End Sub
претензии не принимаются (сегодня)
Евгений.

Последний раз редактировалось Teslenko_EA; 23.11.2009 в 23:47.
Teslenko_EA вне форума Ответить с цитированием
Старый 24.11.2009, 16:44   #10
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от Teslenko_EA Посмотреть сообщение
претензии не принимаются (сегодня).
Да, все работает, но думает долго, нельзя ли, как нибудь придумать проверку, типа: если сетевой ресурс активен х = 1, а не активен, х = 0, может с реестром связать??
valerij вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сетевой фильтр Betty Компьютерное железо 3 02.07.2009 17:47
Сетевой график Nina+ Помощь студентам 10 16.05.2009 11:13
Сетевой диск Nic-x Win Api 4 07.02.2008 15:05
Сетевой тест Stanislav Работа с сетью в Delphi 3 29.12.2007 01:37