דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תוכנה
  3. בעיה בקוד vba להורדת קובץ משרת ftp

בעיה בקוד vba להורדת קובץ משרת ftp

מתוזמן נעוץ נעול הועבר תוכנה
23 פוסטים 3 כותבים 624 צפיות 3 עוקבים
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
תגובה
  • תגובה כנושא
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • OdedDvirO OdedDvir

    @אוריי תנסה אולי להפעיל מחדש את המחשב.

    אורייא מנותק
    אורייא מנותק
    אוריי
    כתב ב נערך לאחרונה על ידי
    #8

    @OdedDvir
    מצאתי עכשיו את הקוד הזה

    Sub DownloadTransformUploadFTP()
    Dim lngINetConn
    Dim lngINet
    Dim blnRC As Boolean
    Dim UserName As String
    Dim Password As String
    Dim serverName As String
    Const ASCII_TRANSFER = 1
    Const BINARY_TRANSFER = 2
    Dim fData As WIN32_FIND_DATA
    Dim Check1
    Dim Check2
     serverName = "testftp.com"
     UserName = "test"
     Password = "test"
     localFile = "C:\Test.xlsx"
     hostFile = "/outgoing/Test.xlsx"
    blnRC = False
    lngINet = InternetOpen("MyFTP Control", 1&, vbNullString, vbNullString, 0&)
    If lngINet > 0 Then
    lngINetConn = InternetConnect(lngINet, serverName, 0, UserName, Password, 1, 0, 0)
    If lngINetConn > 0 Then
    Check1 = FtpSetCurrentDirectory(lngINetConn, "/outgoing" + vbNullString)
    fData.cFileName = String(MAX_PATH, 0)
    Check2 = FtpFindFirstFile(lngINetConn, "Test.xlsx", fData, 0, 0)
    blnRC = FtpGetFile(lngINetConn, "/outgoing/" & fData.cFileName, localFile, 0, 0, 1, 0)
    InternetCloseHandle lngINetConn
    End If
    InternetCloseHandle lngINet
    End If
    Workbooks.Open Filename:=localFile
    

    אבל גם הוא מחזיר שגיאה
    כזו

    fa7d2943-7256-42ad-87c2-133cf984bd32-image.png

    ניתן לפנות אלי גם ב al0548446188@gmail.com
    ותמיד... אבל תמיד תוכלו לשאול אותי ב :) כאן שאלות באקסל

    תגובה 1 תגובה אחרונה
    0
    • OdedDvirO מנותק
      OdedDvirO מנותק
      OdedDvir
      כתב ב נערך לאחרונה על ידי
      #9

      @אוריי איזו גרסת אקסס יש לך, 32 או 64 ביט?

      אורייא 2 תגובות תגובה אחרונה
      1
      • OdedDvirO OdedDvir

        @אוריי איזו גרסת אקסס יש לך, 32 או 64 ביט?

        אורייא מנותק
        אורייא מנותק
        אוריי
        כתב ב נערך לאחרונה על ידי
        #10

        @OdedDvir
        נראה לי שיש לי אופיס 64

        ניתן לפנות אלי גם ב al0548446188@gmail.com
        ותמיד... אבל תמיד תוכלו לשאול אותי ב :) כאן שאלות באקסל

        תגובה 1 תגובה אחרונה
        0
        • OdedDvirO OdedDvir

          @אוריי איזו גרסת אקסס יש לך, 32 או 64 ביט?

          אורייא מנותק
          אורייא מנותק
          אוריי
          כתב ב נערך לאחרונה על ידי אוריי
          #11

          @OdedDvir
          עכשיו מצאתי עוד קוד שאולי יכול לשפוך אור על הבעיה
          זה הקוד

          Function fnDownloadFile(ByVal strHostName, _
              ByVal strUserName As String, _
              ByVal strPassWord As String, _
              ByVal strRemoteFileName As String, _
              ByVal strLocalFileName As String) As String
               
              '// Set a reference to: Microsoft Internet Transfer Control
              '// This is the Msinet.ocx
          
              Dim FTP As Inet    'As InetCtlsObjects.Inet
              
              Set FTP = New Inet 'InetCtlsObjects.Inet
              
              On Error GoTo Errh
              With FTP
                  .Url = strHostName
                  .Protocol = 2
                  .UserName = strUserName
                  .Password = strPassWord
                  .Execute , "Get " + strRemoteFileName + " " + strLocalFileName
                  Do While .StillExecuting
                      DoEvents
                  Loop
                  fnDownloadFile = .ResponseInfo
              End With
          Xit:
              Set FTP = Nothing
              Exit Function
          
          Errh:
              fnDownloadFile = "Error:-" & Err.Description
              Resume Xit
          End Function
          

          אבל עדיין הוא מחזיר שגיאה כזו
          1274914b-9cc5-451e-b755-cb63bd02d3ff-image.png
          54b64f00-7620-4ac1-a0b3-198db2d7897f-image.png

          הקוד הזה ככל הנראה עובד על אותו הבסיס כמו הראשון שהבאתי

          ניתן לפנות אלי גם ב al0548446188@gmail.com
          ותמיד... אבל תמיד תוכלו לשאול אותי ב :) כאן שאלות באקסל

          OdedDvirO תגובה 1 תגובה אחרונה
          0
          • אורייא אוריי

            @OdedDvir
            עכשיו מצאתי עוד קוד שאולי יכול לשפוך אור על הבעיה
            זה הקוד

            Function fnDownloadFile(ByVal strHostName, _
                ByVal strUserName As String, _
                ByVal strPassWord As String, _
                ByVal strRemoteFileName As String, _
                ByVal strLocalFileName As String) As String
                 
                '// Set a reference to: Microsoft Internet Transfer Control
                '// This is the Msinet.ocx
            
                Dim FTP As Inet    'As InetCtlsObjects.Inet
                
                Set FTP = New Inet 'InetCtlsObjects.Inet
                
                On Error GoTo Errh
                With FTP
                    .Url = strHostName
                    .Protocol = 2
                    .UserName = strUserName
                    .Password = strPassWord
                    .Execute , "Get " + strRemoteFileName + " " + strLocalFileName
                    Do While .StillExecuting
                        DoEvents
                    Loop
                    fnDownloadFile = .ResponseInfo
                End With
            Xit:
                Set FTP = Nothing
                Exit Function
            
            Errh:
                fnDownloadFile = "Error:-" & Err.Description
                Resume Xit
            End Function
            

            אבל עדיין הוא מחזיר שגיאה כזו
            1274914b-9cc5-451e-b755-cb63bd02d3ff-image.png
            54b64f00-7620-4ac1-a0b3-198db2d7897f-image.png

            הקוד הזה ככל הנראה עובד על אותו הבסיס כמו הראשון שהבאתי

            OdedDvirO מנותק
            OdedDvirO מנותק
            OdedDvir
            כתב ב נערך לאחרונה על ידי
            #12

            @אוריי זה אותו דבר.
            תכנס שוב ל Tools>Reference, תסמן את השורה Microsoft Internet Transfer Control 6.0 (SP6) ותעלה צילום

            אורייא תגובה 1 תגובה אחרונה
            1
            • OdedDvirO OdedDvir

              @אוריי זה אותו דבר.
              תכנס שוב ל Tools>Reference, תסמן את השורה Microsoft Internet Transfer Control 6.0 (SP6) ותעלה צילום

              אורייא מנותק
              אורייא מנותק
              אוריי
              כתב ב נערך לאחרונה על ידי
              #13

              @OdedDvir
              8e422900-487a-4691-b379-01f30f459a0a-image.png

              ניתן לפנות אלי גם ב al0548446188@gmail.com
              ותמיד... אבל תמיד תוכלו לשאול אותי ב :) כאן שאלות באקסל

              OdedDvirO תגובה 1 תגובה אחרונה
              0
              • אורייא אוריי

                @OdedDvir
                8e422900-487a-4691-b379-01f30f459a0a-image.png

                OdedDvirO מנותק
                OdedDvirO מנותק
                OdedDvir
                כתב ב נערך לאחרונה על ידי
                #14

                @אוריי רציתי את החלון של הReference לא את הודעת השגיאה

                אורייא תגובה 1 תגובה אחרונה
                1
                • OdedDvirO OdedDvir

                  @אוריי רציתי את החלון של הReference לא את הודעת השגיאה

                  אורייא מנותק
                  אורייא מנותק
                  אוריי
                  כתב ב נערך לאחרונה על ידי
                  #15

                  @OdedDvir
                  e08153fb-8a77-4c6e-9c34-a96350378e67-image.png

                  ניתן לפנות אלי גם ב al0548446188@gmail.com
                  ותמיד... אבל תמיד תוכלו לשאול אותי ב :) כאן שאלות באקסל

                  תגובה 1 תגובה אחרונה
                  0
                  • OdedDvirO מנותק
                    OdedDvirO מנותק
                    OdedDvir
                    כתב ב נערך לאחרונה על ידי OdedDvir
                    #16

                    זו כנראה בעיה של גרסת 64 של אקסס, אצלי יש גרסת 32 ועובד.

                    בכל מקרה יש פתרון אחר בלי שימוש בספרייה הנ"ל, על ידי שימוש בקריאות לAPI של Windows.
                    יש לך כאן קוד VBA שמתאים גם ל64. תעתיק ותדביק במודול חדש:

                    Private Const FTP_TRANSFER_TYPE_UNKNOWN     As Long = 0
                    Private Const INTERNET_FLAG_RELOAD          As Long = &H80000000
                    
                    Private Declare PtrSafe Function InternetOpenA Lib "wininet.dll" ( _
                        ByVal sAgent As String, _
                        ByVal lAccessType As Long, _
                        ByVal sProxyName As String, _
                        ByVal sProxyBypass As String, _
                        ByVal lFlags As Long) As Long
                    
                    Private Declare PtrSafe Function InternetConnectA Lib "wininet.dll" ( _
                        ByVal hInternetSession As Long, _
                        ByVal sServerName As String, _
                        ByVal nServerPort As Long, _
                        ByVal sUsername As String, _
                        ByVal sPassword As String, _
                        ByVal lService As Long, _
                        ByVal lFlags As Long, _
                        ByVal lcontext As Long) As Long
                    
                    Private Declare PtrSafe Function FtpGetFileA Lib "wininet.dll" ( _
                        ByVal hConnect As Long, _
                        ByVal lpszRemoteFile As String, _
                        ByVal lpszNewFile As String, _
                        ByVal fFailIfExists As Long, _
                        ByVal dwFlagsAndAttributes As Long, _
                        ByVal dwFlags As Long, _
                        ByVal dwContext As Long) As Long
                        
                    Private Declare PtrSafe Function FtpPutFileA _
                       Lib "wininet.dll" _
                     _
                           (ByVal hFtpSession As Long, _
                            ByVal lpszLocalFile As String, _
                            ByVal lpszRemoteFile As String, _
                            ByVal dwFlags As Long, _
                            ByVal dwContext As Long) As Boolean
                     
                    Private Declare PtrSafe Function InternetCloseHandle Lib "wininet" ( _
                        ByVal hInet As Long) As Long
                    
                    Sub FtpDownload(ByVal strRemoteFile As String, ByVal strLocalFile As String, ByVal strHost As String, ByVal lngPort As Long, ByVal strUser As String, ByVal strPass As String)
                        Dim hOpen   As Long
                        Dim hConn   As Long
                    
                        hOpen = InternetOpenA("FTPGET", 1, vbNullString, vbNullString, 1)
                        hConn = InternetConnectA(hOpen, strHost, lngPort, strUser, strPass, 1, 0, 2)
                    
                        If FtpGetFileA(hConn, strRemoteFile, strLocalFile, 1, 0, FTP_TRANSFER_TYPE_UNKNOWN Or INTERNET_FLAG_RELOAD, 0) Then
                            Debug.Print "Success"
                        Else
                            Debug.Print "Fail"
                        End If
                    
                        'Close connections
                        InternetCloseHandle hConn
                        InternetCloseHandle hOpen
                    End Sub
                    Sub FtpUpload(ByVal strLocalFile As String, ByVal strRemoteFile As String, ByVal strHost As String, ByVal lngPort As Long, ByVal strUser As String, ByVal strPass As String)
                        Dim hOpen   As Long
                        Dim hConn   As Long
                     
                        hOpen = InternetOpenA("FTPGET", 1, vbNullString, vbNullString, 1)
                        hConn = InternetConnectA(hOpen, strHost, lngPort, strUser, strPass, 1, 0, 2)
                     
                        If FtpPutFileA(hConn, strLocalFile, strRemoteFile, FTP_TRANSFER_TYPE_UNKNOWN Or INTERNET_FLAG_RELOAD, 0) Then
                            Debug.Print "Success"
                        Else
                            Debug.Print "Fail"
                        End If
                     
                        'Close connections
                        InternetCloseHandle hConn
                        InternetCloseHandle hOpen
                     
                    End Sub
                    

                    יש שם גם דוגמאות
                    כדי להוריד קובץ:

                     FtpDownload "//Download/text file.txt", "C:\text file.txt", _
                                  "192.168.0.100", 21, "username", "password"
                    

                    כדי לשלוח קובץ:

                      FtpUpload "C:\text file.txt", "//Download/text file.txt", _
                                "192.168.0.100", 21, "username", "password"
                    
                    אורייא תגובה 1 תגובה אחרונה
                    1
                    • OdedDvirO OdedDvir

                      זו כנראה בעיה של גרסת 64 של אקסס, אצלי יש גרסת 32 ועובד.

                      בכל מקרה יש פתרון אחר בלי שימוש בספרייה הנ"ל, על ידי שימוש בקריאות לAPI של Windows.
                      יש לך כאן קוד VBA שמתאים גם ל64. תעתיק ותדביק במודול חדש:

                      Private Const FTP_TRANSFER_TYPE_UNKNOWN     As Long = 0
                      Private Const INTERNET_FLAG_RELOAD          As Long = &H80000000
                      
                      Private Declare PtrSafe Function InternetOpenA Lib "wininet.dll" ( _
                          ByVal sAgent As String, _
                          ByVal lAccessType As Long, _
                          ByVal sProxyName As String, _
                          ByVal sProxyBypass As String, _
                          ByVal lFlags As Long) As Long
                      
                      Private Declare PtrSafe Function InternetConnectA Lib "wininet.dll" ( _
                          ByVal hInternetSession As Long, _
                          ByVal sServerName As String, _
                          ByVal nServerPort As Long, _
                          ByVal sUsername As String, _
                          ByVal sPassword As String, _
                          ByVal lService As Long, _
                          ByVal lFlags As Long, _
                          ByVal lcontext As Long) As Long
                      
                      Private Declare PtrSafe Function FtpGetFileA Lib "wininet.dll" ( _
                          ByVal hConnect As Long, _
                          ByVal lpszRemoteFile As String, _
                          ByVal lpszNewFile As String, _
                          ByVal fFailIfExists As Long, _
                          ByVal dwFlagsAndAttributes As Long, _
                          ByVal dwFlags As Long, _
                          ByVal dwContext As Long) As Long
                          
                      Private Declare PtrSafe Function FtpPutFileA _
                         Lib "wininet.dll" _
                       _
                             (ByVal hFtpSession As Long, _
                              ByVal lpszLocalFile As String, _
                              ByVal lpszRemoteFile As String, _
                              ByVal dwFlags As Long, _
                              ByVal dwContext As Long) As Boolean
                       
                      Private Declare PtrSafe Function InternetCloseHandle Lib "wininet" ( _
                          ByVal hInet As Long) As Long
                      
                      Sub FtpDownload(ByVal strRemoteFile As String, ByVal strLocalFile As String, ByVal strHost As String, ByVal lngPort As Long, ByVal strUser As String, ByVal strPass As String)
                          Dim hOpen   As Long
                          Dim hConn   As Long
                      
                          hOpen = InternetOpenA("FTPGET", 1, vbNullString, vbNullString, 1)
                          hConn = InternetConnectA(hOpen, strHost, lngPort, strUser, strPass, 1, 0, 2)
                      
                          If FtpGetFileA(hConn, strRemoteFile, strLocalFile, 1, 0, FTP_TRANSFER_TYPE_UNKNOWN Or INTERNET_FLAG_RELOAD, 0) Then
                              Debug.Print "Success"
                          Else
                              Debug.Print "Fail"
                          End If
                      
                          'Close connections
                          InternetCloseHandle hConn
                          InternetCloseHandle hOpen
                      End Sub
                      Sub FtpUpload(ByVal strLocalFile As String, ByVal strRemoteFile As String, ByVal strHost As String, ByVal lngPort As Long, ByVal strUser As String, ByVal strPass As String)
                          Dim hOpen   As Long
                          Dim hConn   As Long
                       
                          hOpen = InternetOpenA("FTPGET", 1, vbNullString, vbNullString, 1)
                          hConn = InternetConnectA(hOpen, strHost, lngPort, strUser, strPass, 1, 0, 2)
                       
                          If FtpPutFileA(hConn, strLocalFile, strRemoteFile, FTP_TRANSFER_TYPE_UNKNOWN Or INTERNET_FLAG_RELOAD, 0) Then
                              Debug.Print "Success"
                          Else
                              Debug.Print "Fail"
                          End If
                       
                          'Close connections
                          InternetCloseHandle hConn
                          InternetCloseHandle hOpen
                       
                      End Sub
                      

                      יש שם גם דוגמאות
                      כדי להוריד קובץ:

                       FtpDownload "//Download/text file.txt", "C:\text file.txt", _
                                    "192.168.0.100", 21, "username", "password"
                      

                      כדי לשלוח קובץ:

                        FtpUpload "C:\text file.txt", "//Download/text file.txt", _
                                  "192.168.0.100", 21, "username", "password"
                      
                      אורייא מנותק
                      אורייא מנותק
                      אוריי
                      כתב ב נערך לאחרונה על ידי אוריי
                      #17

                      @OdedDvir
                      העתקתי והוא מחזיר שגיאה
                      1ca49962-6135-4ebe-93c0-45d0718889e5-image.png

                      44dc90e1-822c-4b41-9f18-238766ce9de4-image.png

                      ניתן לפנות אלי גם ב al0548446188@gmail.com
                      ותמיד... אבל תמיד תוכלו לשאול אותי ב :) כאן שאלות באקסל

                      OdedDvirO תגובה 1 תגובה אחרונה
                      0
                      • אורייא אוריי

                        @OdedDvir
                        העתקתי והוא מחזיר שגיאה
                        1ca49962-6135-4ebe-93c0-45d0718889e5-image.png

                        44dc90e1-822c-4b41-9f18-238766ce9de4-image.png

                        OdedDvirO מנותק
                        OdedDvirO מנותק
                        OdedDvir
                        כתב ב נערך לאחרונה על ידי
                        #18

                        @אוריי צודק, שכחתי שמדובר ב-64 ביט. תיקנתי במקור. תנסה שוב

                        אורייא תגובה 1 תגובה אחרונה
                        1
                        • OdedDvirO OdedDvir

                          @אוריי צודק, שכחתי שמדובר ב-64 ביט. תיקנתי במקור. תנסה שוב

                          אורייא מנותק
                          אורייא מנותק
                          אוריי
                          כתב ב נערך לאחרונה על ידי
                          #19

                          @OdedDvir
                          הרבה תודה עד כה
                          כעת הוא מריץ רק חלק מן הקוד אבל לא מוריד אותו
                          איך אני יכול לדעת מה השגיאה ומה חסר לו?

                          ניתן לפנות אלי גם ב al0548446188@gmail.com
                          ותמיד... אבל תמיד תוכלו לשאול אותי ב :) כאן שאלות באקסל

                          OdedDvirO תגובה 1 תגובה אחרונה
                          0
                          • אורייא אוריי

                            @OdedDvir
                            הרבה תודה עד כה
                            כעת הוא מריץ רק חלק מן הקוד אבל לא מוריד אותו
                            איך אני יכול לדעת מה השגיאה ומה חסר לו?

                            OdedDvirO מנותק
                            OdedDvirO מנותק
                            OdedDvir
                            כתב ב נערך לאחרונה על ידי
                            #20

                            @אוריי אמר בבעיה בקוד vba להורדת קובץ משרת ftp:

                            כעת הוא מריץ רק חלק מן הקוד

                            מה הפירוש?

                            תגובה 1 תגובה אחרונה
                            1
                            • OdedDvirO מנותק
                              OdedDvirO מנותק
                              OdedDvir
                              כתב ב נערך לאחרונה על ידי
                              #21

                              טוב, אחרי שקצת חיפשתי מידע בנושא, נראה שאין פתרון פשוט לבעיה על ידי VBA בלבד 🤔 הגעתי לכמה מסקנות:

                              1. הגישה לשרת FTP כיום שונה מהגישה שהיתה בתקופת כתיבת הקוד הנ"ל. כיום משתמשים במצב שנקרא Passive Mode (כנראה מטעמי אבטחה)
                              2. ל-Windows אין מנגנון מובנה לכך.

                              כדי לגשת בצורה מאובטחת לשרת FTP יש צורך בתוכנה חיצונית.
                              פתרון אפשרי (טלאי) אולי הוא ליצור Script טקסט עבור התוכנה החיצונית, ולהריץ אותו מתוך VBA...

                              אשמח אם יש למבינים בנושא משהו להוסיף.

                              אורייא תגובה 1 תגובה אחרונה
                              2
                              • OdedDvirO OdedDvir

                                טוב, אחרי שקצת חיפשתי מידע בנושא, נראה שאין פתרון פשוט לבעיה על ידי VBA בלבד 🤔 הגעתי לכמה מסקנות:

                                1. הגישה לשרת FTP כיום שונה מהגישה שהיתה בתקופת כתיבת הקוד הנ"ל. כיום משתמשים במצב שנקרא Passive Mode (כנראה מטעמי אבטחה)
                                2. ל-Windows אין מנגנון מובנה לכך.

                                כדי לגשת בצורה מאובטחת לשרת FTP יש צורך בתוכנה חיצונית.
                                פתרון אפשרי (טלאי) אולי הוא ליצור Script טקסט עבור התוכנה החיצונית, ולהריץ אותו מתוך VBA...

                                אשמח אם יש למבינים בנושא משהו להוסיף.

                                אורייא מנותק
                                אורייא מנותק
                                אוריי
                                כתב ב נערך לאחרונה על ידי אוריי
                                #22

                                @OdedDvir אמר בבעיה בקוד vba להורדת קובץ משרת ftp:

                                פתרון אפשרי (טלאי) אולי הוא ליצור Script טקסט עבור התוכנה החיצונית, ולהריץ אותו מתוך VBA...

                                אני מבין שעדיף כבר ליצור סקריפט שיוריד
                                אז אני יפתח נושא חדש בשביל זה

                                עריכה : המשך כאן

                                ניתן לפנות אלי גם ב al0548446188@gmail.com
                                ותמיד... אבל תמיד תוכלו לשאול אותי ב :) כאן שאלות באקסל

                                S תגובה 1 תגובה אחרונה
                                0
                                • אורייא אוריי

                                  @OdedDvir אמר בבעיה בקוד vba להורדת קובץ משרת ftp:

                                  פתרון אפשרי (טלאי) אולי הוא ליצור Script טקסט עבור התוכנה החיצונית, ולהריץ אותו מתוך VBA...

                                  אני מבין שעדיף כבר ליצור סקריפט שיוריד
                                  אז אני יפתח נושא חדש בשביל זה

                                  עריכה : המשך כאן

                                  S מנותק
                                  S מנותק
                                  smk123
                                  כתב ב נערך לאחרונה על ידי
                                  #23
                                  פוסט זה נמחק!
                                  תגובה 1 תגובה אחרונה
                                  0
                                  תגובה
                                  • תגובה כנושא
                                  התחברו כדי לפרסם תגובה
                                  • מהישן לחדש
                                  • מהחדש לישן
                                  • הכי הרבה הצבעות


                                  • 1
                                  • 2
                                  בא תתחבר לדף היומי!
                                  • התחברות

                                  • אין לך חשבון עדיין? הרשמה

                                  • התחברו או הירשמו כדי לחפש.
                                  • פוסט ראשון
                                    פוסט אחרון
                                  0
                                  • דף הבית
                                  • קטגוריות
                                  • פוסטים אחרונים
                                  • משתמשים
                                  • חיפוש
                                  • חוקי הפורום