Vba word чтение строки

rioba

0 / 0 / 1

Регистрация: 16.04.2012

Сообщений: 34

1

24.12.2017, 19:12. Показов 7166. Ответов 11

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Как прочитать построчно в Word ?
Вот что смог накидать но уходит в цикл либо ошибка

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Dim r As Range 
  Set r = ActiveDocument.Range 
    Set rd = ActiveDocument.Range 
  With r.Find 
    .ClearFormatting 
    .Text = "Список:" 
    .Forward = True 
    .Wrap = wdFindStop 
    .Format = False 
    .MatchCase = False 
    .MatchWholeWord = False 
    .MatchWildcards = False 
    If .Execute Then 
Do While r.End 
 
      Set r = r.Paragraphs(1).Next.Range 
      MsgBox r.Text 
Loop 
    Else 
      MsgBox "не найдено" 
      Exit Sub 
    End If 
  End With



0



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

24.12.2017, 19:12

11

Модератор

Эксперт MS Access

11341 / 4660 / 748

Регистрация: 07.08.2010

Сообщений: 13,497

Записей в блоге: 4

24.12.2017, 19:46

2

Цитата
Сообщение от rioba
Посмотреть сообщение

Как прочитать построчно в Word ?

не поняла вопроса …. может пример выложите
строка и абзац все же разные понятия



0



0 / 0 / 1

Регистрация: 16.04.2012

Сообщений: 34

24.12.2017, 19:48

 [ТС]

3

shanemac51, допустим в word имеется список:
123
456
789

Как мне построчно посчитать ?
что бы каждый msgbox был «123» а потом со значением «456» и последний «789»



0



Остап Бонд

Заблокирован

24.12.2017, 20:01

4

rioba, а кроме этих строк (в данном случае трех) в документе есть ещё что-нибудь?

Добавлено через 1 минуту
Файл-пример приложите, чтобы вас понять можно было.



0



0 / 0 / 1

Регистрация: 16.04.2012

Сообщений: 34

24.12.2017, 20:02

 [ТС]

5

Остап Бонд,
нет, после 789 кончается документ



0



0 / 0 / 1

Регистрация: 16.04.2012

Сообщений: 34

24.12.2017, 20:04

 [ТС]

6



0



Остап Бонд

Заблокирован

24.12.2017, 20:06

7

Оно?

Visual Basic
1
2
3
4
5
6
7
8
Sub main()
Dim a() As String
a = Split(ActiveDocument.Range.Text, vbCr)
Dim i As Long
For i = 0 To UBound(a) - 1
  MsgBox a(i)
Next
End Sub



0



0 / 0 / 1

Регистрация: 16.04.2012

Сообщений: 34

24.12.2017, 20:12

 [ТС]

8

Остап Бонд, Спасибо большое!
А как сделать что бы отображал после слов «Список:» ?
Так как в документе могут быть изменения и строки могут измениться



0



Остап Бонд

Заблокирован

24.12.2017, 20:20

9

Лучший ответ Сообщение было отмечено rioba как решение

Решение

Visual Basic
1
2
3
4
5
6
Dim a() As String
a = Split(Split(ActiveDocument.Range.Text, "Список:")(1), vbCr)
Dim i As Long
For i = 1 To UBound(a) - 2
  MsgBox a(i)
Next



1



0 / 0 / 1

Регистрация: 16.04.2012

Сообщений: 34

25.12.2017, 17:57

 [ТС]

10

Остап Бонд, Спасибо
Но появилась такая проблема бывает что значения которые читает макрос заменяет значения на 131313131313 или
прибавляет 100, почему ??



0



Остап Бонд

Заблокирован

25.12.2017, 18:22

11

rioba, пример приложите.



0



0 / 0 / 1

Регистрация: 16.04.2012

Сообщений: 34

26.12.2017, 17:33

 [ТС]

12

Остап Бонд, все работает, моя ошибка)



0



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

26.12.2017, 17:33

12

В нынешнее время использование текстовых файлов для обмена данными или хранения данных становится редкостью, но тем не менее, все еще встречается. Приведу два варианта чтения текстового файла из VBA. Каждый способ может быть полезен в своей ситуации.

Способ 1. Открытие (чтение) текстового файла целиком

Можно открыть текстовый файл без учета каких-либо разделителей, сплошным текстом:

Set objExcel = New Excel.Application
Set wb = objExcel.Workbooks.Open("имя_файла")

либо, если используются разделители колонок, можно их задействовать:

Открытие текстового файла с разделителем Tab:

Set objExcel = New Excel.Application
Set wb = objExcel.Workbooks
wb.OpenText Filename:="имя_файла", DataType:=xlDelimited, Tab:=True

Открытие текстового файла с разделителем ; (точка с запятой):

Set objExcel = New Excel.Application
Set wb = objExcel.Workbooks
wb.OpenText Filename:="имя_файла", DataType:=xlDelimited, Other:=True, OtherChar:=";"

В параметрах можно так же добавить Origin:=xlMSDOS, если текстовый файл в DOS-кодировке.

После открытия файла, его можно пройти как обычные ячейки Excel-кого листа.

Способ 2. Чтение текстового файла построчно

Здесь используется классический вариант чтения как в большинстве языков программирования: открытие файла, цикл чтения построчно, закрытие файла.

f = FreeFile
Open "имя_файла" For Input As #f
Do While Not EOF(f)
  Line Input #f, s
  ' что-нибудь делаем с полученной строкой s
Loop
Close f

В первой строке определяем число, представляющее следующий номер файла, доступный для использования оператором Open. Затем открываем файл, после чего делаем цикл в котором происходит построчное чтение.

Формулировка задачи:

Как прочитать построчно в Word ?
Вот что смог накидать но уходит в цикл либо ошибка

Код к задаче: «Построчное чтение Word»

textual

Dim a() As String
a = Split(Split(ActiveDocument.Range.Text, "Список:")(1), vbCr)
Dim i As Long
For i = 1 To UBound(a) - 2
  MsgBox a(i)
Next

Полезно ли:

9   голосов , оценка 4.000 из 5

В нынешнее время использование текстовых файлов для обмена данными или хранения данных становится редкостью, но тем не менее, все еще встречается. Приведу два варианта чтения текстового файла из VBA. Каждый способ может быть полезен в своей ситуации.

Способ 1. Открытие (чтение) текстового файла целиком

Можно открыть текстовый файл без учета каких-либо разделителей, сплошным текстом:

либо, если используются разделители колонок, можно их задействовать:

Открытие текстового файла с разделителем Tab:

Открытие текстового файла с разделителем ; (точка с запятой):

В параметрах можно так же добавить Origin:=xlMSDOS , если текстовый файл в DOS-кодировке.

После открытия файла, его можно пройти как обычные ячейки Excel-кого листа.

Способ 2. Чтение текстового файла построчно

Здесь используется классический вариант чтения как в большинстве языков программирования: открытие файла, цикл чтения построчно, закрытие файла.

В первой строке определяем число, представляющее следующий номер файла, доступный для использования оператором Open. Затем открываем файл, после чего делаем цикл в котором происходит построчное чтение.

Практическое руководство. Чтение из текстовых файлов в Visual Basic

Метод ReadAllText объекта My.Computer.FileSystem позволяет считывать данные из текстового файла. Если содержимое файла имеет определенную кодировку, например ASCII или UTF-8, ее можно указать в аргументе.

Если вы производите чтение из файла с символами национальных алфавитов, необходимо указать кодировку файла.

Чтобы прочитать файл по одной строке, используйте метод OpenTextFileReader объекта My.Computer.FileSystem . Метод OpenTextFileReader возвращает объект StreamReader. С помощью метода ReadLine объекта StreamReader можно прочитать файл по одной строке. Проверить, достигнут ли конец файла, можно с помощью метода EndOfStream объекта StreamReader .

Чтение данных из текстового файла

Для считывания содержимого текстового файла в строку используйте метод ReadAllText объекта My.Computer.FileSystem , указав путь. В следующем примере содержимое файла test.txt считывается в строку и затем отображается в окне сообщения.

Чтение данных из зашифрованного текстового файла

Для считывания содержимого текстового файла в строку используйте метод ReadAllText объекта My.Computer.FileSystem , указав путь и тип кодировки файла. В следующем примере содержимое файла test.txt в кодировке UTF32 считывается в строку и затем отображается в окне сообщения.

Отказоустойчивость

При следующих условиях возможно возникновение исключения:

Путь является недопустимым, поскольку путь представляет собой строку нулевой длины (пустую строку), либо содержит только пробелы, либо содержит недопустимые знаки, либо представляет собой путь к устройству (ArgumentException).

Путь не является допустимым, поскольку он равен Nothing (ArgumentNullException).

Файл уже используется другим процессом или возникла ошибка ввода-вывода (IOException).

Длина пути превышает максимальную длину, определенную в системе (PathTooLongException).

Имя файла или каталога в пути содержит двоеточие (:) или имеет недопустимый формат (NotSupportedException).

Не хватает памяти для записи строки в буфер (OutOfMemoryException).

У пользователя отсутствуют необходимые разрешения на просмотр пути (SecurityException).

По имени файла не всегда можно с уверенностью судить о его содержимом. Например, файл с именем Form1.vb может вовсе не быть исходным файлом Visual Basic.

Следует проверять все входные данные перед использованием их в приложении. Содержимое файла может отличаться от ожидаемого, поэтому может не удаться прочесть файл с помощью методов чтения.

Функции для работы с текстовыми файлами

Данные функции предназначены для работы с текстовыми файлами из VBA Excel.

Используя эти функции, вы при помощи одной строки кода сможете записать текст из переменной в файл, или наоборот, загрузить содержимое текстового файла в переменную.

Чтение текстового файла в переменную:

  • 101835 просмотров

Комментарии

Могу написать макрос под заказ (платно)

Как можно задать строки для чтения/записи из txt?
Пример:
Есть файл txt
Прораб
Вася
Петя

Работники
Саша
Андрей
Коля

Необходимо занести имена прорабов в один массив arr1(), а имена работников в другой arr2(). Изменить имена рабочих и их количество и вернуть в txt новые значения. Т.е. массивы динамические, а идентифицируем начало и конец соответствующего массива в txt по шапке в начале и пустой строке в конце.

В UTF-8 сохранять так
Function SaveTXTfile(ByVal filename As String, ByVal txt As String) As Boolean
On Error Resume Next: Err.Clear
Set stream = CreateObject(«ADODB.Stream»)
stream.Type = 2 ‘text
stream.Charset = «utf-8»
stream.Open
stream.writetext Replace(txt, Chr(10), vbNewLine)
stream.savetofile filename, 2
End Function

Добрый день!
Помогите еще в одной вещи.
По дефолту пишет в ANSI, а нужно UTF-8

Neri, замените в коде

Добрый день!
У меня есть ячейка, в которой спомощью функции сцепить собраные несколько значений и исползуется символ переноса строки
Выглядит это примерно вот так:
=СЦЕПИТЬ(R3 & СИМВОЛ(10) & S3 & СИМВОЛ(10))
«Строка 1»
«Строка 2»
Как можно записать в файл, но чтобы каждая строка писалась с новой строки?

Добрый день. А кто подскажет, какие применять команды для поиска части текста в файле (.xml), потом копировать его и этим текстом переименовывать папку или файл этот же? Спасибо.

Используйте функцию ChangeFileCharset из этой статьи:
http://excelvba.ru/code/Encode

получится что-то типа такого:

помогите плиииз решить задачку . у меня есть файл Эксель, мне его надо сохранить как текстовый с кодировкой Unicode, но при сохранении в этом формате програма добавляет две пустые строки, мне удалось убрать две пустые строки, но теперь он в конце первой строки ставит какой то символ, который я никак не могу убрать. где ошибка

ActiveWorkbook.SaveAs Filename:=path, FileFormat:=xlTextWindows, _
CreateBackup:=False
Dim y As String
Open path For Input As #1
Line Input #1, y
Close #1
Open path For Output As #2
y = Replace(y, «»»», «»)
y = StrConv(y, vbUnicode)
y = Replace(y, Chr(34), «»)
Print #2, y
Close #2

точно в несколько раз больше?
fnum = FreeFile()
Open «C:11.txt» For Input As #fnum
Temp = Split(Input(LOF(fnum), #fnum), vbNewLine)
Close #fnum

Никто не спорит, — улучшать (дорабатывать) функцию можно бесконечно.
Чтобы нужные строки из файла брались, — кода будет в несколько раз больше.

Можете сами написать подобную функцию, взяв за основу этот код,
и сделав выборку нужный строки из массива.
Ну или заказать готовое решение.

А вопрос то актуальный. Дополнив функцию этой возможностью, её функционал стал бы гораздо качественне.

Можно с помощью Вашей функции взять только определенные строки, например со 2 по 20

Уберите строку Option Explicit — тогда не будет выскакивать ошибка Variable not defined

Пишет Variable not defined, указывая на binaryStream. Странно, ведь там все так же. 🙁

Mix, используйте эту функцию с третьим параметром «utf-8noBOM«

Добрый вечер!
Делаю по второму примеру, файл сохраняется в кодировке ANSI. Подскажите, как изменить данный пример чтобы сохранялось в кодировке utf-8 без BOM?

Это мое первое общение с VBA 🙂

Можно, конечно, и номер строки задать, откуда будут вставляться данные, — но код будет намного сложнее.
Алгоритм:
1) считываем весь текст из файла
2) разбиваем его на 2 части (по заданному номеру строки
3) формируем новый текст: 1-я часть + вставляемый текст + 2-я часть
4) записываем результат в тот же файл

Насчёт XML: очень не рекомендую использовать такой метод для XML, очень вероятны ошибки.
Там проще использовать объектную модель XML, программно добавляя новые узлы.

Очень интересна функция Добавление в текстовый файл из переменной, но так как я только начала изучать VBA, непонятно можно ли указать номер строки (в середине текста) начиная с которой начать добавление строк. И можно ли использовать эту функцию для добавления xml файл?

Здравствуйте! Подскажите пожалуйста, какой код надо написать, чтобы работал такой макрос: по нажатию кнопки выбирать папку, в которой есть текстовые файлы. В книгу вставляются листы с названиями от имени файлов в этой папке и в эти листы вводятся данные из этих файлов. Файлы содержат разную информацию: матрица, фамилии и дата рождения и т.д. Спасибо.

Anddre — если заменить «ReadTXTfile» на «txt»,
то тогда функция будет всегда возвращать пустое значение. Любая Ф-я почти всегда должна содержать оператор присвоения значения переменной с именем самой функции.

Наконец я нашел решение! Спасибо огромное!
В моем случае, при сохранении TXTфайла с разделителями табуляции, нужно было записать первым пустой столбец, но любимый EXCEL сносил его и записывал файл таким образом что все столбцы смещались влево на одну позицию. запись Cells(1,1) = chr(09) приводила к возникновению цепочки сиволов кавычки-табуляция-кавычки в начале файла.
Пришлось прописывать Cells(1,1) = «?» (покрайней мере его видно в тексте), и тогда структура вроде сохранялась. Но система под которую этот файлик готовился могла на такое «нововведение» заругаться.
Как же я обрадовался когда удалось удалить из первой позиции аккруратно вырезать этот «?» и перезаписать файл в чистом виде.
Еще раз спасибо.

Спасибо за ресурс! Очень полезный. У меня несколько вопросов:

1) OpenTextFile(filename, 1, True)
второй и третий параметр этой функции что означают?
(а то редактор не выводит всплывающую подсказку)

2) Можно ли как-то считать только вторую строку текстового файла или записать во вторую строку?

3) При выведении значения в ячейку с помощью ReadTXTfile, в конце строки вместо переноса у меня стоит квадратик (нераспознанный знак), этого как-то можно избежать?

Заменить-то можно, но зачем?
Тогда придётся писать в коде дополнительную строку ReadTXTfile = txt
чтобы функция возвратила считанный из файла текст.

А так, как сейчас, всё работает без лишних строк.
(Мы намеренно записываем текст именно в ReadTXTfile, а не в какую-то текстовую переменную, поскольку функция должна возвратить загруженный текст)

I need to find a specific string of text from a large source of material. I’ve just used Excel VBA up to this point, so I don’t know the Word objects and I ended up just recording some macros and working with what I had. However, this way is very inefficient. I looked on Stack Overflow, but I didn’t understand what they were doing, so I just did it this way.

What I am mostly looking for is the objects used in Word VBA that are equivalent to the Excel ‘Range’, ‘Cells’, ‘Row’, and ‘Column’. I looked on MSDN, but there is so much material there that you need to have an idea of what you are looking for, and I couldn’t find any other sites that would help.

This is what I wrote, and it did the job, but it is very inefficient.

Sub FindMediaInBraces()

    ' Separate needed text
    Selection.HomeKey Unit:=wdStory
    With Selection.Find
        .Text = "[Media"
        .Replacement.Text = "^p^p[Media"
        .Forward = True
        .Wrap = wdFindContinue
    End With
    Selection.Find.Execute Replace:=wdReplaceAll

    Selection.HomeKey Unit:=wdStory
    With Selection.Find
        .Text = ".jpg]"
        .Replacement.Text = ".jpg]^p^p"
        .Forward = True
        .Wrap = wdFindContinue
    End With
    Selection.Find.Execute Replace:=wdReplaceAll

    Selection.HomeKey Unit:=wdStory
    With Selection.Find
        .Text = ".png]"
        .Replacement.Text = ".png]^p^p"
        .Forward = True
        .Wrap = wdFindContinue
    End With
    Selection.Find.Execute Replace:=wdReplaceAll

    ' Remove text that doesn't start correctly
    Dim i As Long

    Selection.HomeKey Unit:=wdStory
    For i = 1 To ActiveDocument.Paragraphs.count
        Selection.MoveDown Unit:=wdParagraph, count:=1, Extend:=wdExtend
        With Selection.Find
            .Execute FindText:="[Media"
            .Forward = True
            If .Found = True Then
                Selection.MoveDown Unit:=wdParagraph, count:=1
            Else
                Selection.Delete Unit:=wdCharacter, count:=1
            End If
        End With
    Next

End Sub

Example Text

Original

Type: MC
Objectives: 2.6
16) [HTML]If <i>y</i> varies directly with <i>x</i>, write an equation for the direct variation. Then find the value. If <i>y</i> = -4 when <i>x</i> = -28, what is the value of <i>x</i> when <i>y</i> = 5?[/HTML]
*a. `$y=frac{1}{7}x;,, 35$`
b. `$y=-frac{1}{7}x;,, -35$`
c. `$y=7x;,, frac{5}{7}$`
d. `$y=-7x;,, -frac{5}{7}$`

Type: MC
Objectives: 3.3
21) Select the graph that correctly represents the following system of equations: 
  `$y=-frac{5}{3}x+3$`
  `$y=frac{1}{3}x-3$`
*a. [Media:Media/Images/Problem 21a.jpg]
b. [Media:Media/Images/Problem 21b.jpg]
c. [Media:Media/Images/Problem 21c.jpg]
d. [Media:Media/Images/Problem 21d.jpg]

After Macro

[Media:Media/Images/Problem 21a.jpg]
[Media:Media/Images/Problem 21b.jpg]
[Media:Media/Images/Problem 21c.jpg]
[Media:Media/Images/Problem 21d.jpg]

This is what I found on Stack Overflow, but I don’t know the objects to use to apply it, and I don’t know if it would actually work in this case.

dim str as string
dim openPos as integer
dim closePos as integer
dim midBit as string

str = "NUMBER(8,3)"
openPos = instr (str, "(")
closePos = instr (str, ")")
midBit = mid (str, openPos+1, closePos - openPos - 1)

Понравилась статья? Поделить с друзьями:
  • Vba вставить разрыв страницы word
  • Vba word цвет шрифта
  • Vba время в формате excel
  • Vba word цвет фона
  • Vba включить макрос excel