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

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

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

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

מתוזמן נעוץ נעול הועבר תוכנה
23 פוסטים 3 כותבים 624 צפיות 3 עוקבים
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
תגובה
  • תגובה כנושא
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • 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
                            • דף הבית
                            • קטגוריות
                            • פוסטים אחרונים
                            • משתמשים
                            • חיפוש
                            • חוקי הפורום