Функция VBA Replace() с несколькими строками в одной ячейке

#excel #vba

Вопрос:

Я пишу макрос для отправки нескольких электронных писем, которые настраиваются на основе требуемых данных.

Например:

 Subject: <name>, Thank you for visiting <store>
 

На данный момент я могу только тянуть, но я понятия не имею , как также добавить, чтобы «Контент» был у них обоих.

 Content = Replace(msg.Subject, "<name>", first_name   " "   last_Name)
          Replace(msg.Subject, "<store>", store_name)
 

^ по сути, я хочу объединить оба из них, чтобы макрос вытянул оба.

Комментарии:

1. Добро пожаловать в SO! Не могли бы вы показать нам, что вы пробовали. Stackoerflow это не бесплатный развивающийся источник, вы должны показать свои усилия и то, куда вы попали.

Ответ №1:

Вы можете сделать это в несколько этапов:

 Content = Replace(msg.Subject, "<name>", first_name   " "   last_Name)
Content = Replace(Content, "<store>", store_name)
 

Или вы могли бы вложить свои операторы замены:

 Content = Replace(Replace(msg.Subject, "<name>", first_name   " "   last_Name), "<store>", store_name)
 

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

Комментарии:

1. Первый вариант не работает, так как второй контент заменяет первый (это было первое, что я попробовал). Но вложенность работает отлично, спасибо!

2. Первый и второй функционально идентичны. Обратите внимание, что я поместил Content переменную во вторую Replace , чтобы убедиться, что обе замены происходят в исходной строке. Первый гораздо проще для чтения, и если вы получите более нескольких токенов для замены, это будет более удобный маршрут. Рад слышать, что второе работает на вас 🙂