Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[44.197.108.187] |
|
Сообщ.
#1
,
|
|
|
Здраствуйте. Хотел создать программу автоматического добавления автозамен из таблицы.
Прикреплённый файл________________.JPG (6,06 Кбайт, скачиваний: 195)
Но столкнулся с проблемой при взятии текстового значения из ячейки таблицы и последующем добавлении возникает ошибка (см. скриншот). Прикреплённый файл________________.JPG (6,06 Кбайт, скачиваний: 195) из за того что в конце есть лишние пробелы. При отладке программы в конце строки отображаются какие то квадраты (см. скрин). Прикреплённый файл________________.JPG (6,06 Кбайт, скачиваний: 195) Я использовал функцию удаления пробелов в конце строки Trim(), но оне не убирает данные символы. Не подскажете что делать? Sub Макрос3() Dim longstring, shortstring, longs, shorts As String Dim iCell As Range Dim i As Integer Dim j As Integer Dim N As Integer Dim Num As Integer N = 58 For i = 12 To N ActiveDocument.Tables(1).Cell(i, 1).Select shortstring = Selection.text shorts = RTrim(shortstring) ActiveDocument.Tables(1).Cell(i, 2).Select longstring = Selection.text AutoCorrect.Entries.Add Name:=shortstring, Value:=longstring Next i End Sub |
Сообщ.
#2
,
|
|
|
Йто символы конца яйейки.
Можно тупо удалить 2 символа: shortstring = Left(shortstring, Len(shortstring) - 2) |
Сообщ.
#3
,
|
|
|
Цитата MIF @ Йто символы конца яйейки. Можно тупо удалить 2 символа: shortstring = Left(shortstring, Len(shortstring) - 2) да просто не в каждой строке есть эти символы, там где 2 строки в ячейке таблицы, почему то их нет |
Сообщ.
#4
,
|
|
|
Тогда проанализировать что в конце строки
Dim ascii As Long ascii = Asc(Right(shortstring, 1)) и удалять только когда они есть Const CHAR_TO_DELETE As Long = Your_Value If Len(shortstring) > 0 Then If Asc(Right(shortstring, 1)) = CHAR_TO_DELETE Then shortstring = Left(shortstring, Len(shortstring) - 1) End If End If |
Сообщ.
#5
,
|
|
|
Цитата MIF @ Тогда проанализировать что в конце строки Dim ascii As Long ascii = Asc(Right(shortstring, 1)) и удалять только когда они есть Const CHAR_TO_DELETE As Long = Your_Value If Len(shortstring) > 0 Then If Asc(Right(shortstring, 1)) = CHAR_TO_DELETE Then shortstring = Left(shortstring, Len(shortstring) - 1) End If End If спасибо буду пробовать Добавлено Цитата Fellinggood @ Цитата MIF @ и удалять только когда они есть Const CHAR_TO_DELETE As Long = Your_Value А что значит это объявление |
Сообщ.
#6
,
|
|
|
Значение, найденное в первом сниппете.
|
Сообщ.
#7
,
|
|
|
Окончание ячейки - CHR(7).
Значение ячейки, как я вижу - одна строка. Так что shortstring = Split(Replace(Selection.text, CHR(7), ""), CHR(13))(0) Уберётся и символ завершения ячейки, и, при наличии, хвостовые переводы строк. |
Сообщ.
#8
,
|
|
|
Цитата Akina @ Окончание ячейки - CHR(7). Значение ячейки, как я вижу - одна строка. Так что shortstring = Split(Replace(Selection.text, CHR(7), ""), CHR(13))(0) Уберётся и символ завершения ячейки, и, при наличии, хвостовые переводы строк. Спасибо Добавлено Спасибо всем, вот как получилось Sub Макрос3() ' ' Макрос3 Макрос ' Макрос записан 15.10.2020 User Dim longstring, shortstring, longs, shorts As String Dim iCell As Range Dim i As Integer Dim j As Integer Dim N As Integer Dim Num As Integer Dim ascii As Long Const CHAR_TO_DELETE As Long = 7 '7 означает ascii код символа "конца строки - квадратик" найденный через функцию ascii = Asc(Right(shortstring, 1)) Dim proverka As Integer N = 58 For i = 12 To N proverka = 1 'Условие проверки, что в конце строки нет символа "конец строки" ActiveDocument.Tables(1).Cell(i, 1).Select shortstring = Selection.text ascii = Asc(Right(shortstring, 1)) 'Функция Asc Определяет ascii код символа ' В нашем случае это код символа "конец строки - квадратик" = 7 если смотреть через отладчик на строку таблицы 'функция Right(shortstring, 1) определяет последний символ справа строки shortstring и возвращает его в строковой переменной Do While proverka = 1 If Len(shortstring) > 0 Then 'Если длина строки больше 0 proverka = 0 ascii = Asc(Right(shortstring, 1)) If Asc(Right(shortstring, 1)) = CHAR_TO_DELETE Or Asc(Right(shortstring, 1)) = 13 Then 'Right(shortstring, 1) берет последний символ строки shortstring = Left(shortstring, Len(shortstring) - 1) 'Возвращает строку начиная с левого символа длиной 'символов Len(shortstring) - 1 proverka = 1 End If End If Loop proverka = 1 ActiveDocument.Tables(1).Cell(i, 2).Select longstring = Selection.text Do While proverka = 1 If Len(longstring) > 0 Then 'Если длина строки больше 0 proverka = 0 If Asc(Right(longstring, 1)) = CHAR_TO_DELETE Or Asc(Right(longstring, 1)) = 13 Then 'Right(shortstring, 1) берет последний символ строки longstring = Left(longstring, Len(longstring) - 1) 'Возвращает строку начиная с левого символа длиной 'символов Len(shortstring) - 1 proverka = 1 End If End If Loop AutoCorrect.Entries.Add Name:=shortstring, Value:=longstring With AutoCorrect .CorrectInitialCaps = False .CorrectSentenceCaps = False .CorrectDays = False .CorrectCapsLock = False .ReplaceText = True .ReplaceTextFromSpellingChecker = False .CorrectKeyboardSetting = False .DisplayAutoCorrectOptions = True .CorrectTableCells = False End With Next i 'shortstring = Split(Replace(Selection.text, Chr(7), ""), Chr(13))(0) - замена символа конца строки на пустой символ (стирание 'то есть стираем лишние символы конца строки End Sub |
Сообщ.
#9
,
|
|
|
Цитата Fellinggood @ вот как получилось Не, вот нафига нужны эти циклы с флагом proverka, если всё то же самое делает одно несложное выражение? |
Сообщ.
#10
,
|
|
|
Цитата Akina @ Цитата Fellinggood @ вот как получилось Не, вот нафига нужны эти циклы с флагом proverka, если всё то же самое делает одно несложное выражение? да можно было по другому, просто уже не хотел запариваться так как уже почти все дописал в варианте предложенном выше |