GPT-3.5 Chatbot

This app provides you full access to GPT-3.5 (4096 token limit). You don't need any OPENAI API key.

Chatbot

Напиши мне макрос на vba. Алгоритм работы, если в тексте документа встречается слово из списка, то оно пишется в блокнот 1, если слова в списке нет, то в блокнот 2

Вот макрос на VBA, который выполняет заданное действие:

Sub CheckWords()
Dim doc As Document
Dim rng As Range
Dim text As String

’ Открытие блокнота 1 и блокнота 2 для записи
Dim file1 As Integer: file1 = FreeFile
Open “путь_к_блокноту_1.txt” For Output As #file1

Dim file2 As Integer: file2 = FreeFile
Open “путь_к_блокноту_2.txt” For Output As #file2

’ Список слов, которые нужно проверить
Dim wordList As Variant
wordList = Array(“слово1”, “слово2”, “слово3”) ’ добавьте необходимые слова в список

’ Проверка каждого слова из списка в документе
Set doc = ActiveDocument
For Each word In wordList
Set rng = doc.Range
With rng.Find
.ClearFormatting
.Text = word
.MatchWholeWord = True
.MatchCase = False

’ Поиск и запись найденых слов в блокноты
Do While .Execute(Forward:=True) = True
text = rng.Text
If OpenFileForWriting(text) = True Then
WriteToFile file1, text
Else
WriteToFile file2, text
End If
Loop
End With
Next word

’ Закрытие блокнотов
Close #file1
Close #file2

’ Очистка памяти
Set doc = Nothing
Set rng = Nothing
End Sub

Function OpenFileForWriting(text As String) As Boolean
Dim result As Boolean
’ Логика определения, в какой блокнот записывать
’ Например, можно использовать инструкцию If-Then и здесь добавить свои условия
If InStr(text, “символ_для_блокнота_1”) Then
result = True
Else
result = False
End If
OpenFileForWriting = result
End Function

Sub WriteToFile(fileNum As Integer, text As String)
Print #fileNum, text
End Sub

Прежде чем запустить макрос, убедитесь, что вы изменили путь к блокноту 1 и блокноту 2. Замените "путь_к_блокноту_1.txt" и "путь_к_блокноту_2.txt" на фактический путь к соответствующим блокнотам на вашем компьютере.

Также необходимо добавить слова, которые нужно проверить, в переменную wordList.

После этого вы можете запустить макрос, и он пройдет по документу, найдет слова из списка и запишет их в блокнот 1 или блокнот 2 в зависимости от условий в функции OpenFileForWriting.

Пусть список слов будет браться из excel документа по столбцу а

Вот обновленная версия макроса, которая берет список слов из столбца A в Excel-документе:

Sub CheckWords()
Dim doc As Document
Dim rng As Range
Dim text As String

’ Открытие блокнота 1 и блокнота 2 для записи
Dim file1 As Integer: file1 = FreeFile
Open “путь_к_блокноту_1.txt” For Output As #file1

Dim file2 As Integer: file2 = FreeFile
Open “путь_к_блокноту_2.txt” For Output As #file2

’ Получение списка слов из Excel-документа
Dim xlApp As Object
Dim xlWorkbook As Object
Dim xlWorksheet As Object
Dim wordList As Variant

Set xlApp = CreateObject(“Excel.Application”)
Set xlWorkbook = xlApp.Workbooks.Open(“путь_к_excel_документу.xlsm”) ’ Замените на фактический путь к Excel-документу
Set xlWorksheet = xlWorkbook.Worksheets(“название_листа”) ’ Замените на фактическое название листа

wordList = xlWorksheet.Range(“A1:A” & xlWorksheet.Cells(xlWorksheet.Rows.Count, “A”).End(-4162).Row).Value ’ Проверяется весь столбец A с заполненными ячейками

’ Проверка каждого слова из списка в документе
Set doc = ActiveDocument
For i = LBound(wordList) To UBound(wordList)
word = wordList(i, 1)
Set rng = doc.Range
With rng.Find
.ClearFormatting
.Text = word
.MatchWholeWord = True
.MatchCase = False

’ Поиск и запись найденных слов в блокноты
Do While .Execute(Forward:=True) = True
text = rng.Text
If OpenFileForWriting(text) = True Then
WriteToFile file1, text
Else
WriteToFile file2, text
End If
Loop
End With
Next i

’ Закрытие Excel-документа
xlWorkbook.Close
xlApp.Quit
Set xlWorksheet = Nothing
Set xlWorkbook = Nothing
Set xlApp = Nothing

’ Закрытие блокнотов
Close #file1
Close #file2

’ Очистка памяти
Set doc = Nothing
Set rng = Nothing
End Sub

Function OpenFileForWriting(text As String) As Boolean
Dim result As Boolean
’ Логика определения, в какой блокнот записывать
’ Например, можно использовать инструкцию If-Then и здесь добавить свои условия
If InStr(text, “символ_для_блокнота_1”) Then
result = True
Else
result = False
End If
OpenFileForWriting = result
End Function

Sub WriteToFile(fileNum As Integer, text As String)
Print #fileNum, text
End Sub

Перед запуском макроса необходимо внести следующие изменения:
- В строке Open "путь_к_блокноту_1.txt" For Output As #file1 и Open "путь_к_блокноту_2.txt" For Output As #file2 замените "путь_к_блокноту_1.txt" и "путь_к_блокноту_2.txt" на фактический путь к блокнотам на вашем компьютере.
- В строке Set xlWorkbook = xlApp.Workbooks.Open("путь_к_excel_документу.xlsm") замените "путь_к_excel_документу.xlsm" на фактический путь к Excel-документу, содержащему список слов.
- В строке Set xlWorksheet = xlWorkbook.Worksheets("название_листа") замените "название_листа" на фактическое название листа, на котором находится столбец с словами.

После этого, запустите макрос и он должен выполнять проверку слов из списка в документе и записывать их в блокнот 1 или блокнот 2 в зависимости от условий в функции OpenFileForWriting.

Макрос должен запускаться в excel документе

Извините за недоразумение. Вот обновленная версия макроса, который будет запускаться в Excel-документе:

Sub CheckWords()
Dim doc As Object
Dim rng As Range
Dim text As String

’ Открытие блокнота 1 и блокнота 2 для записи
Dim file1 As Integer: file1 = FreeFile
Open “путь_к_блокноту_1.txt” For Output As #file1

Dim file2 As Integer: file2 = FreeFile
Open “путь_к_блокноту_2.txt” For Output As #file2

’ Получение списка слов из столбца A в активном листе Excel-документа
Dim wb As Workbook
Set wb = ThisWorkbook
Dim ws As Worksheet
Set ws = wb.ActiveSheet

Dim lastRow As Long
lastRow = ws.Cells(ws.Rows.Count, “A”).End(xlUp).Row

Dim wordList As Range
Set wordList = ws.Range(“A1:A” & lastRow)

’ Проверка каждого слова из списка в документе
Set doc = CreateObject(“Word.Application”)
doc.Visible = False
For Each word In wordList
Set rng = doc.ActiveDocument.Content
With rng.Find
.ClearFormatting
.Text = word.Value
.MatchWholeWord = True
.MatchCase = False

’ Поиск и запись найденных слов в блокноты
Do While .Execute(Forward:=True) = True
text = rng.Text
If OpenFileForWriting(text) = True Then
WriteToFile file1, text
Else
WriteToFile file2, text
End If
Loop
End With
Next word

’ Закрытие Word-документа
doc.Quit
Set doc = Nothing

’ Закрытие блокнотов
Close #file1
Close #file2
End Sub

Function OpenFileForWriting(text As String) As Boolean
Dim result As Boolean
’ Логика определения, в какой блокнот записывать
’ Например, можно использовать инструкцию If-Then и здесь добавить свои условия
If InStr(text, “символ_для_блокнота_1”) Then
result = True
Else
result = False
End If
OpenFileForWriting = result
End Function

Sub WriteToFile(fileNum As Integer, text As String)
Print #fileNum, text
End Sub

Перед запуском макроса необходимо внести следующие изменения:
- В строке Open "путь_к_блокноту_1.txt" For Output As #file1 и Open "путь_к_блокноту_2.txt" For Output As #file2 замените "путь_к_блокноту_1.txt" и "путь_к_блокноту_2.txt" на фактический путь к блокнотам на вашем компьютере.
- В функции OpenFileForWriting замените "символ_для_блокнота_1" на условие, которое определяет, в какой блокнот записывать слово.
- Запустите макрос в Excel-документе, и он будет выполнять проверку слов из столбца A в активном листе и записывать их в блокнот 1 или блокнот 2 в зависи
Где здесь ошибка