Конкатенация строк в VBA

У меня есть эта функция:

Function GetFullNameCSV() As String
   GetFullNameCSV = Replace(ThisWorkbook.FullName, ".xlsm", ".txt")
End Function

Если бы код выглядел жестко запрограммированным:

Filename:= "C:\directory\filename.txt"

Я мог бы просто заменить его на это и получить тот же результат:

Filename:= GetFullNameCSV()

Проблема в том, что это появляется в случае с этой строкой:

Connection:= "TEXT;C:\directory\filename.txt"

Мне нужно использовать конкатенацию строк, угадывая что-то вроде этого:

Connection:= "\"TEXT;+GetFullNameCSV()+\""

Какой код мне нужно использовать? Спасибо.


person blunders    schedule 17.12.2010    source источник


Ответы (1)


Предполагая, что все разделы всегда разделены ;, просто разделите строку на ее части, затем внесите свои изменения, а затем снова соедините ее.

Итак, с вашим образцом, я думаю, это будет что-то вроде (обратите внимание, написано по памяти, поэтому может быть не совсем правильно):

Dim parts() as String
parts = Split(str, ";")

parts(2) = GetFullNameCSV() ' assuming that part 2 is the one you want to replace

str = Join(parts, ";")
person Hans Olsson    schedule 17.12.2010
comment
+1, но... это может сработать, но это не конкатенация строк, а разделение, преобразование и объединение строк с разделителями. Для меня это означает, что код берет что-то простое и делает его сложным. Это означает, что я просто хочу знать, как выполнить конкатенацию строк в VBA. Не стесняйтесь оставлять предложенный вами подход, но мне действительно нужен/хочу способ сделать конкатенацию строк. - person blunders; 17.12.2010
comment
@blunders: Что ж, возможно, я неправильно понял ваш вопрос, если вы просто говорите о объединении строк, все, что вам нужно, это оператор &, поэтому это будет "TEXT;" & strTemp. Однако, если я правильно понял ваш вопрос, то я бы сказал, что мой код на самом деле очень прост для того, что он делает, потому что под капотом он может делать много вещей, но все это делается VBA, поэтому вы не должны беспокоиться о деталях. - person Hans Olsson; 17.12.2010
comment
+1 Спасибо, это тоже кто-то опубликовал, а затем удалил, прежде чем я успел спросить об этом ... Мне кажется, ТЕКСТ; & strTemp будет выводить TEXT;C:\directory\filename.txt, когда мне нужен TEXT;C:\directory\filename.txt -- еще раз, спасибо! - person blunders; 17.12.2010
comment
Итак, это работает — что странно, нет времени думать об этом. Спасибо, что дали мне ответ, который мне был нужен. Ваше здоровье! - person blunders; 17.12.2010
comment
@blunders: Двойные кавычки () являются строковыми разделителями, что означает, что они удаляются, чтобы найти строку внутри. Чтобы получить результат, который, как вы сказали, вы ожидали, вам понадобится """TEXT;""" & strTemp. Первая кавычка открывает строку, вторая экранирует третью, чтобы сделать ее литералом (затем экранирует, литерал, закрывается после). - person RolandTumble; 17.12.2010