Извините, но Ваш поиск не дал результатов, если есть такая тема прошу перенаправить меня! Вот в чем дело. Мне нужно открыть 1.txt написать там по координатам (2, 7) (2-ая строка, 7 символ ) символ "С", сохранить, закрыть 1.txt. Затем открыть 1.txt, присвоить переменной simbol значение символа по координатам (2,7) в 1.txt! Да, скажу что 1.txt находится в папке folder.Здесь же и лежит файл 1.xlsm с исполняющим макросом. Как же это реализовать с помощью VBA? :!: Пожалуйста, помогите.
А что уже сделали? На чем застряли? Здесь есть небольшой пример работы с текстовыми файлами: Файловые функции 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
Примерно так, возможны правда модификации, и писал бы на выход я средствами FSO, но есть одно важное замечание - "создать файл 1.xlsm" совершенно не нужно. Код может быть где угодно - в Экселе, Ворде, Поверпойнте вероятно тоже - и такой файл может вообще быть нигде не сохранён. Вот если в vbs - тогда его точно где-то нужно сперва сохранить
Ура!!! Спасибо The_Prist за помощь!!! Спасибо Hugo за необычную идею типа: 1. прочитать сразу файл .txt в массив 2. изменить массив 3. копировать измененный массив в файл .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
Всё сделал , только у меня вопрос к Вам , Юрий М, при копировании из vba модуля в сюда на форум\сообщения мои коментарии превращаются в кракозябры, и я кропотливо переписываю их, как мне в будущем сэкономить время (я не докапываюсь , просто нужен совет)