Страницы: 1
RSS
Notepad (Блокнот) VBA
 
Извините, но Ваш поиск не дал результатов, если есть такая тема прошу перенаправить меня!
Вот в чем дело.
Мне нужно открыть 1.txt написать там по координатам (2, 7) (2-ая строка, 7 символ ) символ "С", сохранить, закрыть 1.txt. Затем открыть 1.txt, присвоить переменной simbol значение символа по координатам (2,7) в 1.txt!
Да, скажу что 1.txt находится в папке folder.Здесь же и лежит файл 1.xlsm с исполняющим макросом.
Как же это реализовать с помощью VBA?  :!:  
Пожалуйста, помогите.
Изменено: usersuperpupsik - 05.11.2013 11:53:09
 
А что уже сделали? На чем застряли?
Здесь есть небольшой пример работы с текстовыми файлами: Файловые функции VBA
в этом направлении копайте.
Самое простое считать файл и в нужном месте добавить символ, а затем пересохранить файл.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Вообще-то конечно в задании не раскрыта вся информация - есть ли уже этот файл, есть ли там минимум 2 строки, есть ли во второй строке минимум 7 символов...
Может его такой нужно с нуля сгенерить - пустой с одним символом?
Поэтому примера кода думаю не будет - писать подстраховываясь от всего и всюду всем лениво :)

А так да, принцип такой - открыть существующий файл, читать его, писать в другой, затем первый убить, второй переименовать.
Или прочитать сразу весь в массив, в массив внести изменения, перезаписать весь файл изменённой информацией из массива.
 
The_Prist, спасибо за ссылку.
Не могу понять как сделать это. Например в файле 1.txt написано:

1 2 3 4
5 6 7 8

Как теперь сделать так типа есть функция MyFunc(): берёт позицию символа, возвращает сам символ.
Таким образом если я скажу s=MyFunc(5), то s:3 (s будет равен 3)

Hugo,
Цитата
Или прочитать сразу весь в массив, в массив внести изменения, перезаписать весь файл изменённой информацией из массива.
Если я правильно понял, то после выполнения вот этого

Код
Public Sub Sub1()
Dim textik
    Open "E:\Text1.txt" For Input As #1 
    Do While Not EOF(1)  
        
        textik = textik + Input(1, #1)
    Loop
    
    Close #1
   
    [a1] = textik

End Sub


Надо сделать split:

Код
Dim textik As String
ReDim MyArray(1 To len(textik))
MyArray = Split(textik, "")


Затем изменить массив и записать его в 1.txt. Но как же это сделать(как записать массив в 1.txt)?
 
Не, тогда проще так:

Код
Set ts1 = CreateObject("Scripting.FileSystemObject").OpenTextFile(myPath1, 1)
arr1str = Split(ts1.ReadAll, vbCrLf) 'массив строк текста целиком
ts1.Close


Далее лезем в массив, меняем символ, затем ищем код как этот массив записать назад в файл :)
 
Чтобы изменить 1.txt с помощью языка vba и файла 1.xlsm нужно:


Код
'0. создать 1.txt в адресе D:\ и создать файл 1.xlsm в адресе D:\
'1. копировать все строки из файла 1.txt в массив:
Public Array1
Public Sub Sub1
Set Adress1 = CreateObject("Scripting.FileSystemObject" ;) .OpenTextFile("D:\1.txt", 1)
Array1 = Split(Adress1.ReadAll, vbCrLf) 'массив строк
Adress1.Close
End Sub


'2. изменить нужную строку,например 2-ую (изменить 2-ой элемент массива):
Public Sub Sub2
Array1(1)="222200000222222"
End Sub


'3. Скопировать массив в файл 1.txt:
Public Sub Sub3() ' удалить всё в файле 1.txt и копировать массив в файл 1.txt  
ni = 0
Open "D:\1.txt" For Output As #1
    U = (UBound(Array1) + 1)
    For ci = 1 To U
    Print #1, Array1(ni)
    ni = ni + 1
    Next ci
    
    Close #1
End Sub
Изменено: usersuperpupsik - 08.11.2013 21:57:30
 
Примерно так, возможны правда модификации, и писал бы на выход я средствами FSO, но есть одно важное замечание -
"создать файл 1.xlsm" совершенно не нужно.
Код может быть где угодно - в Экселе, Ворде, Поверпойнте вероятно тоже - и такой файл может вообще быть нигде не сохранён.
Вот если в vbs - тогда его точно где-то нужно сперва сохранить :)
 
Ура!!!
Спасибо The_Prist за помощь!!!
Спасибо Hugo за необычную идею типа:
1. прочитать сразу файл .txt в массив
2. изменить массив
3. копировать измененный массив в файл .txt
 
Ребят, а как сказать, открывай файл .txt в той же папке что и 1.xlsm (где и прописан код)???
Изменено: usersuperpupsik - 08.11.2013 20:11:56
 
ThisWorkbook.Path - путь к той папке, где живёт книга, из которой запущен макрос.
 
Извините, Юрий М, я правильно понял?
Код
 
Open "ThisWorkbook.Path\1.txt" For Output As #1


Код
Set Adress1 = CreateObject("Scripting.FileSystemObject").OpenTextFile("ThisWorkbook.Path\1.txt", 1)


Видимо, неправильно, т.к. получил ошибку (Path not found). А как же правильно использовать команду ThisWorkbook.Path?
 
Попробуйте так:
Код
Open ThisWorkbook.Path & "\" & "1.txt"
 
Спасибо, Юрий М, Вы здорово помогли!!!
Теперь код более красивый.Вот проверенная версия!!!


Код
Public Table1
Public Function ReadFile() 'копировать 1.txt в массив
 Set Adress1 = CreateObject("Scripting.FileSystemObject" ).OpenTextFile(ThisWorkbook.Path & "\" & "1.txt", 1) '!!!!!!!!!!!!!!!!!!!!!!!
 Table1 = Split(Adress1.ReadAll, vbCrLf)
 Adress1.Close
 'ReadFile = Table1
End Function

Public Function ReadString(yo) As String 'копировать конкретную строку
 Open ThisWorkbook.Path & "\" & "1.txt" For Input As #1 '!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 While EOF(1) <> True
 yi = yi + 1
 Line Input #1, A 
 If yi = yo Then
 yo = A
 GoTo exit1
 End If
 Wend
exit1: Close #1
ReadString = yo
End Function

Public Function WriteFile() ' удалить всё в 1.txt и копировать в 1.txt массив
ni = 0
Open ThisWorkbook.Path & "\" & "1.txt" For Output As #1
 U = (UBound(Table1) + 1)
 For ci = 1 To U
 Print #1, Table1(ni)
 ni = ni + 1
 Next ci
 Close #1
End Function

Public Sub Experiment()
ReadFile
[a1] = Table1(3)
Table1(3) = "44400004444444"
[b1] = Table1(3)
WriteFile
[c1] = ReadString(4)
End Sub
Изменено: usersuperpupsik - 08.11.2013 22:47:20
 
А теперь оформите всё тегом и уберите "пустоты"  :)
 
Всё сделал  ;)  , только у меня вопрос к Вам , Юрий М, при копировании из vba модуля в сюда на форум\сообщения мои коментарии превращаются в кракозябры, и я кропотливо переписываю их, как мне в будущем сэкономить время (я не докапываюсь  ;)  , просто нужен совет)
Изменено: usersuperpupsik - 08.11.2013 22:52:16
 
Совет: копировать при русской раскладке)
 
Спасибо, сработало :D !!!
Страницы: 1
Наверх