Файловый ввод-вывод в VBA
работает и ладно , а чем тебя не устравивает этот способ?
Private Declare Function ReadFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any,
ByVal nNumberOfBytesToRead As Long, lpNumberOfBytesRead As Long, ByVal lpOverlapped As Long) As Long
Call ReadFile(hDevice, abBuff(0 UBound(abBuff) + 1, nRead, 0&)
ну и т д
это 5 ,баллов! в VBA использовать winAPI - это конечно по -аццовски
А что делать если очень хочеца?....
Удобно пользоваться ActiveX для vbscripta Для этоно надо подключить Microsoft Scripting Runtime. Предоставляет объектную модель для работы с фс. в т.ч. и потоковый ввод-вывод.
См. мсдн FileSystemObject, например, это основной объект работы с файловой системой.
См. мсдн FileSystemObject, например, это основной объект работы с файловой системой.
VBScript связан с VBA примерно также, как Java с JavaScript.
VBScript связан с VBA примерно также, как Java с JavaScript.Вы совершенно правы, коллега. С лексической точки зрения.
Ты это написал чтобы вставить свои 5 копеек? Прежде чем писать, надо подумать, знаешь ли ты тему, о которой собрался высказаться.
Для тебя специально поясню: одна из областей применения VScript - это Windows Script Host.
Что это такое прочти сам. В данном случае интересно, что в нем можно использовать любой зарегистрированный в системе ActiveX dll. Для удобства работы с файлами в VBScript из WSH(или ASP) есть поставляемый с ОС ActiveX, естественно, его можно задействовать и из Visual Basic и из VBA, да хоть из С++(если тебе это поможет).
Для тебя специально поясню: одна из областей применения VScript - это Windows Script Host.
Что это такое прочти сам. В данном случае интересно, что в нем можно использовать любой зарегистрированный в системе ActiveX dll. Для удобства работы с файлами в VBScript из WSH(или ASP) есть поставляемый с ОС ActiveX, естественно, его можно задействовать и из Visual Basic и из VBA, да хоть из С++(если тебе это поможет).
Какие мы умные! Вот теперь объясни мне, почему в ответе на вопрос про VBA встретилось слово VBScript? Логично было предположить, что ты что-то путаешь, вот я тебя и поправил. А ты сразу огрызаться.
Какие мы умные! Вот теперь объясни мне, почему в ответе на вопрос про VBA встретилось слово VBScript? Логично было предположить, что ты что-то путаешь, вот я тебя и поправил. А ты сразу огрызаться.Он ничего не путает. Ответ корректен, поскольку с точки зрения использования ActiveX пофигу где ты находишься - внутри VBA в Office/Corel и пр. или VBScript-а в WSH. Кроме своей корректности, пост заключает в себе ответ на вопрос, заданный автором треда.
Твой же пост в резкой форме утверждал, что сообщение в корне неверно.
Погоди, он не утверждал, что не прав, он всего лишь заметил, что VBA и VBScript - разные вещи.
Хотя, конечно, оффтопик стоило поставить.
Хотя, конечно, оффтопик стоило поставить.
Поставим вопрос с другого бока.
Какие есть механизмы файлового ввода-вывода в VBA, который в офисе?
Какие есть механизмы файлового ввода-вывода в VBA, который в офисе?
Насколько я понял (не зная ни VBA, ни VBScript'а можно подключить некоторый ActiveX 

ага. и где описалово на эти функции? в МСДНе?
Какие есть механизмы файлового ввода-вывода в VBA, который в офисе?Какие-то может и есть, но они скорее всего сильно привязаны к офису. Что делать, если придется в Corel что-то писать? привел решение, которое работает везде.
На этом вопрос треда был исчерпан.
Да в мсдн. Вообще-то я написал:

Это стандартный компонент, считай что это часть стандартной библиотеки для VB\VBA\VBScript
См. мсдн FileSystemObject, например, это основной объект работы с файловой системой.

Это стандартный компонент, считай что это часть стандартной библиотеки для VB\VBA\VBScript
Мой способ работает на всех версиях офиса.
в кореле тоже есть VBA? хм. думаю и там заведётся.
переведи мой пример из первого поста на FileSystemObject-модель, пожалуйста.
Во всяком случае выглядит громоздее:
Этож песдец.
в кореле тоже есть VBA? хм. думаю и там заведётся.
переведи мой пример из первого поста на FileSystemObject-модель, пожалуйста.
Во всяком случае выглядит громоздее:
Const ForReading = 1, ForWriting = 2, ForAppending = 8
Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0
Dim fso, f, ts
Set fso = CreateObject("Scripting.FileSystemObject")
fso.CreateTextFile "test1.txt" ' Create a file.
Set f = fso.GetFile("test1.txt")
Set ts = f.OpenAsTextStream(ForWriting, TristateUseDefault)
ts.Write "Hello World"
ts.Close
Этож песдец.
1.
2. Зачем там лишние действия с созданием файла, проще вот как:
А вообще-то ты спросил
С субъективной(ессно моей) точки зрения, такой код существенно красивей чем стандартный басиковский. Но это имхо, для всех по разному...
Const ForReading = 1, ForWriting = 2, ForAppending = 8 Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0- это лишнее, при подключении ActiveX в VBA\VB, константы у тебя будут определены автоматически.
2. Зачем там лишние действия с созданием файла, проще вот как:
Dim fso As New FileSystemObject
Dim fs As TextStream
Set fs = fso.OpenTextFile("t.t", ForWriting, True)
fs.WriteLine "Hello world"
fs.Close
А вообще-то ты спросил
Есть другие способы. Я тебе сказал один из способов, что не так то?
С субъективной(ессно моей) точки зрения, такой код существенно красивей чем стандартный басиковский. Но это имхо, для всех по разному...
В общем это первый случай, когда я увидел, что для того, чтобы вывести строку в файл потребовалось аж две переменных.
Месье никогда не видел Java и .NET?
Одна неявная переменная и у тебя есть, это
1-2 переменные - один порядок 

Видел только мельком.
по до-диез даже курсором не ходил
to :
неявная - да. это логично, если религия хоть как-то позволяет с несколькими файлами работать..
по до-диез даже курсором не ходил

to :
неявная - да. это логично, если религия хоть как-то позволяет с несколькими файлами работать..
>В общем это первый случай, когда я увидел, что для того, чтобы вывести строку в файл потребовалось аж две переменных.
Вопрос на засыпку: сколько потебуется переменных, чтобы работать с двумя файлами? с N файлами?
Вопрос на засыпку: сколько потебуется переменных, чтобы работать с двумя файлами? с N файлами?
У благородного дона комплекс страха введения переменых?
Сорри за резкость, но.. в данном случае такое кол-во переменных не принципиально, кроме как с какой-либо субъективной точки зрения.
А вот писать так: "open "filte.txt" for output as #2" - дурной тон, ибо 2 могло быть использованно раньше для какого - либо файла. (Отмазки типа: "Да я помню, что где юзал" не катят.)
Правильно вот как:
Это рекомендуется в любой вменяемой книжке по VB, не я придумал.
Сорри за резкость, но.. в данном случае такое кол-во переменных не принципиально, кроме как с какой-либо субъективной точки зрения.
А вот писать так: "open "filte.txt" for output as #2" - дурной тон, ибо 2 могло быть использованно раньше для какого - либо файла. (Отмазки типа: "Да я помню, что где юзал" не катят.)
Правильно вот как:
Dim fnum
fnum = FreeFile
open "filte.txt" for output as fnum
'Работа с файлом
Close fnum
Это рекомендуется в любой вменяемой книжке по VB, не я придумал.
Оставить комментарий
yolki
как сделать?А то у меня на уме только атавизм от обычного бейсика:
работает - знаю. Есть другие способы? или он хоть и вижуал, но бейсик в натуре?