Страницы: 1
RSS
Импорт документа без лишних вопросов
 
Собственно сабж.  
 
Успешно используюю нижепривиденный макрос для импорта определенных листов из других книг в текущую  
 
Sub Import_Allfunds()  
' Import_AllFunds Macro  
Dim sFolder, li As Long  
   sFolder = Application.GetOpenFilename("XLS Files(*.xl*),*.xl*", , "Chose an Allfunds File", "Chose", True)  
   On Error GoTo GetCode  
   If sFolder = False Then Exit Sub  
GetCode:  
   Application.ScreenUpdating = False  
   For li = 1 To UBound(sFolder)  
       Workbooks.Open sFolder(li)  
   Next li  
   Application.ScreenUpdating = True  
Sheets("Lux EUR").Copy Before:=Workbooks("RFU023.xls").Sheets(1)  
For Each wb In Workbooks  
If wb.Name Like "All Funds*" Then  
wb.Close savechanges:=False  
End If  
Next  
   Sheets("Data Management").Select  
End Sub  
 
Но для одного из документов появилась проблемка. При попытке импорта одного из листов выскакивает диалоговое окно:  
 
 
И так несколько раз с разными именами. При этом, если все время нажимать Yes, то импортируется тот лист что нужно и всё остальное работает ок.    
 
Можно как-то избавиться от этого диалогового окна?    
Что-то менять в файле с которого импортируется - не вариант, так как файл каждый месяц присылается другим отделом, который нам не подвластен.  
 
Заранее благодарю.
 
картинка не приклеелась.  
Исправился
 
Там ведь всё ясно написано - импортируете лист с именем, которое у Вас уже есть.  
Я бы На Вашем месте заранее изменил своё имя на другое, раз уж такой конфликт часто бывает - тут если выбрать YES, то может быть ошибка.  
Или выбирал NO и менял имя.
 
{quote}{login=Hugo}{date=25.11.2011 02:53}{thema=}{post}Там ведь всё ясно написано - импортируете лист с именем, которое у Вас уже есть.  
Я бы На Вашем месте заранее изменил своё имя на другое, раз уж такой конфликт часто бывает - тут если выбрать YES, то может быть ошибка.  
Или выбирал NO и менял имя.{/post}{/quote}  
 
Так ведь дело вот в чем:  
 
В файле в кторый я ипортирую информацию есть только 2 листа:  
Data Management (просто лист с кнопками управления импорт/экспорт/рефреш)  
HC Report (Лист с шаблоном в который собирается информация с импортированых листов)  
 
А импортирую я из другого документа только один лист с названием Lux EUR  
 
Я вообще не могу понять насчет чего оно мне пишет... С другими документами все работает нормально.
 
Это имя - не имя листа, а имя в листе.  
Если Вы их не используете, то поудаляйте все лишние имена менеджером имён.  
А английский на минимальном уровне всёж нужно понимать...
 
Ну так и пишут: "формула или лист, который вы хотите скопировать/переместить содержит имя "bonddata_lc_id" которое на файле-приёмнике уже есть..."  
Измените в том файле КУДА перемещаете листы это имя на другое и не будет выскакивать.  
 
 
З.Ы.  
"bond"... J.Bond? :О)
 
Вообще-то есть строка, отключающая лишние вопросы - но думаю тут её применять не стоит, пока не разобрались с конфликтом имён.
 
{quote}{login=Hugo}{date=25.11.2011 03:06}{thema=}{post}Это имя - не имя листа, а имя в листе.  
Если Вы их не используете, то поудаляйте все лишние имена менеджером имён.  
А английский на минимальном уровне всёж нужно понимать...{/post}{/quote}  
Ну английским владею слава Богу нормально. Но не суть.  
 
Прикрепить файл не могу, так как практически чистый файл весит 6 с половиной мб а в архиве - полтора.  
 
Дело в том, что в моем файле нету даже похожих строк/имен/названий...
 
Подозреваю, что как раз лишних имён там на пяток мегабайт и лежит, раз размер такой.  
 
Про имена вот есть пример кода:  
 
=====================  
Попробуйте запустить для поиска имён:  
Код:  
Sub ListNames()   ' вывод всех имен диапазонов в книге и их ссылок в активную ячейку и ниже  
  Selection.ListNames  
End Sub  
А вот так можно пройтись по списку имён и по одному их поудалять при необходимости:  
Код:  
Sub EraseNames()   ' очистка списка имен диапазонов  
  Dim nM As Name  
  For Each nM In ActiveWorkbook.Names  
     If nM.Visible Then  
        If Not nM.Name Like "*!Print_Area" Then  ' имена областей печати лучше оставить  
           Select Case MsgBox("Удалить имя диапазона:" & vbCrLf & vbCrLf _  
                              & nM.Name & nM.RefersTo, vbYesNoCancel + vbQuestion)  
              Case vbYes: nM.Delete  
              Case vbCancel: Exit Sub  
           End Select  
        End If  
     Else  
        If Not nM.Name Like "*!_FilterDatabase" Then nM.Delete   ' удалить все скрытые имена диапазонов кроме фильтров  
     End If  
  Next nM  
End Sub  
=======================
 
Ещё добавлю - этот код предлагает удалять видимые имена, но они могут быть и скрытыми... Делайте выводы :)
 
{quote}{login=Spagor}{date=25.11.2011 03:27}{thema=Re: }{post}{quote}{login=Hugo}{date=25.11.2011 03:06}{thema=}{post}{/post}{/quote}практически чистый файл весит 6 с половиной мб{/post}{/quote}Не такой уж он и чистый :-)
 
Hugo,  
 
А если я поудаляю эти имена (с формулами)что может произойти? Я имею ввиду, не утрачу ли информацию?
 
{quote}{login=Hugo}{date=25.11.2011 03:16}{thema=}{post}Вообще-то есть строка, отключающая лишние вопросы - но думаю тут её применять не стоит, пока не разобрались с конфликтом имён.{/post}{/quote}  
 
А можно поинетересоваться как эта строка выглядит?
 
Интересное соседство вопросов:  
 
"А если я поудаляю эти имена (с формулами)что может произойти? Я имею ввиду, не утрачу ли информацию?"  
 
"-думаю тут её применять не стоит, пока не разобрались с конфликтом имён.-    
А можно поинетересоваться как эта строка выглядит?"  
 
Т.е. Вы справедливо боитесь потерять информацию, и тут же готовы её потерять (а может быть уже что-то потеряли, когда отвечали YES).  
Хотя конечно если Вы точно знаете, что в той книге, куда Вы копируете лист, нужных имён нет, то можете применять  
 
Application.DisplayAlerts = False  
'копирование  
Application.DisplayAlerts = True  
 
Но судя по весу, Вы так уже набрали приличное количество мусора.  
Я бы сделал иначе - перед копированием кодом (пример выше чуть переделать) удалил все ненужные имена из книги (остатки от предыдущего копирования), потом смело копировал лист со всеми именами.
 
{quote}{login=Hugo}{date=25.11.2011 06:07}{thema=}{post}Интересное соседство вопросов:  
 
"А если я поудаляю эти имена (с формулами)что может произойти? Я имею ввиду, не утрачу ли информацию?"  
 
"-думаю тут её применять не стоит, пока не разобрались с конфликтом имён.-    
А можно поинетересоваться как эта строка выглядит?"  
 
Т.е. Вы справедливо боитесь потерять информацию, и тут же готовы её потерять (а может быть уже что-то потеряли, когда отвечали YES).  
Хотя конечно если Вы точно знаете, что в той книге, куда Вы копируете лист, нужных имён нет, то можете применять  
 
Application.DisplayAlerts = False  
'копирование  
Application.DisplayAlerts = True  
 
Но судя по весу, Вы так уже набрали приличное количество мусора.  
Я бы сделал иначе - перед копированием кодом (пример выше чуть переделать) удалил все ненужные имена из книги (остатки от предыдущего копирования), потом смело копировал лист со всеми именами.{/post}{/quote}  
 
Спасибо за ответ.  
Дело в том, что сам по себе мусор мне не мешает. Данынй файл - это рабочий файл, который просто собирает информацию в таблицу, потом жта таблица отдельно экспортируется в отдельный документ, а сам рабочий файл закрывается без сохранения.
 
Хотя насчет веса это действительно странно. У меня есть другие файлы, которые работают с теми же книгами, с такими же макросами (только другие листы импортирует) и их вес не превышает 200кб...
 
Тогда действительно существующие имена нужно заменять на копированные.  
Но если файл закрывается без сохранения - тогда и мусора и лишних имён там быть не должно...
 
{quote}{login=Hugo}{date=25.11.2011 06:51}{thema=}{post}Тогда действительно существующие имена нужно заменять на копированные.  
Но если файл закрывается без сохранения - тогда и мусора и лишних имён там быть не должно...{/post}{/quote}  
 
Сейчас попробую создать файл заново... может я что-то перемудрил был...
 
Это правильное решение.  
Я таким файлам, которые используются как шаблоны и которые нежелательно перезаписывать/сохранять, обычно после изготовления ставлю атрибут "Read Only".  
Это защищает шаблон от случайного повреждения.
 
{quote}{login=Hugo}{date=25.11.2011 07:10}{thema=}{post}Это правильное решение.  
Я таким файлам, которые используются как шаблоны и которые нежелательно перезаписывать/сохранять, обычно после изготовления ставлю атрибут "Read Only".  
Это защищает шаблон от случайного повреждения.{/post}{/quote}  
 
Нубский вопрос, но "как"?)  
Уже совсем замаялся с этим документом. Таблицы большие, все формулы заново в макросах прописывать приходится... Форматировать сначала...
 
Проблема найдена.  
 
При первом импорте этого документа оно и грузит все имена. Соответсвенно забивается памятью И действительно этих имен тут на 6 мб О_О  
 
Осталось только поставить запрет на сохранение...
 
По данному вопросу назрела следующая проблема.  
При экспорте одного листа из рабочего документа экспортируются и все 6 мб имен, что не очень удобно для последующей отправки клиенту.    
 
Сейчас для жкспорта использую соедующий код:  
 
___________________________________________  
 
Sub Export_Data()  
On Error Resume Next  
 
Dim Sh As Worksheet: Set Sh = Sheets("HC Report")  
If Sh Is Nothing Then Exit Sub  
SU False: DA False  
NewFileName = GetNewFileName  
If Len(NewFileName) > 0 Then  
Sh.Copy  
ActiveWorkbook.Sheets("HC Report").Cells.Copy  
ActiveWorkbook.Sheets("HC Report").Cells.PasteSpecial xlPasteValuesAndNumberFormats  
ActiveWorkbook.SaveAs NewFileName  
ActiveWorkbook.Close False  
End If  
SU True: DA True: Set Sh = Nothing  
End Sub  
 
Sub SU(ByVal Update_Screen As Boolean): Application.ScreenUpdating = Update_Screen: End Sub  
Sub DA(ByVal Display_Alerts As Boolean): Application.DisplayAlerts = Display_Alerts: End Sub  
 
Function GetNewFileName() As String  
GetNewFileName = "": InitialFileName = "c:\": NewFileExt = ".xls"  
GetNewFileName = Application.GetSaveAsFilename(InitialFileName, _  
"Excel File (*" & NewFileExt & "),", , _  
"Type the file name", "Save the file")  
If VarType(GetNewFileName) = vbBoolean Then GetNewFileName = "": Exit Function  
If GetNewFileName = "False" Or GetNewFileName = "False" Then GetNewFileName = ""  
End Function  
__________________________________________  
 
Что к нему дописать нужно, чтобы имена не копировались?  
 
 
 
___________________  
59895
 
А что, ответа нету? ну ооочень нужно...    
Скоро отчеты сдавать, а файлы по 6мб отпралять мягко говоря - неудобно...
 
После копирования удаляйте все ненужные имена.  
Код выше есть - чуть подправить по вкусу...  
Например, убрать вывод сообщения.
 
{quote}{login=Hugo}{date=29.11.2011 01:00}{thema=}{post}После копирования удаляйте все ненужные имена.  
Код выше есть - чуть подправить по вкусу...  
Например, убрать вывод сообщения.{/post}{/quote}  
 
Всё, спасибо, я как все - сначала задаю вопрс, потом пользуюсь поиском (извините, каюсь. Через поиск сделал почти весь отчет)))  
 
собственно, нашел более понятный и простой код для удаления имен:  
_______________________________________  
Set AWB=ActiveWorkBook  
for i=AWB.Names.count to 1 step -1  
On Error Resume Next  
AWB.Names.Item(i).Delete  
Next  
_______________________________________  
 
Работает. Встрою его в макрос экспорта документа в самое начало. Думаю будет норм. Думаю, что тему можно закрыть ;)
Страницы: 1
Читают тему
Наверх