Страницы: 1
RSS
Открыть файл
 
Здравствуйте.
Прочитал правила форума.Постараюсь описать проблему.
Мне нужно обратиться к файлу file2.xlsm. В нём обратится к первому листу(слева направо).
Нужно что-то вроде: file2.xlsm.Sheets(1).Cells(1,1).Value=123
Скорее всего файл придется открывать.
Вопрос:"Как открыть файл file2.xlsm или обратится к файлу file2.xlsm, к первому листу"
Прикрепляю файл.
Спасибо за внимание. :)
 
А нафига прикреплять абсолютно пустой файл???

Код
1
2
3
4
with workbooks.open ("полный путь к файлу file2.xlsm") ' открываем файл
.Sheets(1).Cells(1,1).Value=123 ' изменяем ячейку
.close true ' закрываем файл с сохранением изменений
end with
 
Простите, я понял, что файл нужно прикреплять обязательно.
Спасибо,EducatedFool, Ваш код работает!!!

Но может быть есть более изящный способ:
1.Обратиться к файлу по уникальному имени file2.xlms без указания полного пути.
2.Пометить файл file2.xlms именем A01 и обращаться к файлу так A01.Sheets(1).Cells(1,1).Value=123
3.Закрыть файл так A01.Close true

А так все супер!
 
Нашел такой код в интернете.
Код
1
2
3
4
5
Sub Tester1()
   Open "file.txt" For Output As #1
   Print #1, "В этом файле будет написан этот текст"
   Close #1
End Sub

Сначала код работал, в файле действительно писался текст, но потом ничего не писалось: даже после перезагрузки компьютера.

Так вот, может быть есть более изящный способ, описанный в предыдущем сообщении?
Изменено: usersuperpupsik - 18.03.2013 20:44:29
 
Цитата
1.Обратиться к файлу по уникальному имени file2.xlms без указания полного пути.
и где Excel должен искать этот файл?
по всем подпапкам всех папок?
знаете, сколько времени займёт такой поиск? да и надо это вообще?

Или этот файл уже будет открыт на момент запуска макроса?


Цитата
Но может быть есть более изящный способ
а в чем «неизящность» предложенного мной способа?
 
1. Да и если даже такой файл уже будет открыт - нет гарантии, что это именно тот файл. Таких file2.xlsm может быть много разных - загляните к тёткам в бухгалтерию :)
2. Open "file.txt" - так что собираетесь открывать - xlsm или txt?
3. Пометить - так Игорь уже пометил. Точкой. Если нужно  А01 - можно и так. Но пока не видно, что это нужно.
 
Цитата
3. Пометить - так Игорь уже пометил. Точкой. Если нужно А01 - можно и так. Но пока не видно, что это нужно.

Я попробовал пометить файл A01, но у меня ничего не получилось.

Код
1
2
3
4
5
6
Public Sub clearfile2()
 
A01 = Workbooks.Open("D:\Do not Remove\file2.xlsm")
'Call Module1.Clear
A01.Close True
End Sub


Подскажите, пожалуйста, как правильно пометить файл, чтобы сделать что-то типа: A01.Close True
 
Это объект - используем set
set A01 = Workbooks.Open("D:\Do not Remove\file2.xlsm")
 
Спасибо, Hugo, именно это я и хотел!
Спасибо, EducatedFool, за рабочий код и за объяснения функции Open!
Вот,что получилось:

Код
1
2
3
4
5
6
Public Sub clearfile2()
Set A01 = Workbooks.Open("D:\Do not Remove\file2.xlsm") 'открытие файла .xlsm по данному адресу
Sheets(1).Cells(1, 1).Value = 555 'изменение файла
'Call Module1.Clear
A01.Close True 'Сохранение файла и Закрытие файла
End Sub
Изменено: usersuperpupsik - 19.03.2013 11:00:36
 
лучше писать так

A01.Sheets(1).Cells(1, 1).Value = 555
 
Извените, а можно указать рабочую папку, например, superfolder и в нем файл file2.xlsm , чтобы компьютер сначала поискал папку superfolder, а затем открыл бы файл file2.xlsm в ней.
Должно получится что-то типа этого:
Workbooks.Open("D:\...\superfolder\file2.xlsm")
здесь \...\  означает, что компьютер должен сам найти адрес!
Это нужно, чтобы файл работал на разных компьютерах в разных местах!
Спасибо за оказаную помощь.
 
Ну тогда уж для надёжности
Код
1
A01.Sheets(1).Cells(1, 1).Value = 555 'изменение файла
В данном частном случае этот файл был активным, поэтому отработало как было задумано. В другом случае может быть иначе.
А вообще в данном случае эта лишняя объектная переменная совершенно не нужна. Чем точка не понравилась?
И кстати в конце ещё по правилам нужно сделать
Код
1
set A01 = nothing
Если нет переменной - то и не нужно :)
 
Если правильно понял, то так:

Код
1
2
3
4
5
6
7
Public Sub clearfile2()
Set A01 = Workbooks.Open("D:\Do not Remove\file2.xlsm")
A01.Sheets(1).Cells(1, 1).Value = 555
'Call Module1.Clear
A01.Close True
Set A01 = Nothing
End Sub


Но как быть с этим:
Цитата
Извените, а можно указать рабочую папку, например, superfolder и в нем файл file2.xlsm , чтобы компьютер сначала поискал папку superfolder, а затем открыл бы файл file2.xlsm в ней.
Должно получится что-то типа этого:
Workbooks.Open("D:\...\superfolder\file2.xlsm")
здесь \...\ означает, что компьютер должен сам найти адрес!
Это нужно, чтобы файл работал на разных компьютерах в разных местах!
 
Hugo. Игорь, по правилам в VBA не нужно писать

set A01 = nothing

Т.к. VBA сам обнуляет все переменные (освобождает память) после завершения макроса.
Это надо писать в DELPHI и других языках.

Set ... = Nothing пишут те, кто перешёл на VBA с других языков, где данное обнуление обязательно для высвобождения памяти
Изменено: New - 19.03.2013 11:26:35
 
Ребят я всё понял, ответьте пожалуйста на этот вопрос:
Цитата
Извените, а можно указать рабочую папку, например, superfolder и в нем файл file2.xlsm , чтобы компьютер сначала поискал папку superfolder, а затем открыл бы файл file2.xlsm в ней.
Должно получится что-то типа этого:
Workbooks.Open("D:\...\superfolder\file2.xlsm")
здесь \...\ означает, что компьютер должен сам найти адрес!
Это нужно, чтобы файл работал на разных компьютерах в разных местах!
 
Цитата
New пишет:
VBA сам обнуляет все переменные (освобождает память) после завершения макроса
Не всегда - смотря как эти переменные объявлены.
 
New - спасибо. Но не верю... :)
Т.е. думаю лучше "перебzдеть".

usersuperpupsik, так не делают. Хотя конечно теоретически возможно, но что например делать в такой ситуации:
"D:\pupsik\superfolder\file2.xlsm"
"D:\super\superfolder\file2.xlsm"
что выберете? Где нужный?
Обычно используют ThisWorkbook.Path или ActiveWorkbook.Path.
 
Игорь, Владимир (ZVI) придёт, расскажет. На сколько я помню, мы поднимали этот вопрос пару лет назад.
 
Hugo, я понял. Имя файла выбиру уникальное.
А можно поподробней на примере насчет:
Цитата
Обычно используют ThisWorkbook.Path или ActiveWorkbook.Path.
 
положите файл с макросом в туже папку с файлом file2.xlsm

вместо строки

Set A01 = Workbooks.Open("D:\Do not Remove\file2.xlsm")  

напишите

Set A01 = Workbooks.Open(ThisWorkbook.Path & "\" & "file2.xlsm")
Изменено: New - 19.03.2013 12:45:01
 
Ответ уже есть. По этому принципу можно выбрать файл из папки, которая в папке с этим файлом (т.е. уровень ниже) ну или войти в папку уровнем выше (как точку отсчёта берём известный путь)..
Так будет и быстрее, и правильнее.
Ну а если искать даже уникальный файл по всему диску - нет гарантии, что такой файл так и остался уникальным. Т.е. нужно стремиться исключать человеческий фактор :)
Другой беспроигрышный вариант - диалог выбора файла/папки (перекладываем всю ответственность на юзера - что выберет, с тем и работает код).
 
New Сказал:
Код
1
Set A01 = Workbooks.Open(ThisWorkbook.Path & "\" & "file2.xlsm")

Спасибо, New, вот это я и хотел!


Hugo сказал:
Цитата
По этому принципу можно выбрать файл из папки, которая в папке с этим файлом (т.е. уровень ниже) ну или войти в папку уровнем выше (как точку отсчёта берём известный путь)..

Дорогой, Hugo!
Как используя:
Код
1
Set A01 = Workbooks.Open(ThisWorkbook.Path & "\" & "file2.xlsm")

-можно обратится к нужной рабочей папке, например superfolder?
 
Код
1
Set A01 = Workbooks.Open(ThisWorkbook.Path & "\superfolder\" & "file2.xlsm")

Это если папка рядом с файлом с макросом.
 
Hugo!Всё замечательно!Спасибо!
Цитата
Это если папка рядом с файлом с макросом.
Лишь добавлю, что папка superfolder должна находится в той же папке, где и файл-исполнитель с макросом!
Тема закрыта!
 
usersuperpupsik, извЕните (это Вы так писали) - на кой ... дублировать свой вопрос в нескольких сообщениях? Первый раз я Вам подправил. Посмотрите, пожалуйста, как получилось, и исправьте последующие сообщения! [МОДЕРАТОР]
 
New, попробуйте выполнить два макроса по очереди и посмотрите на результат

Статья:
http://msdn.microsoft.com/ru-ru/library/vstudio/0x9tb07z(v=vs.100).aspx


Код
1
2
3
4
5
6
7
8
9
10
Public objWrd As Object
Sub t1()
    Set objWrd = CreateObject("word.application"): objWrd.Visible = True
    objWrd.Quit
    Rem Set objWrd = Nothing
End Sub
 
Sub t2()
    Debug.Print objWrd Is Nothing
End Sub
Киса, я хочу Вас спросить, как художник — художника: Вы рисовать умеете?
Страницы: 1
Читают тему
Наверх
Loading...