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

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

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

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

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

    @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
                      • דף הבית
                      • קטגוריות
                      • פוסטים אחרונים
                      • משתמשים
                      • חיפוש
                      • חוקי הפורום