Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Сохранение данных - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Сохранение данных (Макросы Sub)
Сохранение данных
udarock Дата: Вторник, 28.01.2014, 21:03 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 36
Репутация: 10 ±
Замечаний: 20% ±

Excel 2013
Здравствуйте!
Возникла такая проблема.
Есть макрос на сохранение данных из одного листа файла. И если файл уже существует, то выходит соответствующие предупреждение.
Но при первом запуске макроса создается пустой файл (т.е. данные из листа не копируются), а при повторном сохранении файл создается с данными.
С чем это связано?
Вот код:

[vba]
Код
On Error Resume Next
     Set FSO = CreateObject("scripting.filesystemobject")
     ' создаём главную папку
     BaseFolder$ = "C:\Sewage\": MkDir BaseFolder$
     MkDir BaseFolder$
     ' создаём подпапку
     BaseFolder$ = "C:\Sewage\line" & Range("B1").Value & "\": MkDir BaseFolder$
     MkDir BaseFolder$
      
     ' проверка на существование файла
     If Dir(BaseFolder$ & "line" & Range("B1").Value & ".collectin") > "" Then
          
     Dim iRet As Integer
     Dim strPrompt As String
     Dim strTitle As String
   
     ' Promt
     strPrompt = "Файл уже существует! Перезаписать?"
   
     ' Dialog's Title
     strTitle = "Ошибка!"
   
     'Display MessageBox
     iRet = MsgBox(strPrompt, vbYesNo, strTitle)
   
     ' Check pressed button
     If iRet = vbNo Then
         MsgBox "Сохранение отменено!"
     Else
         MsgBox "Файл перезаписан!"
     ' создаём текстовый файл в кодировке Unicode
     Set ts = FSO.CreateTextFile(BaseFolder$ & "line" & Range("B1").Value & ".collectin", True)
     ts.Close
     ' заполняем его данными
     Open "C:\Sewage\line" & Range("B1").Value & "\" & "line" & Range("B1").Value & ".collectin" For Output As #1
                     Range("1:1048576").Copy
                     With New DataObject
                         .GetFromClipboard
                         Print #1, Replace(.GetText(1), vbTab, "|")
                     End With
                     Application.CutCopyMode = False
                 Close #1
           MsgBox "Файл создан и помещен в папку" & vbNewLine & BaseFolder$, vbInformation, "Готово"
     ' открываем папку с файлом
     CreateObject("wscript.shell").Run "explorer.exe /e, """ & BaseFolder$ & """"
     End If
      
     Else
     ' создаём текстовый файл в кодировке Unicode
     Set ts = FSO.CreateTextFile(BaseFolder$ & "line" & Range("B1").Value & ".collectin", True)
     ts.Close
     ' заполняем его данными
     Open "C:\Sewage\line" & Range("B1").Value & "\" & "line" & Range("B1").Value & ".collectin" For Output As #1
                     Range("1:1048576").Copy
                     With New DataObject
                         .GetFromClipboard
                         Print #1, Replace(.GetText(1), vbTab, "|")
                     End With
                     Application.CutCopyMode = False
                 Close #1
           MsgBox "Файл создан и помещен в папку" & vbNewLine & BaseFolder$, vbInformation, "Готово"
     ' открываем папку с файлом
     CreateObject("wscript.shell").Run "explorer.exe /e, """ & BaseFolder$ & """"
     End If
[/vba]
 
Ответить
СообщениеЗдравствуйте!
Возникла такая проблема.
Есть макрос на сохранение данных из одного листа файла. И если файл уже существует, то выходит соответствующие предупреждение.
Но при первом запуске макроса создается пустой файл (т.е. данные из листа не копируются), а при повторном сохранении файл создается с данными.
С чем это связано?
Вот код:

[vba]
Код
On Error Resume Next
     Set FSO = CreateObject("scripting.filesystemobject")
     ' создаём главную папку
     BaseFolder$ = "C:\Sewage\": MkDir BaseFolder$
     MkDir BaseFolder$
     ' создаём подпапку
     BaseFolder$ = "C:\Sewage\line" & Range("B1").Value & "\": MkDir BaseFolder$
     MkDir BaseFolder$
      
     ' проверка на существование файла
     If Dir(BaseFolder$ & "line" & Range("B1").Value & ".collectin") > "" Then
          
     Dim iRet As Integer
     Dim strPrompt As String
     Dim strTitle As String
   
     ' Promt
     strPrompt = "Файл уже существует! Перезаписать?"
   
     ' Dialog's Title
     strTitle = "Ошибка!"
   
     'Display MessageBox
     iRet = MsgBox(strPrompt, vbYesNo, strTitle)
   
     ' Check pressed button
     If iRet = vbNo Then
         MsgBox "Сохранение отменено!"
     Else
         MsgBox "Файл перезаписан!"
     ' создаём текстовый файл в кодировке Unicode
     Set ts = FSO.CreateTextFile(BaseFolder$ & "line" & Range("B1").Value & ".collectin", True)
     ts.Close
     ' заполняем его данными
     Open "C:\Sewage\line" & Range("B1").Value & "\" & "line" & Range("B1").Value & ".collectin" For Output As #1
                     Range("1:1048576").Copy
                     With New DataObject
                         .GetFromClipboard
                         Print #1, Replace(.GetText(1), vbTab, "|")
                     End With
                     Application.CutCopyMode = False
                 Close #1
           MsgBox "Файл создан и помещен в папку" & vbNewLine & BaseFolder$, vbInformation, "Готово"
     ' открываем папку с файлом
     CreateObject("wscript.shell").Run "explorer.exe /e, """ & BaseFolder$ & """"
     End If
      
     Else
     ' создаём текстовый файл в кодировке Unicode
     Set ts = FSO.CreateTextFile(BaseFolder$ & "line" & Range("B1").Value & ".collectin", True)
     ts.Close
     ' заполняем его данными
     Open "C:\Sewage\line" & Range("B1").Value & "\" & "line" & Range("B1").Value & ".collectin" For Output As #1
                     Range("1:1048576").Copy
                     With New DataObject
                         .GetFromClipboard
                         Print #1, Replace(.GetText(1), vbTab, "|")
                     End With
                     Application.CutCopyMode = False
                 Close #1
           MsgBox "Файл создан и помещен в папку" & vbNewLine & BaseFolder$, vbInformation, "Готово"
     ' открываем папку с файлом
     CreateObject("wscript.shell").Run "explorer.exe /e, """ & BaseFolder$ & """"
     End If
[/vba]

Автор - udarock
Дата добавления - 28.01.2014 в 21:03
udarock Дата: Среда, 29.01.2014, 17:05 | Сообщение № 2
Группа: Пользователи
Ранг: Новичок
Сообщений: 36
Репутация: 10 ±
Замечаний: 20% ±

Excel 2013
Вот пример выложил. В нем всё работает нормально. У меня он в одном файле используется. который очень много весит. Там сохранение работает через раз. С чем это может быть связано?:)
К сообщению приложен файл: 8464329.xlsm (21.4 Kb)
 
Ответить
СообщениеВот пример выложил. В нем всё работает нормально. У меня он в одном файле используется. который очень много весит. Там сохранение работает через раз. С чем это может быть связано?:)

Автор - udarock
Дата добавления - 29.01.2014 в 17:05
KuklP Дата: Среда, 29.01.2014, 20:44 | Сообщение № 3
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 486 ±
Замечаний: 0% ±

2003-2010
Попробуйте так.
К сообщению приложен файл: 2475783.xlsm (20.2 Kb)


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728
 
Ответить
СообщениеПопробуйте так.

Автор - KuklP
Дата добавления - 29.01.2014 в 20:44
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Сохранение данных (Макросы Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!