Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/15: Рейтинг темы: голосов - 15, средняя оценка - 4.67
132 / 15 / 2
Регистрация: 27.11.2013
Сообщений: 509
1

Как открыть текстовый файл с пом функции CreateObject

11.02.2018, 16:27. Показов 2873. Ответов 19
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть файл. Путь C:\Sample\Sample.txt. Хотелось бы открыть его с пом функции CreateObject в файле Книга1.xlsm. Хотелось бы примерчик простенький.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.02.2018, 16:27
Ответы с готовыми решениями:

Как открыть текстовый файл?
Можете сделать пример главного окна открыть txt фаил? Qt 4.8 Ничерта не пашет с 4 книг. Менял коды...

Как открыть текстовый файл
Подскажите пожалуйста, какой код вставить внутрь метода что бы при нажатии на кнопку открылся тхт...

Как открыть текстовый файл
Привет! Как открыть текстовый файл, чтобы содержимое отображалось в браузере. $fp =...

Как открыть текстовый файл?
Мне надо в проге при нажатии кнопки просто открыть текстовый файл. Как это сделать? Я делал так...

19
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
11.02.2018, 16:41 2
Не моё:
Visual Basic
1
2
3
4
5
Function ReadTXTfile(ByVal filename As String) As String
    Set fso = CreateObject("scripting.filesystemobject")
    Set ts = fso.OpenTextFile(filename, 1, True): ReadTXTfile = ts.ReadAll: ts.Close
    Set ts = Nothing: Set fso = Nothing
End Function
CreateObject присутствует
1
35 / 32 / 15
Регистрация: 23.12.2014
Сообщений: 97
11.02.2018, 16:55 3
To shavka, для этого Ваш файл Samle.txt должен содержать объект ActiveX, иметь конструктор внутри и ... называться Samle.dll... ,
а для текстового файла:
Visual Basic
1
2
3
4
5
6
7
8
Sub ReadTXTfile(ByVal filename As String) As String
    Set fso = CreateObject("scripting.filesystemobject")
    Set ts = fso.OpenTextFile("C:\Sample\Sample.txt", 1, True)
      MsgBox ts.ReadAll
    ts.Close
    Set ts = Nothing
    Set fso = Nothing
End Sub
to Hugo121, ... мда, а я думал интернет только у меня остался...
1
132 / 15 / 2
Регистрация: 27.11.2013
Сообщений: 509
11.02.2018, 17:36  [ТС] 4
AlexSmel,

Цитата Сообщение от AlexSmel Посмотреть сообщение
для этого Ваш файл Samle.txt должен содержать объект ActiveX, иметь конструктор внутри и ... называться Samle.dll...
чет как-то страшно. Не, это обычный текст файл без всяких длл. А как его перенести на лист Эксель?
0
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
11.02.2018, 17:42 5
Цитата Сообщение от shavka Посмотреть сообщение
как его перенести на лист Эксель?
- после того, как отработает мастер импорта данных из текста, удалить этот текстовый файл - всё, данные перенесены!
Только CreateObject для этого вообще не нужен.
1
132 / 15 / 2
Регистрация: 27.11.2013
Сообщений: 509
11.02.2018, 17:50  [ТС] 6
Hugo121,

Цитата Сообщение от Hugo121 Посмотреть сообщение
Только CreateObject для этого вообще не нужен.
Почему? Есть более подходящие методы?

Добавлено через 6 минут
AlexSmel, а у вас там в первой строчке не ошибка ли? as String в названии макроса в конце? Если убрать, то вба запрашивает имя макроса, а если оставить, вообще ничего не понимает
0
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
11.02.2018, 18:02 7
Если убрать, то нужно задавать имя файла в параметре, хоть он в коде и не используется
0
132 / 15 / 2
Регистрация: 27.11.2013
Сообщений: 509
11.02.2018, 18:05  [ТС] 8
Hugo121, ну не знаю, вба не пускает, пишет - ошибка.
0
35 / 32 / 15
Регистрация: 23.12.2014
Сообщений: 97
11.02.2018, 18:18 9
Цитата Сообщение от shavka Посмотреть сообщение
не ошибка ли?
Конечно, ошибка! Если Вы внимательно взглянете, то мой пример - это "недопеределка" функции Hugo121 (видимо, у нас попался один источник ) в процедуру, т.е. ее действительно можно вызвать и как макрос, и как процедуру, если Вы перепишете ее вот так
Visual Basic
1
Sub ReadTXTfile()
Добавлено через 10 минут
Цитата Сообщение от shavka Посмотреть сообщение
чет как-то страшно
Простите меня, я неудачно сыронизировал ...
1
11508 / 3794 / 681
Регистрация: 13.02.2009
Сообщений: 11,197
11.02.2018, 19:13 10
shavka,
Хотелось бы открыть его с пом функции CreateObject
Надо бы сначала определиться с целью! Вам что нужно? Шашечки или ехать?
А как его перенести на лист Эксель
А это уже зависит от содержания файла и в каком виде надо вывалить на лист. Возможно надо ещё обработать результат. Например разбить на строки. А строки на столбцы

Добавлено через 2 минуты
ну не знаю, вба не пускает, пишет - ошибка.
А это вообще воду в ступе толочь!
А я скажу, что всё пускает и ошибки не пишет! Поверишь?
Вот я не верю!
Файл с попытками покажи
1
132 / 15 / 2
Регистрация: 27.11.2013
Сообщений: 509
11.02.2018, 19:19  [ТС] 11
Alex77755,

Цитата Сообщение от Alex77755 Посмотреть сообщение
А это уже зависит от содержания файла и в каком виде надо вывалить на лист.
в строку надо вывести, или как его там выводят. А дальше то по столбцам я и сам могу.

Цитата Сообщение от Alex77755 Посмотреть сообщение
Шашечки или ехать
ехать конечно. Но я пришел к выводу, мож и ошибочно, что CreateObject самый быстрый и наименее памятозатратный.

Visual Basic
1
Sub ReadTXTfile(ByVal filename As String) As String
Ну вот как он пустит то? Обозначение типа переменной в названии?
0
11508 / 3794 / 681
Регистрация: 13.02.2009
Сообщений: 11,197
11.02.2018, 19:20 12
всё работает без переделок.
Миниатюры
Как открыть текстовый файл с пом функции CreateObject  
0
11508 / 3794 / 681
Регистрация: 13.02.2009
Сообщений: 11,197
11.02.2018, 19:29 13
Обозначение типа переменной в названии?
учи матчасть! Типы данных например

Добавлено через 7 минут
достаточно почитать справку:
При вызове процедур Sub или Function возможна позиционная передача аргументов, т.е. в порядке следования в описании процедуры. Кроме того, аргументы могут передаваться по именам, вне зависимости от позиции.
Например следующая процедура Sub имеет три аргумента:

Visual Basic
1
2
3
Sub PassArgs(strName As String, intAge As Integer, dteBirth As Date)
    Debug.Print strName, intAge, dteBirth
End Sub
Эту процедуру можно вызвать, передавая ее аргументы в соответствии с позициями и разделяя их запятой, как показано в следующем примере:

PassArgs "Маша", 26, #2-21-69#
1
132 / 15 / 2
Регистрация: 27.11.2013
Сообщений: 509
11.02.2018, 19:43  [ТС] 14
Alex77755,

Цитата Сообщение от Alex77755 Посмотреть сообщение
всё работает без переделок.
а, таки вы про фунцию! Не, с функциями я как-то не привык. Вы бы мне лучше подсказали, как вместо

Visual Basic
1
MsgBox ts.ReadAll
поставить что-то типа

Visual Basic
1
ThisWorkbook.Sheets("Лист2").Range("A1") = ts.responseText
или
Visual Basic
1
ThisWorkbook.Sheets("Лист2").Range("A1") = ts.ReadAll
оба кода нифика не работают, естессно
0
11508 / 3794 / 681
Регистрация: 13.02.2009
Сообщений: 11,197
11.02.2018, 19:55 15
Функцию можно вызвать и из процедуры!!!
Миниатюры
Как открыть текстовый файл с пом функции CreateObject  
1
35 / 32 / 15
Регистрация: 23.12.2014
Сообщений: 97
11.02.2018, 22:25 16
Лучший ответ Сообщение было отмечено shavka как решение

Решение

Цитата Сообщение от shavka Посмотреть сообщение
...вместо
Visual Basic
1
MsgBox ts.ReadAll
что-то типа
Visual Basic
1
ThisWorkbook.Sheets("Лист2").Range("A1") = ts.ReadAll
нифика не работают, естессно...
нифика не ... естессно
Миниатюры
Как открыть текстовый файл с пом функции CreateObject  
1
132 / 15 / 2
Регистрация: 27.11.2013
Сообщений: 509
12.02.2018, 00:03  [ТС] 17
AlexSmel, спасиббалшой, пошел процесс!
0
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
12.02.2018, 00:11 18
Лучший ответ Сообщение было отмечено shavka как решение

Решение

Имхо демонстрация применения функции в #15 как-то красивее чтоль.
Но можно проще:
Visual Basic
1
[a1] = CreateObject("Scripting.FileSystemObject").Getfile("c:\Example.txt").OpenasTextStream(1).ReadAll
Вставляйте эту строку в любой макрос.
Ну раз уж ничего разбивать по строкам/столбцам не нужно
0
132 / 15 / 2
Регистрация: 27.11.2013
Сообщений: 509
12.02.2018, 02:08  [ТС] 19
Hugo121, аднака красиво. И лаконично. Я дальше просто циклом по столбцам раскидывают. Правильно? Или есть что-то еще более продвинутое?
0
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
12.02.2018, 09:55 20
Да можно сразу в памяти всё что считали из файла раскидать как нужно в массив, его выгрузить на лист - будет не особо сложный код, и быстро отработает.
Но это конечно если файл не сотни мегабайт - правда такой и в ячейку вероятно не влезет... хотя не пробовал
Если файл огромный и сразу весь в массив не лезет или лезет слишком долго - можно считывать построчно, каждую строку сразу в памяти разбивать в массив и его выгружать на лист.
Или собирать массив на сотню/тысячу строк, выгружать - т.е. обрабатывать частями.
1
12.02.2018, 09:55
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.02.2018, 09:55
Помогаю со студенческими работами здесь

Как открыть текстовый файл ?
Есть программа Нужно написать функцию которая будет открывать текстовый файл с некоторыми...

Как открыть текстовый файл
С помощью OpenFileDialog получаю имя файла, как дальше его открыть? Свойство FileName имеет тип...

Как открыть текстовый файл в с++
В общем, прошу помочь понять эту часть. Задача состоит в том, что нужно разработать программу,...

Как открыть текстовый файл в textedit
Добрый день, дорогие друзья. Не хотелось бы показаться совсем глупым, но мне нужна помощь. Задача...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru