Excel: проблема при открытии и активации файлов
Модератор: Naeel Maqsudov
Необходимо скопировать инфу из файла Один в файл 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 ниче не меняется)
Я понимаю, что коряво все тут излагаю, но оч прошу, пряма-таки слезно умоляю помочь!!!!
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 ниче не меняется)
Я понимаю, что коряво все тут излагаю, но оч прошу, пряма-таки слезно умоляю помочь!!!!
- Naeel Maqsudov
- Сообщения: 2570
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
КНИГА.Name - это имя файла без пути.
Но вы можете обойтись вообще без переключения между окнами.
Но вы можете обойтись вообще без переключения между окнами.
Код: Выделить всё
Workbooks("Книга3.xls").Sheets("Лист1").Range("A1:A10").Copy Workbooks("Книга2.xls").Sheets("Лист2").Range("A1")
Код: Выделить всё
ошибка заключается в том, что переменной 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 'активация открытой книги
- Naeel Maqsudov
- Сообщения: 2570
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
Нет, просто .name. Этого достаточно.
Когда книга еще не сохранена, то это свойство возвращает имя без расшинения.
Если сохранена, то с расширением.
Но для обращения к элементы коллекции WorkBooks надо использовать точно такое имя, которое возвращается свойством Name.
Расширение откусывать не надо.
Когда книга еще не сохранена, то это свойство возвращает имя без расшинения.
Если сохранена, то с расширением.
Но для обращения к элементы коллекции WorkBooks надо использовать точно такое имя, которое возвращается свойством Name.
Расширение откусывать не надо.
Сначала так и сделал, но когда стал проверять в переменной указывалось расширение и соответственно ошибка при активации,поэтому и отрезал.
Странно!?
Странно!?
Ай, спасибо, уважаемые! Без расширения заработало!!! )) Не могли бы Вы помочь чайнику еще одним ответом? ) а со вставкой-то что не так? )
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
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
- Naeel Maqsudov
- Сообщения: 2570
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
Было бы неплохо, если бы Вы еще указали, какое сообщение об ошибке возникает и на какой строчке.
(Возможно Вы бы тогда и сами поняли в чем проблема)
А так... Ну, наверное нет в книге листа с именем "1".
Если надо обратиться к первому попавшемуся рабочему листу, то можно использовать WrokSheets(1)
PS
А не хотите попробовать все сделать 1 строкой, как я советовал в посте №2.
И буфер обмена не используется, и окна не переключаются. Все гораздо быстрее работает в результате.
(Возможно Вы бы тогда и сами поняли в чем проблема)
А так... Ну, наверное нет в книге листа с именем "1".
Если надо обратиться к первому попавшемуся рабочему листу, то можно использовать WrokSheets(1)
PS
А не хотите попробовать все сделать 1 строкой, как я советовал в посте №2.
И буфер обмена не используется, и окна не переключаются. Все гораздо быстрее работает в результате.
Код: Выделить всё
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")
Спасибо всем огромное! ) все работает! )