Results 1 to 5 of 5
  1. #1
    JohanG is offline Novice
    Windows 10 Access 2016
    Join Date
    May 2022
    Posts
    17

    VBA Code to Convert and Save Base64 Value(s) to PDF File(s)

    Greetings Experts,



    I am seeking assistance with converting Base64 values and save the converted (PDF) images to a directory. The code I have thus far is failing without a clear indication as to why.

    The Base64 values we receive are included in individual XML files and each file represent an invoice sent from our supplier. The idea is to convert these Base64 values back to their original PDF files and once converted, to save them in a specified directory.

    Currently I have a Form with a command button which calls a function named "ConvertBase64ToPDF". The function receives the Base64 value (26'829 characters), as well as the intended output directory and filename. Please see below...


    Main Form "On Click":

    Code:
    Private Sub Command1_Click()
    
    
        Dim base64String As String
        Dim outputPath As String
        Dim fileName As String
        
        base64String = [Forms]![Main]![DocBase64]
                    
        outputPath = "D:\Johan\Base64"
        fileName = "Converted_Image"
            
        If ConvertBase64ToPDF(base64String, outputPath, fileName) Then
            MsgBox "Conversion Successful! PDF file saved at: " & outputPath & "\" & fileName & ".pdf", vbInformation
            Else
                MsgBox "Conversion Failed!", vbExclamation
        End If
    
    
    End Sub
    Function "ConvertBase64ToPDF":

    Code:
    Function ConvertBase64ToPDF(base64String As String, outputPath As String, fileName As String) As Boolean
    
    
        Dim xmlDoc As Object
        Dim byteArray() As Byte
        Dim fileStream As Object
        
    On Error GoTo ErrorHandler
        
        Set xmlDoc = CreateObject("MSXML2.DOMDocument")
        
        If xmlDoc.LoadXML(base64String) Then
            byteArray = xmlDoc.DocumentElement.DataType("bin.base64").nodeTypedValue
            Set fileStream = CreateObject("ADODB.Stream")
            fileStream.Type = 1
            fileStream.Open
            fileStream.Write byteArray
            fileStream.SaveToFile outputPath & "\" & fileName & ".pdf", 2
            fileStream.Close
            
            Set fileStream = Nothing
            Set xmlDoc = Nothing
            
            ConvertBase64ToPDF = True       'Success
            Else
                MsgBox "Failed to load base64 string", vbExclamation
        End If
        Exit Function
        
    ErrorHandler:
        MsgBox "Error: " & Err.Description, vbCritical
        ConvertBase64ToPDF = False
        
    End Function

    And here's the Base64 value (Sample):

    JVBERi0xLjYNJeLjz9MNCjcgMCBvYmoNPDwvTGluZWFyaXplZC AxL0wgMjAxNjcvTyA5L0UgMTU4NTYvTiAxL1QgMTk4MzgvSCBb IDUxMyAxNDldPj4NZW5kb2JqDSAgICAgICAgICAgICAgICAgIC AgDQoyMCAwIG9iag08PC9EZWNvZGVQYXJtczw8L0NvbHVtbnMg NC9QcmVkaWN0b3IgMTI+Pi9GaWx0ZXIvRmxhdGVEZWNvZGUvSU RbPDMyMzgzNjM5MzczNjQxNDIyRDM5NDE0NjM3MkQzNDM5MzYz NzJENDE0MzM4MzcyRDQ2MzEzOTQ1MzQ0NTQyMzgzNDQxNDQzMD 48MzBDRjNGNDhFRjc1RDk0MTk2NzRCQ0Y5OUFERDNFOUE+XS9J bmRleFs3IDMzXS9JbmZvIDYgMCBSL0xlbmd0aCA3My9QcmV2ID E5ODM5L1Jvb3QgOCAwIFIvU2l6ZSA0MC9UeXBlL1hSZWYvV1sx IDIgMV0+PnN0cmVhbQ0KaN5iYmQQYGBiYGoDEgw2IFYBkGA7Ai RY2IAE834QqwIkkQ8iHEBi+0Bi20Cs7UDibjgDEyPDNJABDIxU J/4zfX8PEGAA5yULRw0KZW5kc3RyZWFtDWVuZG9iag1zdGFydHhy ZWYNCjANCiUlRU9GDQogICAgICAgIA0KMzkgMCBvYmoNPDwvRm lsdGVyL0ZsYXRlRGVjb2RlL0kgODIvTGVuZ3RoIDcwL1MgMzg+ PnN0cmVhbQ0KaN5iYGDgZmBgsmUAAms5BlTACMQsDBwNyGLcUM zAWMDAy8Aoyqqj8pGF+Y8Uo5+QQeCnY2A1zAwMPrOh+p8ABBgA +JcIpw0KZW5kc3RyZWFtDWVuZG9iag04IDAgb2JqDTw8L01ldG FkYXRhIDEgMCBSL1BhZ2VzIDUgMCBSL1R5cGUvQ2F0YWxvZz4+ DWVuZG9iag05IDAgb2JqDTw8L0Fubm90c1tdL0NvbnRlbnRzWz ExIDAgUiAxMiAwIFIgMTMgMCBSIDE0IDAgUiAxNSAwIFIgMTYg MCBSIDE3IDAgUiAxOCAwIFJdL0Nyb3BCb3hbMCAwIDU5NSA4ND EuODkwMjJdL01lZGlhQm94WzAgMCA1OTUgODQxLjg5MDIyXS9Q YXJlbnQgNSAwIFIvUmVzb3VyY2VzPDwvRXh0R1N0YXRlPDwvR1 MxIDIxIDAgUj4+L0ZvbnQ8PC9DYWxpYnJpIDI1IDAgUi9DYWxp YnJpLEJvbGQgMjkgMCBSL0hlbHZldGljYSAzMSAwIFIvSGVsdm V0aWNhLUJvbGQgMzMgMCBSL1ZlcmRhbmEsQm9sZCAzNyAwIFI+ Pi9Qcm9jU2V0IDM4IDAgUi9YT2JqZWN0PDwvcHBJbWFnZTEwID E5IDAgUj4+Pj4vUm90YXRlIDAvVHlwZS9QYWdlPj4NZW5kb2Jq DTEwIDAgb2JqDTw8L0ZpbHRlci9GbGF0ZURlY29kZS9GaXJzdC AxMzYvTGVuZ3RoIDEzNzgvTiAxOC9UeXBlL09ialN0bT4+c3Ry ZWFtDQpo3uRY7WocNxR9lXmAOqPvDwgGO4mbQCmlDumPkB8be3 AWnHVYT0r69pXOkUcaz+46TQylDZgzWulKupLu0bmykp3olOqU 75TuvOlU+ss/bCe9S02ukyGG3C6jsZ1KRSl0p2KnnXadFp32wXRadjpkUJ2OIj Xq9LWp3XRGmNRu0zemdtcZZZOR76zL39DZIGT39Gl/ftKN289D//qvT0P/4sv48/m4Gofj49R0urodXmwubi7Xm6v+j/XmZHO7nn7TvvyC+cntxbAZu2jVE9E/W316OayvPtz9fj6w9Ui5mH6eXa+ubpPb/dnNZjw9vfny9khZ8USU9rQLRqcP+r6D0a+rj0Ma9Xr9frvuX42 pcHGyuboeOtGfj8PHN+kLl7Jtnmy7/jTebI+P3+ZRrfCPgo851tegUi6hBhohM8YwtXppE7qgYJlbtdA T0pLIvdXCoZztdXDf65sLE7ZzFXTZhxBNtvf5SK1BWed6B89Ng KXNrU5n/53S1UOJXip7boDBYr0me+5ctrEye+K8xvh6Gs0E1BvYOA9PcHa ythp4rrEW7gbLs32L2HP6r+AzPCzlyBFQ9nKqV1oAMZetNT7Wc azyTTmjNrlVY0ata73BbvCsjeYaccoRvaTBWkQtNxHyX8dZ/DfrWpbLWUREncY+CEaIak6qxrxGZGqeEVs15kJfFdEXrLGhYQ2 9QgQaVcd36OsQA87bKf5L5B9ET0ueLBmxQM6+RKfuM2Ifco3Om YkXSyQvyCnGJyP/MHqwj7zYcQ+QR4UR97GN/ztG7MZy4iouerVM0fPyuyJiWRMm7bjTrKy/ovu9P1tvb8dnH1bbpCBz8cjanC1+WRUDZW0/06Hzz+/HLDqvk4JCfSYJSnp5OX64zcKehvj35TTI/XL60+nN9eWPqak63NdURJgXvLVxz0o14VxT652ioDFGf+9alHc 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 ZW5kc3RyZWFtDWVuZG9iag0xOCAwIG9iag08PC9GaWx0ZXIvRm xhdGVEZWNvZGUvTGVuZ3RoIDYyNT4+c3RyZWFtDQpIicxWXW+b MBR9R+I/3Mf2IZ7tYAN9S7qPrg/VqrKXKi8OuC1bMKkN2frvZxLaelmWqcSRhoKEAjrnXp9zjx1Dd hcGBDBghIFAGiOGMaMMxikap5BVYXBydgrZtzD4kIXBdRg8hkH 37fOt78Ngat+8u5CLlWzKXED8V1CaIh4NAh1N60UBbAuZ4hiln GAeQ4zGdINM+Giy1COKaQSzk4+zUy9MCUNxlEYRd5i+aLkUWhY wfTqDAxcpYgjby9ZMUpT0K3/zo7xr4Lwu5IHolDBEGYljYMkLuj9doxSRYbruAf3PHLgH1FFsk K35FjLBa7ONo2QtF+/N0AhVCG3dJtR3zzSdgGRDgykmlMY88kzRydl38klLqUxTqzfa+ p8cnbrPbRA+jqhn/E7oZzWmtxOwv8vLIRzJNgcn6/mMCHBrq57j6837Q01KOEUxI5Sn7uR3DoIrUR0aKw66EwGTPK9b 1cBV7Q/emdupFip/8JGKDv5xQ3d4QOwB9Rhlr6AeQ/cV9Cjbw/CNbPeYUxptymVHDV2Hxg3dFI8xTljimcIJ3cuLKVy0c88EbuJi TBjzjO8hcfeNvWP3Plbenoq7E/31PMdThPsWboUe5NU/RiuldgwIswsUM9Q3MFksYN6aUkljoDTQ2IaMyBt7Pi0VNFJXBu o7qFsNL67OtChKdQ/Z+q39c1PdTia7MfH+4Hteq6JsyloZe8LO6+UTiJUoF2K+kFAr0 PKxlaaZnSL4rCyxfYZKPMFcQv4g9L2tSDTgXHtYmVWoz45K/CyrtoKlLbY0puzYtGik6TiF7b5eSV20EkTV7T8G/bbU8EuAAQCCTd0kDQplbmRzdHJlYW0NZW5kb2JqDTE5IDAgb2J qDTw8L0JpdHNQZXJDb21wb25lbnQgOC9Db2xvclNwYWNlL0Rld mljZVJHQi9GaWx0ZXJbL0ZsYXRlRGVjb2RlL0RDVERlY29kZV0 vSGVpZ2h0IDk1L0xlbmd0aCA2Njk3L1N1YnR5cGUvSW1hZ2UvV HlwZS9YT2JqZWN0L1dpZHRoIDM1Nz4+c3RyZWFtDQp4nM13ZVB cXbPuxp0JwSEwCe4WCBJgQniRQYMOrsE1EFyGQHAngSS4uwTXQ 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 HjxT/3V1FtjCMzPc9IptHf2c5v94LzMWmlIyES7/S1FqrpbHqfMqdxsKIWGSkJuFAfw744ZehhdhDCdN1kyJKjk9Qn 9EvfgfHhhTRpVdqah1EexxcmS9vt+Sn4d+k9OBqNn/wXhUS6RDQplbmRzdHJlYW0NZW5kb2JqDTEgMCBvYmoNPDwvTGV uZ3RoIDM1MzgvU3VidHlwZS9YTUwvVHlwZS9NZXRhZGF0YT4+c 3RyZWFtDQo8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTB NcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIi B4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA5LjEtYzAwMSA3OS42 NzVkMGY3LCAyMDIzLzA2LzExLTE5OjIxOjE2ICAgICAgICAiPg ogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMu b3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgIC A8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAg ICAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW 1lbnRzLzEuMS8iCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0 cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgICAgICAgIC AgeG1sbnM6cGRmPSJodHRwOi8vbnMuYWRvYmUuY29tL3BkZi8x LjMvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL2 5zLmFkb2JlLmNvbS94YXAvMS4wL21tLyI+CiAgICAgICAgIDxk Yzpmb3JtYXQ+YXBwbGljYXRpb24vcGRmPC9kYzpmb3JtYXQ+Ci AgICAgICAgIDxkYzpjcmVhdG9yPgogICAgICAgICAgICA8cmRm OlNlcT4KICAgICAgICAgICAgICAgPHJkZjpsaS8+CiAgICAgIC AgICAgIDwvcmRmOlNlcT4KICAgICAgICAgPC9kYzpjcmVhdG9y PgogICAgICAgICA8ZGM6ZGVzY3JpcHRpb24+CiAgICAgICAgIC AgIDxyZGY6QWx0PgogICAgICAgICAgICAgICA8cmRmOmxpIHht bDpsYW5nPSJ4LWRlZmF1bHQiLz4KICAgICAgICAgICAgPC9yZG Y6QWx0PgogICAgICAgICA8L2RjOmRlc2NyaXB0aW9uPgogICAg ICAgICA8ZGM6dGl0bGU+CiAgICAgICAgICAgIDxyZGY6QWx0Pg ogICAgICAgICAgICAgICA8cmRmOmxpIHhtbDpsYW5nPSJ4LWRl ZmF1bHQiLz4KICAgICAgICAgICAgPC9yZGY6QWx0PgogICAgIC AgICA8L2RjOnRpdGxlPgogICAgICAgICA8eG1wOkNyZWF0ZURh dGU+MjAyNC0wNC0xNlQwODo1OTowNSswMzowMDwveG1wOkNyZW F0ZURhdGU+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2wvPgog ICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAyNC0wNC0yNFQxMz o1MzoyNiswMjowMDwveG1wOk1vZGlmeURhdGU+CiAgICAgICAg IDx4bXA6TWV0YWRhdGFEYXRlPjIwMjQtMDQtMjRUMTM6NTM6Mj YrMDI6MDA8L3htcDpNZXRhZGF0YURhdGU+CiAgICAgICAgIDxw ZGY6S2V5d29yZHMvPgogICAgICAgICA8cGRmOlByb2R1Y2VyPl JlcG9ydEJ1aWxkZXI8L3BkZjpQcm9kdWNlcj4KICAgICAgICAg PHhtcE1NOkRvY3VtZW50SUQ+dXVpZDo3MzkyZjkzZS05ZmUwLT QxNDItODljMy00MzMyZTg5YzVlOTQ8L3htcE1NOkRvY3VtZW50 SUQ+CiAgICAgICAgIDx4bXBNTTpJbnN0YW5jZUlEPnV1aWQ6Y2 JhZjc3ZWEtYmNjMi00YjIzLWE4MDMtMGQwNjRiOGY5MzhlPC94 bXBNTTpJbnN0YW5jZUlEPgogICAgICA8L3JkZjpEZXNjcmlwdG lvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC AgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgIC AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC AgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgIC AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC AgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgIC AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC AgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgIC AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC AgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogIC AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC AgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIC AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA ogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC AgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg ICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3Ij8+DQ plbmRzdHJlYW0NZW5kb2JqDTIgMCBvYmoNPDwvRmlsdGVyL0Zs YXRlRGVjb2RlL0ZpcnN0IDQvTGVuZ3RoIDQ4L04gMS9UeXBlL0 9ialN0bT4+c3RyZWFtDQpo3jJVMFCwsdF3zi/NK1Ew1PfOTCmOtgSKBcXqh1QWpOoHJKanFtvZAQQYANZ3C4ANC mVuZHN0cmVhbQ1lbmRvYmoNMyAwIG9iag08PC9GaWx0ZXIvRmx hdGVEZWNvZGUvRmlyc3QgNC9MZW5ndGggMTM1L04gMS9UeXBlL 09ialN0bT4+c3RyZWFtDQpo3lSMywrCMBAAf6W3JvSQbV5oKQW 1NxFE/YHaLBgpRtYN4t9b1Iu3OcyML6BoW7XKfEkkpNoQDhzTrR8YRd9 o0BZs7WHhluAqMCVA+bM+/hZfz0ThMeMuhb9K29o4o30F+lvtKYU8IokD3hPxOscpIEl1zOc rjjwvTpEnFLLr3gIMAJ28K+cNCmVuZHN0cmVhbQ1lbmRvYmoNN CAwIG9iag08PC9EZWNvZGVQYXJtczw8L0NvbHVtbnMgMy9QcmV kaWN0b3IgMTI+Pi9GaWx0ZXIvRmxhdGVEZWNvZGUvSURbPDMyM zgzNjM5MzczNjQxNDIyRDM5NDE0NjM3MkQzNDM5MzYzNzJENDE 0MzM4MzcyRDQ2MzEzOTQ1MzQ0NTQyMzgzNDQxNDQzMD48MzBDR jNGNDhFRjc1RDk0MTk2NzRCQ0Y5OUFERDNFOUE+XS9JbmZvIDY gMCBSL0xlbmd0aCAzNy9Sb290IDggMCBSL1NpemUgNy9UeXBlL 1hSZWYvV1sxIDIgMF0+PnN0cmVhbQ0KaN5iYmBgYGK0/cDEwC/PxMDQw8TA+ISJcXMzkM0IEGAAMxEEFA0KZW5kc3RyZWFtDWVuZ G9iag1zdGFydHhyZWYNCjExNg0KJSVFT0YNCg==



    Any assistance in pointing me in the right direction would be greatly appreciated.

  2. #2
    CJ_London is offline VIP
    Windows 10 Access 2010 32bit
    Join Date
    Mar 2015
    Posts
    11,446
    Have you tried stepping through the code? And what does ‘failing’ mean? You get some sort of error? Nothing happens? A file is created, but not as a pdf?

    couple of thoughts - have you tried using one of the online converters to confirm your source data is valid?

    and see this link, code seems a bit different to yours
    https://stackoverflow.com/questions/...-string-in-vba

  3. #3
    JohanG is offline Novice
    Windows 10 Access 2016
    Join Date
    May 2022
    Posts
    17
    Afternoon CJ_London,

    Thank you for your feedback.

    The On-Click Event result in no file being created with message "Failed to load base64 string", followed by "Conversion Failed". Nothing else happens & no file gets created.

    I have successfully converted the provided base64 value using the "Base64 to File Converter" option on the online converter from "Base64.Guru".

    Also had a look at the code provided in your link, and tested it... code from the link fails as well with a Runtime Error '91' - Object variable or with block variable not set. Failing on linestatement

    Code:
    objNode.DataType = "bin.base64"
    Here's the complete function from your provided link:

    Code:
    Function DecodeBase64(ByVal strData As String) As Byte()
    
    
        Dim objXML As Object        'MSXML2.DOMDocument
        Dim objNode As Object       'MSXML2.IXMLDOMElement
        
        Set objXML = CreateObject("MSXML2.DOMDocument")
        Set ojbNode = objXML.createElement("b64")
        
        objNode.DataType = "bin.base64"
        objNode.Text = strData
        DecodeBase64 = objNode.nodeTypedValue
        
        Set objNode = Nothing
        Set objXML = Nothing
        
    End Function
    Where am I going wrong?

  4. #4
    CJ_London is offline VIP
    Windows 10 Access 2010 32bit
    Join Date
    Mar 2015
    Posts
    11,446
    message "Failed to load base64 string"
    This is not my area of expertise so I might be missing something

    if you step through the code, you should be able to identify the line that generates the error.

    It looks like this line appears to be the problem as it generates the error


    If xmlDoc.LoadXML(base64String) Then

    which in turn implies there is something wrong with your base64String variable. If that is your large amount of text, that is not xml.


    https://learn.microsoft.com/en-us/of...mlpart.loadxml


    So I think you are missing a step to convert base64 to xml

  5. #5
    JohanG is offline Novice
    Windows 10 Access 2016
    Join Date
    May 2022
    Posts
    17
    Got it to work!!

    On Click I call Base64ToFile with the Base64 value and output path:

    Base64ToFile base64String, outputPath


    Code below does the trick perfectly!


    Code:
    Public Sub Base64ToFile(base64String As String, filePath As String)
        
        Dim objStream As Object
        
        ' Create Stream object
        Set objStream = CreateObject("ADODB.Stream")
        
        ' Decode Base64 string
        objStream.Type = 1 ' Binary
        objStream.Open
        objStream.Write DecodeBase64(base64String)
        objStream.SaveToFile filePath, 2 ' Overwrite if file exists
        
        ' Clean up
        objStream.Close
        Set objStream = Nothing
        
    End Sub
    
    
    Private Function DecodeBase64(base64String As String) As Byte()
    
    
        Dim objXML As Object
        Dim byteArray() As Byte
        
        ' Convert Base64 string to byte array
        Set objXML = CreateObject("MSXML2.DOMDocument")
        With objXML
            .async = False
            .validateOnParse = False
            .loadXML "<root />"
            .documentElement.DataType = "bin.base64"
            .documentElement.Text = base64String
            byteArray = .documentElement.nodeTypedValue
        End With
        
        DecodeBase64 = byteArray
        Set objXML = Nothing
        
    End Function
    Thank you for guiding me CJ_London... appeciate your time and effort

Please reply to this thread with any new information or opinions.

Similar Threads

  1. Converting Picture to Base64
    By notrino in forum Programming
    Replies: 3
    Last Post: 11-19-2018, 08:23 AM
  2. Replies: 1
    Last Post: 03-31-2016, 08:31 AM
  3. VBA Code to save an Excel file using a Form
    By nagiese in forum Programming
    Replies: 3
    Last Post: 10-06-2015, 02:47 PM
  4. Replies: 28
    Last Post: 05-25-2014, 04:01 PM
  5. How do you file save an 'Attachment' content through code?
    By morespamforya in forum Programming
    Replies: 3
    Last Post: 08-06-2010, 08:58 AM

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
Other Forums: Microsoft Office Forums