Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 26.12.2007, 18:50   #1
Alkaline
Пользователь
 
Регистрация: 22.11.2007
Сообщений: 79
По умолчанию Бага или фича функции Replace Function (VBA)?

Кажется, столкнулся с багой при выполнении функции Replace (в VBA, не в ячейках).

Так, в описании синтаксиса находим:

Replace(expression, find, replace[, start[, count[, compare]]])

expression - Required. String expression containing substring to replace. - Это ГДЕ ищем.

find - Required. Substring being searched for. - Это ЧТО ищем.

replace - Required. Replacement substring. - Это ЧЕМ заменяем.

start - Optional. Position within expression where substring search is to begin. If omitted, 1 is assumed. - Вот тут вопрос. По моей логике - это позиция, с которой начинать поиск. И только.

count и compare сейчас опустим.

Теперь, по моей логике, функция:

Код:
msgbox Replace("34123", "3", "A", 2)
должна только заменить в строке последнюю тройку, т.к. первая тройка идет раньше того места, с которого начинать смотреть.

По факту же, получается выражение "412A", т.е. поиск и замена произошли, но еще произошло обрезание, выдалась только часть строки, начиная с места поиска. Нафига, собственно??

Я проверял на русской и английской версии Excel 2003. Проверьте у себя, пожалуйста. Или все-таки фича?
Alkaline вне форума
Старый 26.12.2007, 20:20   #2
zetrix
Delphi/C++/C#
Участник клуба
 
Аватар для zetrix
 
Регистрация: 29.10.2006
Сообщений: 1,972
По умолчанию

Если написать так:
Код:
MsgBox Replace("34123", "3", "A", 5)
То выдаст: А
Т.е. при начале замены с i-го символа, все символы до i-го не выводятся. Не знаю баг это, или так это и было задумано, но так есть.
zetrix вне форума
Старый 26.12.2007, 20:33   #3
Pavel55
Форумчанин
 
Регистрация: 21.08.2007
Сообщений: 292
По умолчанию

Посмотрите Help до конца, там внизу ремарка
Remarks:
The return value of the Replace function is a string, with substitutions made, that begins at the position specified by start and and concludes at the end of the expression string. It is not a copy of the original string from start to finish.

P.S. Может как-то так?

Код:
Sub Макрос1()
Dim iString As String
    iString = "34123"
    iString = WorksheetFunction.Substitute(iString, 3, "A", 2)
    MsgBox iString
End Sub
P.P.S. тут цифра 2 означает не с какой позиции заменять, а какую тройку по счёту заменять

Последний раз редактировалось Pavel55; 26.12.2007 в 20:48.
Pavel55 вне форума
Старый 27.12.2007, 11:26   #4
Alkaline
Пользователь
 
Регистрация: 22.11.2007
Сообщений: 79
По умолчанию

Павел, спасибо, но это принципиально иное: я делаю процедуру посимвольной обработки строки. Встретился и долго не мог понять, в чем ошибка... Ладно, придется делать конкатенацию с частью строки до позиции поиска.

zetrix, угу...
Alkaline вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Что же это, бага vs2005, или VC++ 6.0? evil_factory Visual C++ 1 24.07.2008 22:30
InttoiHex function GAGARIN-NEW Компоненты Delphi 4 27.03.2008 20:21
function procedure Toxa Microsoft Office Access 1 28.11.2007 18:32
function WinExecAndWait malevich Общие вопросы Delphi 4 05.02.2007 19:00