Страницы: 1
RSS
скопировать лист с другой книги
 
Ребята, подскажите пожалуйста макрос при помощи которого возможно скопировать лист (именно скопировать сам лист)из другой , закрытой книги, по указанному пути (в коде макроса) из конкретного файла. На форуме по поиску ничего подобного не нашла. Макродекодером мучаюсь второй день, ничего не получается. Буду очень, очень, благодарна!!!
 
Sub Лариса()  
Dim wb As Workbook  
Set wb = Workbooks.Open("c:\temp\другая книга.xls", ReadOnly:=True)  
wb.Sheets("лист который надо скопировать").Copy before:=ThisWorkbook.Sheets(1)  
wb.Close False  
End Sub
 
{quote}{login=Казанский}{date=12.10.2010 12:04}{thema=}{post}Sub Лариса()  
Dim wb As Workbook  
Set wb = Workbooks.Open("c:\temp\другая книга.xls", ReadOnly:=True)  
wb.Sheets("лист который надо скопировать").Copy before:=ThisWorkbook.Sheets(1)  
wb.Close False  
End Sub{/post}{/quote}  
 
Почему то выдает ошибку 1004  
ссылаясь на : wb.Sheets("SF1_lt").Copy before:=ThisWorkbook.Sheets(1)  
Правда в этом книге используются списки, может в этом причина?
 
> выдает ошибку 1004  
 
А дальше что пишет? Может быть, книга защищена от изменений?
 
Вручную получается скопировать лист?
 
{quote}{login=Казанский}{date=12.10.2010 12:49}{thema=}{post}Вручную получается скопировать лист?{/post}{/quote}  
 
Да, вручную получается
 
{quote}{login=The_Prist}{date=12.10.2010 01:15}{thema=}{post}Лист "SF1_lt" видимый?  
Может так получится?  
 
Dim wb As Workbook  
Set wb = Workbooks.Open("c:\temp\другая книга.xls", ReadOnly:=True)  
wb.Sheets("SF1_lt").Visible = -1  
wb.Sheets("SF1_lt").Copy before:=ThisWorkbook.Sheets(1)  
wb.Close False{/post}{/quote}  
 
Да лист видимый. Та же история - Метод Copy из класса Worksheet завершен не верно. Ошибка 1004
 
эх и не везет же мне на этом форуме... :(
 
{quote}{login=The_Prist}{date=12.10.2010 03:03}{thema=Re: }{post}{quote}{login=Лариса}{date=12.10.2010 03:00}{thema=}{post}эх и не везет же мне на этом форуме... :({/post}{/quote}А может Вы пытаетесь скопировать лист из книги 2007 Excel в книгу 2003?{/post}{/quote}  
 
Да нет, ну что вы)
 
{quote}{login=The_Prist}{date=12.10.2010 03:47}{thema=Re: Re: Re: }{post}{quote}{login=Лариса}{date=12.10.2010 03:45}{thema=Re: Re: }{post}Да нет, ну что вы){/post}{/quote}Тогда без Ваших исходных файлов мы не разберемся. Если ни на одной из книг защиты нет, все листы отображены и обе книги не находятся в режиме совместимости версий - негде быть ошибке. У меня макрос выполняется нормально.{/post}{/quote}  
 
Я кажется поняла почему, но устранить не знаю...  
Готовила исходные файлы для сюда и подумала вставить макрос файл приемщик и лист скопировался в него из донора...  
 
Но надо , что бы этот макрос работал с PERSONAL.XLS для активной книги которая в данный момент открыта в окне... хм...
 
Замените ThisWorkbook.Sheets(1) на ActiveWorkbook.Sheets(1)  
Dim wb As Workbook  
set wb = ActiveWorkbook  
with Workbooks.Open("c:\temp\другая книга.xls", ReadOnly:=True)  
.Sheets("SF1_lt").Visible = -1  
.Sheets("SF1_lt").Copy before:=wb.Sheets(1)  
.Close False  
end with  
Не так?  
Игорь67
 
Суда по всему, Вы в Personal.xls пытались копировать.
 
{quote}{login=}{date=12.10.2010 04:14}{thema=}{post}Замените ThisWorkbook.Sheets(1) на ActiveWorkbook.Sheets(1)  
Dim wb As Workbook  
set wb = ActiveWorkbook  
with Workbooks.Open("c:\temp\другая книга.xls", ReadOnly:=True)  
.Sheets("SF1_lt").Visible = -1  
.Sheets("SF1_lt").Copy before:=wb.Sheets(1)  
.Close False  
end with  
Не так?  
Игорь67{/post}{/quote}  
 
УРАа! Спасибо огромное!  
А нельзя у Вас попросить еще вариантик с возможностью выбора файла через окно проводника из которого надо скопировать единственный лист (имя листов может быть разное, но он только будет в книге доноре один)
 
Как вариант:)  
Игорь67  
 
Option Explicit  
 
Sub shCopy()  
   Dim BazaWb As Workbook      'файл для сбора данных  
   Dim BazaSht As Worksheet    'лист в файле для сбора данных  
   Dim SelectedItem As String  'имя файла выбранного в диалоге  
   Dim oAwb As String          'имя открытой книги  
 
   With Application  
       'отлючаем обновление экрана - это убыстрит работу макроса  
       .ScreenUpdating = False  
       'включаем ручной пересчёт формул - это убыстрит работу макроса  
       .Calculation = xlManual  
       'отключаем отображения окон на панели задач на время выполнения макроса  
       .ShowWindowsInTaskbar = False  
       'присваиваем переменной BazaWb ссылку на общий файл  
       Set BazaWb = ActiveWorkbook  
 
 
       'вызываем диалог выбора папки с файлами отчёта  
       With Application.FileDialog(msoFileDialogFilePicker)  
           .Title = "Выберите файл для отчета"    'надпись в окне диалога  
           'путь по умолчанию к папке /где расположен исходный файл  
           .InitialFileName = ThisWorkbook.Path & Application.PathSeparator & "*.xls*"  
           .AllowMultiSelect = False    'запрет выбора нескольких файлов  
           If .Show = False Then GoTo ErrExt:  
           'For Each SelectedItem In .SelectedItems 'перебор файлов в папке  
           SelectedItem = .SelectedItems(1)    'при обработке нескольких - удалить  
           oAwb = Dir(SelectedItem, vbDirectory)  'запоминаем имя книги  
           Workbooks.OpenText SelectedItem         'открываем книгу  
           'операции с открытой книгой  
           With ActiveWorkbook  
               'перебор заданных листов  
               .Sheets("SF1_lt").Copy before:=BazaWb.Sheets(1)  
 
           End With  
 
           Workbooks(oAwb).Close False    'закрываем книгу  
           'Next SelectedItem  
       End With  
ErrExt:  
       'включаем автоматический пересчёт формул, который отключили в начале макроса  
       .Calculation = xlAutomatic  
       'включаем отображения окон на панели задач, которое отключали в начали макроса  
       .ShowWindowsInTaskbar = True  
       'включаем обновление экрана, который отключили в начале макроса  
       .ScreenUpdating = True  
   End With  
 
End Sub
 
Я так понимаю макрос ищет лист SF1_lt  
 
И втыкается вот на этом :  
.Sheets("SF1_lt").Copy before:=BazaWb.Sheets(1)  
 
А как возможно это дело обезличить и указать на единственный лист не важно с каким именем?
 
.Sheets(1).Copy before:=BazaWb.Sheets(1)
 
sheets(1)
 
Ага, сама уже справилась в этом) доперла))  
Подскажите пож, при запуске он постоянно проводником лезет в папку XLSTART на диске C... Как подсказать что бы лез он на диск D ?
 
Не вот это случайно надо удалить?  
.InitialFileName = ThisWorkbook.Path & Application.PathSeparator & "*.xls*"
 
хм... нет не это :(
 
strStartDir = "C:\temp\"  
ChDir strStartDir
 
Ай, слэш в конце лишний!!!
 
{quote}{login=Лариса}{date=12.10.2010 05:37}{thema=}{post}хм... нет не это :({/post}{/quote}  
Это-это!  
Попробуйте заменить на  
.InitialFileName = ActiveWorkbook.Path & Application.PathSeparator & "*.xls*"
Я сам - дурнее всякого примера! ...
 
фуф ребят запутали...  
вот ето я отключила    
'.InitialFileName = ThisWorkbook.Path & Application.PathSeparator & "*.xls*"  
Вместо этого пихала все , что вы предлагали...  
все равно лезет к файлу персоналя... ну да макрос то в нем находится вот и лезет к своему месту нахождения...  
Мож я куды не туда ваши фрагменты вставляла...
 
{quote}{login=The_Prist}{date=12.10.2010 06:01}{thema=}{post}Да кто Вас знает куда Вы чего вставляли...  
 
With Application.FileDialog(msoFileDialogFilePicker)  
.Title = "Выберите файл для отчета" 'надпись в окне диалога  
'путь по умолчанию к папке /где расположен исходный файл  
.InitialFileName = ActiveWorkbook.Path & Application.PathSeparator & "*.xls*"  
'Эта строка будет "лезть" в папку с активной книгой.  
'Еще это можно записать статическим путем(если нужен какой-то конкретный путь)  
'.InitialFileName = "D:\Temp\*.xls*"  
.AllowMultiSelect = False 'запрет выбора нескольких файлов  
If .Show = False Then GoTo ErrExt:  
 
Или  
ChDrive "D:\"  
ChDir "D:\Temp"  
With Application.FileDialog(msoFileDialogFilePicker)  
.Title = "Выберите файл для отчета" 'надпись в окне диалога  
.AllowMultiSelect = False 'запрет выбора нескольких файлов  
If .Show = False Then GoTo ErrExt:{/post}{/quote}  
 
Дошло!!! Получилось! И Ваш ответ позже увидела! Спасибо Вам огромное и ребятам всем за участие !!!
Страницы: 1
Читают тему
Наверх