Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Закрыть файл Excel на VBA

1.8K
16 сентября 2003 года
ziv
71 / / 04.07.2003
Помогите мне, пожалуйста.
Мне нужно открыть определенный файл и, после его обработки, закрыть.

открываю файл:

name = Application.GetOpenFilename
Workbooks.Open name

а как мне его закрыть?
3.4K
16 сентября 2003 года
T@sh
19 / / 16.07.2003
[QUOTE]Originally posted by ziv

Workbooks("Книга1").Close
1.8K
16 сентября 2003 года
ziv
71 / / 04.07.2003
мне неизвестно имя открываемого файла
3.4K
16 сентября 2003 года
T@sh
19 / / 16.07.2003
Цитата:
Originally posted by ziv
мне неизвестно имя открываемого файла


хм. а как ты его обрабатываешь? ты же когда к нему обращаешься как-то его обзываешь?
ну..тогда после обработки открой его. и потом то же самое только activeworkbook
это первое что в голову приходит...только как же ты с ним работаешь?
или введи переменную для определения имени файла и вместо книга1 напиши его имя.

1.8K
16 сентября 2003 года
ziv
71 / / 04.07.2003
Цитата:
Originally posted by T@sh

хм. а как ты его обрабатываешь? ты же когда к нему обращаешься как-то его обзываешь?
ну..тогда после обработки открой его. и потом то же самое только activeworkbook
это первое что в голову приходит...только как же ты с ним работаешь?
или введи переменную для определения имени файла и вместо книга1 напиши его имя.



м-даа :) программу писал под фиксированное имя открываемого файла :(

а как открываемому файлу присвоить необходимое мне имя, например "Книга1"?

3.4K
16 сентября 2003 года
T@sh
19 / / 16.07.2003
Цитата:
Originally posted by ziv


а как открываемому файлу присвоить необходимое мне имя, например "Книга1"?



хм.... А как открывается книга? Можно сделать через диалоговое окно , чтобы юзер сам выбрал что открыть:
Application.Dialogs(xlDialogOpen).Show
bookName = ActiveWorkbook.Name

а вообще проще в аську стукнись если срочно.

1.8K
16 сентября 2003 года
ziv
71 / / 04.07.2003
Цитата:
Originally posted by T@sh


хм.... А как открывается книга? Можно сделать через диалоговое окно , чтобы юзер сам выбрал что открыть:
Application.Dialogs(xlDialogOpen).Show
bookName = ActiveWorkbook.Name

а вообще проще в аську стукнись если срочно.



я делал вот так:
name = Application.GetOpenFilename

[off] а по аське ты "Марина"? [/off]

258
16 сентября 2003 года
SergeySV
1.5K / / 19.03.2003
Цитата:
Originally posted by ziv

name = Application.GetOpenFilename
Workbooks.Open name



Вот этот name уже содержит в себе полной путь к файлу - "C:\aaa1.xls", если из этой строки выдернуть aaa1.xls(например через мою функцию FileWithoutDir, описание в конце), то его можно использовать при обращении к книге - Workbooks("aaa1.xls").Close

А можно и так, вариантов масса:

 
Код:
Dim sWrb as String

name = Application.GetOpenFilename
Workbooks.Open name
sWrb = ActiveWorkbook.name
....
Workbooks(sWrb).Close


и так:
 
Код:
Dim wWrb As Workbook

name = Application.GetOpenFilename
Workbooks.Open name
Set wWrb = ActiveWorkbook
....
wWrb.Close


Код:
Public Function FileWithoutDir(path As String) As String
  ' Вырезает название файла из полного пути к файлу
  Dim i%, pos%
 
On Error GoTo Err_
 
  FileWithoutDir = ""
  s = ""
  If path <> "" Then
   
    pos = InStr(1, path, "\")
    s = path
    If pos > 0 Then
      Do
        s = Right(s, Len(s) - pos)
        pos = InStr(1, s, "\")
      Loop Until pos = 0
    End If
    FileWithoutDir = s
   
  End If
 
ExitSub:
 Exit Function
 
Err_:
  MsgBox "Возникла ошибка! (в функ. FileWithoutDir)"
  Resume ExitSub

End Function
1.8K
16 сентября 2003 года
ziv
71 / / 04.07.2003
ОГРОМНОЕ ВСЕМ СПАСИБО!
РАБОТАЕТ!!!!!
459
16 сентября 2003 года
gacol
273 / / 12.02.2003
Цитата:
Originally posted by SergeySV


Вот этот name уже содержит в себе полной путь к файлу - "C:\aaa1.xls", если из этой строки выдернуть aaa1.xls(например через мою функцию FileWithoutDir, описание в конце), то его можно использовать при обращении к книге - Workbooks("aaa1.xls").Close

А можно и так, вариантов масса:
 
Код:
Dim sWrb as String

name = Application.GetOpenFilename
Workbooks.Open name
sWrb = ActiveWorkbook.name
....
Workbooks(sWrb).Close


и так:
 
Код:
Dim wWrb As Workbook

name = Application.GetOpenFilename
Workbooks.Open name
Set wWrb = ActiveWorkbook
....
wWrb.Close


Код:
Public Function FileWithoutDir(path As String) As String
  ' Вырезает название файла из полного пути к файлу
  Dim i%, pos%
 
On Error GoTo Err_
 
  FileWithoutDir = ""
  s = ""
  If path <> "" Then
   
    pos = InStr(1, path, "\")
    s = path
    If pos > 0 Then
      Do
        s = Right(s, Len(s) - pos)
        pos = InStr(1, s, "\")
      Loop Until pos = 0
    End If
    FileWithoutDir = s
   
  End If
 
ExitSub:
 Exit Function
 
Err_:
  MsgBox "Возникла ошибка! (в функ. FileWithoutDir)"
  Resume ExitSub

End Function





В твоем случае наверное лучше использоватть вместо InStr() функцию InStrRev(), чтобы сразу найти правый "\" в полном имени файла.

258
16 сентября 2003 года
SergeySV
1.5K / / 19.03.2003
Цитата:
Originally posted by gacol

В твоем случае наверное лучше использоватть вместо InStr() функцию InStrRev(), чтобы сразу найти правый "\" в полном имени файла.



Да, согласен, грехи молодости... :-)

267
16 сентября 2003 года
Cutty Sark
1.2K / / 17.10.2002
А я вот так действую в таких случаях:

Книги в Экселе нумеруются в порядке открытия. Поэтому сразу после открытия того файла Workbooks(Workbooks.Count) показывает на него. Можно запомнить в объектную переменную, а если никаких других книг не открывается в процессе обработки - так и запоминать ничего не нужно.
3.4K
17 сентября 2003 года
T@sh
19 / / 16.07.2003
Цитата:
Originally posted by Cutty Sark
А я вот так действую в таких случаях:

Книги в Экселе нумеруются в порядке открытия. Поэтому сразу после открытия того файла Workbooks(Workbooks.Count) показывает на него. Можно запомнить в объектную переменную, а если никаких других книг не открывается в процессе обработки - так и запоминать ничего не нужно.



А если юзер вручную книгу откроет\закроет, откроет другую... и тп.... тогда как? прога начнет работать с левой книгой и делать там чего совсем ненадо.... а если указать имя, то он просто выкинет ошибку, если книга закрыта.

1.8K
17 сентября 2003 года
ziv
71 / / 04.07.2003
Цитата:
Originally posted by T@sh


А если юзер вручную книгу откроет\закроет, откроет другую... и тп.... тогда как? прога начнет работать с левой книгой и делать там чего совсем ненадо.... а если указать имя, то он просто выкинет ошибку, если книга закрыта.



для этого необходимо отслеживать открываемые книги по их содержимому (юзер вполне способен открыть не тот файл, тем более не зная точно его имени, ориентируясь например по дате создания), в моем случае программа отслеживает открывался ли подобный файл ранее (что недопустимо) и содержит ли файл те данные, которые ей необходимы :)

267
17 сентября 2003 года
Cutty Sark
1.2K / / 17.10.2002
Цитата:
Originally posted by T@sh


А если юзер вручную книгу откроет\закроет, откроет другую... и тп.... тогда как? прога начнет работать с левой книгой и делать там чего совсем ненадо.... а если указать имя, то он просто выкинет ошибку, если книга закрыта.



Как это вручную? А разве это все не в ходе одного выполнения программы? Ну если вручную - так пожалуйста, запоминайте книгу в переменную, и все ок. Да что мы спорим, тут любой метод хорош, а выбор зависит от деталей.
Я обычно использую Workbooks.Count по следующим причинам:
1. Часто по ходу деятельности мне приходится открывать в Экселе хтмльки из Инета, у них такое дурацкое имя получается при открытии, возиться с ним никакой охоты нет.
2. Чтобы в ходе пошаговой отладки не задумываться над тем, что у меня там активно, я стараюсь никогда не использовать ActiveCell, ActiveWorkbook и т.д. без прямой на то нужды.

А можно - по-всякому. Вот.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог