Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/18: Рейтинг темы: голосов - 18, средняя оценка - 5.00
7 / 7 / 0
Регистрация: 13.08.2012
Сообщений: 250

Ошибка при разбиении текста на символы (на вход данные из Excel)

13.08.2012, 10:22. Показов 3574. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пишу макрос для заполнения документа и для заполнения полей, разбитых на клетки, решил провести посимвольное заполнение.
Но при выполнении программы получаю ошибку Invalid qualifier с указанием на переменную value.
Подпрограмма для разбиения полученного содержимого ячеек на необходимое количество частей:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Sub x(ByVal leng As Integer, ByVal mark As String, ByVal volume As String, ByVal d As Boolean)
    If d Then
        ReDim ReplaceText(2) As String: ReplaceText() = Split(vol, ".")
    Else: ReDim ReplaceText(0 To Len(vol) - 1) As String: ReplaceText() = volume.ToCharArray
    End If
    ReDim FindText(leng - 1) As String
    For j = 1 To leng
        FindText(j) = "{" + mark + j + "}"
    Next j
    n = leng - 1
End Sub
На всякий случай держите
полный код.
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
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
Const ИмяФайлаШаблона = "Doc1.2.docx"
' Const КоличествоОбрабатываемыхСтолбцов = 82
Const РасширениеСоздаваемыхФайлов = ".docx"
 
Sub СформироватьДоговоры()
    ПутьШаблона = Replace(ThisWorkbook.FullName, ThisWorkbook.Name, ИмяФайлаШаблона)
    НоваяПапка = NewFolderName & Application.PathSeparator
    Dim row As Range, pi As New ProgressIndicator, FindText() As String, ReplaceText() As String
    r = Cells(Rows.Count, "A").End(xlUp).row: rc = r - 2  ' ???
    If rc < 1 Then MsgBox "Строк для обработки не найдено", vbCritical: Exit Sub
 
    pi.Show "Формирование договоров": pi.ShowPercents = True: s1 = 10: s2 = 90: p = s1: a = (s2 - s1) / rc
    pi.StartNewAction , s1, "Запуск приложения Microsoft Word"
 
    ' Dim WA As Word.Application, WD As Word.Document: Set WA = New Word.Application    ' c подключением библиотеки Word
    Dim WA As Object, WD As Object: Set WA = CreateObject("Word.Application")    ' без подключения библиотеки Word
 
    For Each row In ActiveSheet.Rows("7:" & r)
        With row
            ФИО = Trim$(.Cells(2)) & " " & Trim$(.Cells(3)) & " " & Trim$(.Cells(4))
            Filename = НоваяПапка & ФИО & РасширениеСоздаваемыхФайлов
 
            pi.StartNewAction p, p + a / 3, "Создание нового файла на основании шаблона", ФИО
            Set WD = WA.Documents.Add(ПутьШаблона): DoEvents
 
            pi.StartNewAction p + a / 3, p + a * 2 / 3, "Замена данных ...", ФИО
            For i = 1 To 82
                Select Case i
                    Case 25
                        Call x(Len(Trim$(.Cells(i))), Cells(6, i), Trim$(.Cells(i)), False) ' контрольная информация
                    Case 6, 16
                        Call x(3, Cells(6, i), Trim$(.Cells(i)), True) ' дата
                    Case 31, 41, 51
                        Call x(6, Cells(6, i), Trim$(.Cells(i)), False) ' идексы
                    Case 29, 63, 76
                        Call x(10, Cells(6, i), Trim$(.Cells(i)), False) ' номера телефона
                    Case Else
                        ReDim ReplaceText(0) As String ' для остальных ячеек
                        ReDim FindText(0) As String
                        FindText(0) = "{" + Cells(6, i) + "}": ReplaceText(0) = Trim$(.Cells(i))
                        n = 0
                End Select
                
                ' так почему-то заменяет не всё (не затрагивает таблицу)
                'WA.Selection.Find.Execute FindText, , , , , , , wdFindContinue, False, ReplaceText, True
 
                'pi.line3 = "Заменяется поле " & FindText
                For j = 0 To n ' вставка частей ячейки
                    With WD.Range.Find
                        .Text = FindText(j)
                        .Replacement.Text = ReplaceText(j)
                        .Forward = True
                        .Wrap = 1
                        .Format = False: .MatchCase = False
                        .MatchWholeWord = False
                        .MatchWildcards = False
                        .MatchSoundsLike = False
                        .MatchAllWordForms = False
                        .Execute Replace:=2
                    End With
                    DoEvents
                Next j
            Next i
            pi.StartNewAction p + a * 2 / 3, p + a, "Сохранение файла ...", ФИО, " "
            WD.SaveAs Filename: WD.Close False: DoEvents
            p = p + a
        End With
    Next row
 
    pi.StartNewAction s2, , "Завершение работы приложения Microsoft Word", " ", " "
    WA.Quit False: pi.Hide
    msg = "Сформировано " & rc & " договоров. Все они находятся в папке" & vbNewLine & НоваяПапка
    MsgBox msg, vbInformation, "Готово"
End Sub
 
 
Sub x(ByVal leng As Integer, ByVal mark As String, ByVal volume As String, ByVal d As Boolean)
    If d Then
        ReDim ReplaceText(2) As String: ReplaceText() = Split(vol, ".")
    Else: ReDim ReplaceText(0 To Len(vol) - 1) As String: ReplaceText() = volume.ToCharArray
    End If
    ReDim FindText(leng - 1) As String
    For j = 1 To leng
        FindText(j) = "{" + mark + j + "}"
    Next j
    n = leng - 1
End Sub
 
 
 
Function NewFolderName() As String
    NewFolderName = Replace(ThisWorkbook.FullName, ThisWorkbook.Name, "Договоры, сформированные " & Get_Now)
    MkDir NewFolderName
End Function
 
Function Get_Date() As String: Get_Date = Replace(Replace(DateValue(Now), "/", "-"), ".", "-"): End Function
Function Get_Time() As String: Get_Time = Replace(TimeValue(Now), ":", "-"): End Function
Function Get_Now() As String: Get_Now = Get_Date & " в " & Get_Time: End Function

За основу взят вполне рабочий макрос из интернета.

Добавлено через 9 часов 26 минут
Поправка.
Ошибка указывает на переменную volume.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.08.2012, 10:22
Ответы с готовыми решениями:

Ошибка при разбиении Acronis'ом : как восстановить данные?
Компу примерно 5 лет. Загрузился с LiveCD и начал Acronis'ом создавать диск &quot;D&quot;. Он по окончанию работы выдал что-то типа &quot;операции...

При разбиении строк на символы, в файл дописываются лишние пустые строки
Доброго времени суток! Попробовал сейчас взять текстовый файл, разбить его на символы и записать эти символы (по 1 в строке) в другой...

Теряются ли данные при разбиении тома средствами винды?
Здравствуйте! Хотелось бы просветиться по одному вопросу. Допустим у меня есть диск D, объемом 1,2 ТБ. Занято на нем около 700 ГБ. Я хочу...

22
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38171 / 21106 / 4307
Регистрация: 12.02.2012
Сообщений: 34,698
Записей в блоге: 14
14.08.2012, 09:50
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Апострофф Посмотреть сообщение
А я всегда в том окне пишу
- я тоже иногда пишу так же...
0
7 / 7 / 0
Регистрация: 13.08.2012
Сообщений: 250
14.08.2012, 16:04  [ТС]
Да я просто гений.
Засунул переопределение массива в цикл разбиения на символы и удивляюсь, почему массив пустой.
0
16.08.2012, 18:38

Не по теме:

А я вообще редко пишу и сразу все вижу. Просто всегда открыто окно Locals (View -> Locals Window) и расставлены точки останова Stop, где надо.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.08.2012, 18:38
Помогаю со студенческими работами здесь

Китайские символы вместо русского текста при экспорте в Excel
В Excel файле не отображаются русские буквы после экспорта, как это исправить подскажите пожалуйста) procedure...

Ошибка при разбиении на страницы
Если я пишу запрос таким образом, то разбиение на страницы нельзя осуществить? Set...

Ошибка при разбиении строк
Помоги пожалуйста не могу понять в чем конкретно ошибка string si = &quot;Один,Два,Три, Строка для разбора&quot;; const char...

Ошибка при разбиении программы на файлы(модули)
Исходный код: #include &lt;iostream&gt; #include &lt;cstdlib&gt; #include &lt;fstream&gt; #include &lt;conio.h&gt; using namespace std; struct...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
23
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru