Pobieranie formatu daty z SAP

Pisząc aplikację VBA Excel współpracującą z SAP można się spotkać z błędnym formatem daty jaki używa użytkownik w SAP. Jeżeli w SAP format daty jest inny niż ten który dla Excela jest datą to będziemy mieli problem z działaniami na datach w Excelu.

Prawidłowy format daty w Excelu to RRRR-MM-DD, choć inne regiony świata mogą mieć inne podejście. Jeżeli zatem w Excelu mamy ustawiony format RRRR-MM-DD to, gdy pobierzemy datę z SAP w np. w formacie DD.MM.RRRR wtedy ta data będzie widziana dla Excela jako tekst. Aby sprawdzić jaki format daty jest używany w SAP należy skorzystać z transakcji SU3.

Ważne jest, aby użytkownik w opcjach SAP włączył oznaczenie kontrolek przez id/numerację. Dzięki temu możemy skorzystać z poniższego kodu, ewentualnie dostosować do swoich potrzeb. Oczywiście w pierwszym kroku należy połączyć się z SAP zgodnie z kodem z tego posta: Połączenie Excel VBA z SAP HANA.

Private Sub GetSAP_DateFormat()
' Pobieranie formatu daty uzywanego przez usera w SAP
' Trzeba włączyc w opcjach SAP opis labelki przez id (jak będę miał dostęp do SAP, zaktualizuje post)

Dim IdDatySAP, TempDateFormat, FormatDatySAP 
Dim LicznikWierszyLX02 as Long

On Error GoTo ErrorHapenned
LicznikWierszyLX02  = 1

' ---------------------------------------------------------------------------
' POBIERANIE FORMATU DATY Z SU3
  
Session.FindById("wnd[0]").Maximize
Session.FindById("wnd[0]/tbar[0]/okcd").Text = "su3"
Session.FindById("wnd[0]").SendVKey 0
Session.FindById("wnd[0]/usr/tabsTABSTRIP1/tabpDEFA").Select
TempDateFormat = Session.FindById("wnd[0]/usr/tabsTABSTRIP1/tabpDEFA/ssubMAINAREA:SAPLSUID_MAINTENANCE:1105/cmbSUID_ST_NODE_DEFAULTS-DATFM").Text

' ---------------------------------------------------------------------------
' WYJŚCIE DO SESSION MANAGER

Session.FindById("wnd[0]/tbar[0]/okcd").Text = "/n"
Session.FindById("wnd[0]").SendVKey 0

' ---------------------------------------------------------------------------
' GLOBALANA ZMIENNA FORMATU DATY W SAP

' Ustalanie formatu daty
FormatDatySAP = Left(TempDateFormat, InStr(1, TempDateFormat, " ") - 1)
IdDatySAP = FormatDatySAP 

' User moze miec opis wiersza przed formatem daty. Jezeli tak ma
' to wartość liczbowa ze spacją jest usuwana i pozostawiony jest tylko format daty
'If FormatDatySAP < 10 Then
'    FormatDatySAP = Mid(TempDateFormat, 3, InStr(3, TempDateFormat, " ") - 3)
'End If

' ---------------------------------------------------------------------------
' OBRÓBKA DANYCH Z SAP W EXCEL

' Tutaj powinien znaleźć się kod w którym importujemy dane z SAP i wklejamy je do Excel

' ---------------------------------------------------------------------------
' ZAMIANA DATY NA PRAWIDŁOWĄ

' Nie mam teraz dostępu do SAP, ale mniej więcej tak sobie wyobrażam zamianę daty na poprawna
' Jeżeli jest w kontrolce SAP oznaczenie id dla danego formatu daty -  to można użyć tego kodu
' Wcześniej data z SAP została zrzucona do komórki w arkuszu
Select Case IdDatySAP
    Case 1
    .Sheets(SheetName).Cells(LicznikWierszyLX02, 13) = Right(.Sheets(SheetName).Cells(LicznikWierszyLX02, 13), 4) & "-" & _
    Mid(.Sheets(SheetName).Cells(LicznikWierszyLX02, 13), 4, 2) & "-" & _
    Left(.Sheets(SheetName).Cells(LicznikWierszyLX02, 13), 2)
    
    Case 2
    .Sheets(SheetName).Cells(LicznikWierszyLX02, 13) = Right(.Sheets(SheetName).Cells(LicznikWierszyLX02, 13), 4) & "-" & _
    Left(.Sheets(SheetName).Cells(LicznikWierszyLX02, 13), 2) & "-" & _
    Mid(.Sheets(SheetName).Cells(LicznikWierszyLX02, 13), 4, 2)
    
    Case 3
    .Sheets(SheetName).Cells(LicznikWierszyLX02, 13) = Right(.Sheets(SheetName).Cells(LicznikWierszyLX02, 13), 4) & "-" & _
    Left(.Sheets(SheetName).Cells(LicznikWierszyLX02, 13), 2) & "-" & _
    Mid(.Sheets(SheetName).Cells(LicznikWierszyLX02, 13), 4, 2)
    
    Case 4
    .Sheets(SheetName).Cells(LicznikWierszyLX02, 13) = Replace(.Sheets(SheetName).Cells(LicznikWierszyLX02, 13), ".", "-", 1)

    Case 5
    .Sheets(SheetName).Cells(LicznikWierszyLX02, 13) = Replace(.Sheets(SheetName).Cells(LicznikWierszyLX02, 13), "/", "-", 1)
     
    Case 6
    ' prawidłowy format
End Select

Exit Sub

' ----------------------------------------------------------
' OBSŁUGA EWENTUALNYCH BŁEDÓW

ErrorHapenned:
ErrOpis = Err.Description
ErrStatus = True
ErlLine = Erl

End Sub

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.