Конкатенация на низове във 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. Първата кавичка отваря низа, втората избягва третата, за да стане литерал (след това escape, литерал, затваряне след). - person RolandTumble; 17.12.2010