Страница 1 из 1

Excel: проблема при открытии и активации файлов

Добавлено: 13 май 2009, 20:16
kto_tut
Необходимо скопировать инфу из файла Один в файл fName (его указывает пользователь)

Dim fName As String
With Application
fName = .GetOpenFilename
If fName = "False" Then Exit Sub
End With
Workbooks.Open Filename:=fName ' открывает выбранный файл, все нормально работает

После этого перехожу в файл Один
Windows("Один.xls").Activate ' работает

Но при переходе в файл fName
Windows(fName).Activate ' не находит уже открытый файл, причем ошибка заключается в том, что переменной fName возвращает полный путь и имя файла, а при активации нужно только имя файла (без указания пути). Как активировать файл fName? (если заменить Windows на Workbook ниче не меняется)

Я понимаю, что коряво все тут излагаю, но оч прошу, пряма-таки слезно умоляю помочь!!!!

Re: Excel: проблема при открытии и активации файлов

Добавлено: 13 май 2009, 20:32
Naeel Maqsudov
КНИГА.Name - это имя файла без пути.

Но вы можете обойтись вообще без переключения между окнами.

Код: Выделить всё

  Workbooks("Книга3.xls").Sheets("Лист1").Range("A1:A10").Copy Workbooks("Книга2.xls").Sheets("Лист2").Range("A1")

Re: Excel: проблема при открытии и активации файлов

Добавлено: 14 май 2009, 11:34
vint

Код: Выделить всё

ошибка заключается в том, что переменной fName возвращает полный путь и имя файла
Это не ошибка так и должно быть
Попробуйте вот так

Код: Выделить всё

Dim fName As Variant
file = Application.GetOpenFilename
Workbooks.Open (file)
fName = Left(ActiveWorkbook.Name, Len(ActiveWorkbook.Name) - 4) 'имя минус .XLS - 4 символа
ThisWorkbook.Activate            'активация рабочей книги
Workbooks(fName).Activate        'активация открытой книги

Re: Excel: проблема при открытии и активации файлов

Добавлено: 14 май 2009, 15:05
Naeel Maqsudov
Нет, просто .name. Этого достаточно.
Когда книга еще не сохранена, то это свойство возвращает имя без расшинения.
Если сохранена, то с расширением.
Но для обращения к элементы коллекции WorkBooks надо использовать точно такое имя, которое возвращается свойством Name.
Расширение откусывать не надо.

Re: Excel: проблема при открытии и активации файлов

Добавлено: 14 май 2009, 15:53
vint
Сначала так и сделал, но когда стал проверять в переменной указывалось расширение и соответственно ошибка при активации,поэтому и отрезал.
Странно!?

Re: Excel: проблема при открытии и активации файлов

Добавлено: 14 май 2009, 20:45
kto_tut
Ай, спасибо, уважаемые! Без расширения заработало!!! )) Не могли бы Вы помочь чайнику еще одним ответом? ) а со вставкой-то что не так? )

Dim fName As Variant
file = Application.GetOpenFilename
Workbooks.Open (file)
fName = Left(ActiveWorkbook.Name, Len(ActiveWorkbook.Name) - 4) 'имя минус .XLS - 4 символа

ThisWorkbook.Activate 'активация рабочей книги
Sheets("Лист1").Range("c20:c23").Copy
Workbooks(fName).Activate 'активация открытой книги
Sheets("1").Range("c20").Paste

Re: Excel: проблема при открытии и активации файлов

Добавлено: 14 май 2009, 22:33
Naeel Maqsudov
Было бы неплохо, если бы Вы еще указали, какое сообщение об ошибке возникает и на какой строчке.
(Возможно Вы бы тогда и сами поняли в чем проблема)
А так... Ну, наверное нет в книге листа с именем "1".
Если надо обратиться к первому попавшемуся рабочему листу, то можно использовать WrokSheets(1)

PS
А не хотите попробовать все сделать 1 строкой, как я советовал в посте №2.
И буфер обмена не используется, и окна не переключаются. Все гораздо быстрее работает в результате.

Re: Excel: проблема при открытии и активации файлов

Добавлено: 14 май 2009, 22:36
vint

Код: Выделить всё

Dim fName As Variant
file = Application.GetOpenFilename
Workbooks.Open (file)
fName = Left(ActiveWorkbook.Name, Len(ActiveWorkbook.Name) - 4) 'имя минус .XLS - 4 символа
Application.ThisWorkbook.Worksheets("Лист1").Range("C20:C23").Copy _
ActiveWorkbook.Worksheets(1).Range("C20")
не надо активировать и скакать по листам

Re: Excel: проблема при открытии и активации файлов

Добавлено: 15 май 2009, 08:59
kto_tut
Спасибо всем огромное! ) все работает! )