Dzisiaj napiszę kilka zdań na temat operatora łączenia tekstów, nazywanego rzadziej operatorem konkatenacji (od angielskiego czasownika concatenate – łączyć, powiązać).
Sposoby Łączenia Tekstu
W Excelu możemy łączyć ze sobą teksty na dwa sposoby. Pierwszy sposób dotyczy znaku &. Drugi funkcji ZŁĄCZ.TEKSTY, która w oryginale nazywa się właśnie CONCATENATE.
W Excelu 2016 pojawiły się nowe funkcje ZŁĄCZ.TEKSTY i POŁĄCZ.TEKSTY, które znacząco ułatwiają łączenie wielu różnych fraz.
Wyżej wymienione funkcje arkuszowe nie będą nam jednak potrzebne w poniższym przykładzie. Jak się jednak przekonamy, stosowanie operatora & jest konieczne w sytuacji, gdy chcemy dodać do arkusza formułę, w której część informacji jest zawarta w zmiennej.
Cudzysłów, Przecinek i Operator Złączenia
W naszym przypadku będziemy chcieli za pomocą funkcji HIPERŁĄCZE wstawić formułę, która tworzy link do pliku XML z fakturą VAT, ale wyświetla tylko jej numer.
Obie informacje nie są jednak podane bezpośrednio, lecz zaszyte w zmiennych (możemy założyć, że działanie wykonujemy w pętli).
Standardowo numery faktur są ciągami tekstowymi zawierającymi takie dane jak rok czy miesiąc i oddzielone specjalnym separatorem. Na potrzeby naszego zadania, będzie to jednak duża liczba.
Poniżej znajduje się kod, który wstawia pięć różnych formuł różniących się wykorzystaniem operatora złączenia.
Kod Makra
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
Screen
Efekty widzimy na obrazku poniżej.
Analiza Makra
Moja krótka analiza.
- W pierwszej formule podajemy bezpośrednio 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 powodzenia – brakuje tylko nawiasów w ścieżce do pliku, numer faktury (wartość numeryczna) jest natomiast prawidłowy. Wniosek z tego jest taki, że aby Excel odczytał wartość zmiennej liczbowej należy użyć cudzysłowu tylko raz po lewej i raz po prawej stronie tj: “ & dbNumerFaktury & “
- W trzecim przypadku (dwa apostrofy po każdej stronie) Excel w ogóle nie zamienia zmiennych na wartości
- W czwartym przypadku jesteśmy już bardzo blisko celu. Potrójny znak cudzysłowu 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 i wyświetla nam już numer faktury jako liczbę. Ta formuła jest powiązaniem formuły 2 (numer faktury) i formuły 4 (ścieżka do pliku)
Jak widać, łączenie znaków w VBA z wykorzystaniem zmiennych, nie jest takie trudne 🙂