Страницы: 1
RSS
Пользовательская функция - записи в txt и чтения из txt
 
Здравствуйте.

Есть макрос.
В ячейку D7 вписан текст, который записывается в файл C:\1\1.txt , поверх прежнего содержимого.
А после двухсекундной задержки из файла C:\1\2.txt текст вписывается в ячейку D10.

Как этот макрос - сделать пользовательской функцией ?
 
Какой результат Вы ожидаете от этой функции?
Изменено: Sanja - 14.04.2018 21:25:03
Согласие есть продукт при полном непротивлении сторон
 
Sanja, ожидаемый результат такой:
1)Функция должна записать текст из ячейки D7 в файл 1.txt    
2)Функция должна вывести текст из файла 2.txt в ячейку D10.

То есть две операции.

Для этого функция должна быть введена в ячейку D10 и иметь вид:  =ФУНКЦИЯ(D7)
 
А как собираетесь использовать эту функцию? Только вот опишите подробно, по шагам от открытия файла до его сохранения и снова открытия.
Ибо я не представляю...
 
Знакомый макрос.
 
Hugo, описываю подробно по шагам:

Краткая предыстория: В папке на диске С - лежат два файла txt - 1.txt и 2.txt.  Файл 1.txt - пустой, а в файле 2.txt - что-то записано.

Шаг1.  Открываю файл эксель Файл.xls и устремляю свой пристальный взгляд на ячейку D7.
Шаг2.  Я ввожу некий произвольный текст - в ячейку D7 и нажимаю Enter.
Шаг3.  Начинает работать пользовательская функция, введенная ранее в ячейку D10 (работает уже без моего участия). Вид у нее примерно такой: =ФУНКЦИЯ(D7)
Шаг4.  Пользовательская функция - сохраняет содержимое ячейки D7 - в файле 1.txt
Шаг5.  Пользовательская функция - выжидает две секунды
Шаг6.  Пользовательская функция - читает содержимое файла 2.txt и выводит это содержимое в ячейку D10

(Макрос уже это все делает.   Вопрос - как это сделать пользовательской функцией ? )
Изменено: Dim Ozerov - 14.04.2018 22:33:38
 
Если есть процедура, в чем сложность положить этот код в функцию? Возвращайте функцией код ошибки, если что-то пошло не так и к примеру 0 если все прошло без ошибок.
Изменено: bedvit - 15.04.2018 07:32:06
«Бритва Оккама» или «Принцип Калашникова»?
 
bedvit, сложность в том - что я не знаю как положить этот код в функцию - поэтому и спрашиваю.
 
Шаг6 еще можно реализовать, а вот все остальное...Функция возвращает значение в ту ячейку, в которой она записана. как Вы собираетесь вставить функцию в txt-файл?
Согласие есть продукт при полном непротивлении сторон
 
Цитата
Sanja, Sanja написал:
Функция возвращает значение в ту ячейку, в которой она записана.
Ну тогда не в ту ячейку, в которой она записана, а в какую-нибудь другу ячейку.
Соседнюю ячейку например.
 
Так ЧТО она (функция) должна возвратить 'не в ту ячейку' после выполнения шагов 1-5 ?
Согласие есть продукт при полном непротивлении сторон
 
Цитата
Sanja написал:
Вы собираетесь вставить функцию в txt-файл?
я так понял нужно вставить какой-то текст из одной ячейки в один txt файл, а из другого txt файла текст вставить в другую ячейку, как результат функции.
«Бритва Оккама» или «Принцип Калашникова»?
 
Пожалуйста...
«Бритва Оккама» или «Принцип Калашникова»?
 
Добавил ввод данных из ячейки в файл (запамятовал в первой реализации).
Смотрим:
Код
Function GetFileString(RangeX As Range) As String
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    If objFSO.FileExists(file1) Then
        Set objOTS = objFSO.OpenTextFile(file1, 8)
    Else
        Set objfile = objFSO.CreateTextFile(file1)
        Set objfile = Nothing
        Set objOTS = objFSO.OpenTextFile(file1, 8)
    End If
    objOTS.Write vbNewLine & RangeX.Value
    Application.Wait (Now + TimeValue("0:00:02"))
    Set objTextFile = objFSO.OpenTextFile(file2, 1)
    GetFileString = objTextFile.Readall
    Set objTextFile = Nothing
    Set objOTS = Nothing
    Set objFSO = Nothing
End Function
«Бритва Оккама» или «Принцип Калашникова»?
 
bedvit, подскажите - а вот у вас в коде стоит ожидание - 2 секунды.
Я ставил и десять секунд и двадцать - все равно срабатывает мгновенно.

То есть в пользовательской функции - вообще невозможно поставить задержку времени ?
 
Цитата
Dim Ozerov написал:
вот у вас в коде стоит ожидание
Код не менял, взял ваш.
Действительно Application.Wait не срабатывает, надо посмотреть почему.
Можно сделать так:
Код
#If VBA7 Then
    Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal milliseconds As LongPtr) 'MS Office 64 Bit
#Else
    Public Declare Sub Sleep Lib "kernel32" (ByVal milliseconds as Long) 'MS Office 32 Bit
#End If
Const file1 As String = "C:\1\1.txt"
Const file2 As String = "C:\1\2.txt"
Function GetFileString(RangeX As Range) As String
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    If objFSO.FileExists(file1) Then
        Set objOTS = objFSO.OpenTextFile(file1, 8)
    Else
        Set objfile = objFSO.CreateTextFile(file1)
        Set objfile = Nothing
        Set objOTS = objFSO.OpenTextFile(file1, 8)
    End If
    objOTS.Write vbNewLine & RangeX.Value
    'Application.Wait (Now + 2 / 86400)
    Sleep 2000
    Set objTextFile = objFSO.OpenTextFile(file2, 1)
    GetFileString = objTextFile.Readall
    Set objTextFile = Nothing
    Set objOTS = Nothing
    Set objFSO = Nothing
End Function
«Бритва Оккама» или «Принцип Калашникова»?
 
bedvit, теперь все заработало.
Спасибо большое.
Страницы: 1
Наверх