Operator złączenia tekstów rzadziej nazywamy jest operatorem konkatenacji (z ang. concatenate – łączyć, powiązać). W VBA bardzo często współpracuje on z cudzysłowem. W tym artykule pokażę jak łączyć ze sobą ciągi tekstowe, gdy niektóre informacje są zawarte w zmiennych.
Łączenie przez operator i funkcję
W Excelu możemy łączyć ze sobą teksty na dwa sposoby. Pierwszy polega na użyciu znaku &. Drugi odwołuje się do funkcji ZŁĄCZ.TEKSTY, która w oryginale nazywa się właśnie CONCATENATE.
W Excelu 2016 pojawiły się nowe funkcje służące do łączenia ze sobą ciągów tekstowych: ZŁĄCZ.TEKSTY i POŁĄCZ.TEKSTY.
Cudzysłów, przecinek i operator złączenia
W naszym przypadku chcemy wstawić do komórki formułę, która tworzy link do pliku XML z fakturą VAT. Chcemy, aby w komórce arkusza widoczny był tylko numer faktury np. 1662938570. Po kliknięciu w niego, powinien nam się otworzyć plik XML z FV. Do tego celu użyjemy funkcji HIPERŁĄCZE.
Obie informacje (lokalizacja pliku XML i numer FV) są zaszyte w zmiennych.
Standardowo numery faktur są długimi ciągami tekstowymi Na potrzeby naszego zadania, będzie to jednak duża liczba.
Kod wstawiający formuły
Poniżej znajduje się kod, który wstawia pięć różnych formuł różniących się wykorzystaniem cudzysłowu.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
Private Const msMODUL As String = "MOperatorZlaczeniaTekstow" Option Explicit Public Sub DodajLinkDoFaktury() Dim dbNumerFaktury As Double Dim sSciezkaDoPliku As String Const sPROC As String = "DodajLinkDoFaktury" 'Aktywuj obsługę błędów na starcie 1 On Error GoTo ObslugaBledu 'Przypisz dane do zmiennych 2 dbNumerFaktury = 1662938570 3 sSciezkaDoPliku = "D:\Moje_faktury\1662938570.XML" 'Spróbuj wstawić formułę do komórki arkusza 4 With Sheet1 5 .Range("B2").FormulaR1C1 = "=HYPERLINK(sSciezkaDoPliku,dbNumerFaktury)" 6 .Range("B3").FormulaR1C1 = "=HYPERLINK(" & sSciezkaDoPliku & "," & dbNumerFaktury & ")" 7 .Range("B4").FormulaR1C1 = "=HYPERLINK("" & sSciezkaDoPliku & "","" & dbNumerFaktury & "")" 8 .Range("B5").FormulaR1C1 = "=HYPERLINK(""" & sSciezkaDoPliku & """,""" & dbNumerFaktury & """)" 9 .Range("B6").FormulaR1C1 = "=HYPERLINK(""" & sSciezkaDoPliku & """," & dbNumerFaktury & ")" 10 End With Wyjscie: 11 On Error GoTo 0 12 Exit Sub ObslugaBledu: 13 Application.ScreenUpdating = True 14 MsgBox "Wystąpił błąd nr " & Err.Number & " (" & Err.Description & ")." & _ vbCr & vbCr & "Linia kodu nr " & Erl & " w procedurze " & _ "'" & sPROC & "' modułu '" & msMODUL & "'.", vbInformation, "BŁĄD!" 15 Resume Wyjscie End Sub |
Wyniki makra
Efekty widzimy na obrazku poniżej.
Analiza makra
Jak zinterpretować powyższe wyniki?
- Najpierw podajemy nazwy zmiennych bez operatora konkatenacji. Jak widzimy Excel nie zamienia tego na wartości, które kryją się za naszymi zmiennymi.
- W drugim przypadku jest już znacznie lepiej. Co prawda, znowu wyskakuje nam błąd nazwy, ale formuła jest bliska sukcesu. Brakuje tylko nawiasów w ścieżce do pliku. Numer faktury (liczba) jest natomiast prawidłowy.
- W trzecim przypadku Excel w ogóle nie zamienia zmiennych na wartości.
- W czwartym przypadku jesteśmy już bardzo blisko celu. Potrójny znak cudzysłowia po każdej ze stron wstawia nam tekst zarówno dla lokalizacji pliku, jak i dla numeru faktury. Jedynym minusem jest fakt, że numer faktury jest tekstem (wyrównanie do lewej strony).
- Piąta formuła jest prawidłowa. Wyświetla nam prawidłowo numer FV (wyrównanie do prawej strony komórki) jak i adres. Ta formuła jest powiązaniem formuły z punktu nr 2 (numer faktury) i formuły z punktu nr 4 (ścieżka do pliku).
Podsumowanie
Jak widać, łączenie znaków w VBA nie jest wcale takie oczywiste :).