ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: winland

[共享]使用Wininet的VBA FTP操作的类模块

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2010-2-23 16:41 | 显示全部楼层
用楼主的方法FTP下载文件后,EXCEL退出时死机,一直白屏,只有用任务管理器终止EXCEL,这是怎么回事?

TA的精华主题

TA的得分主题

发表于 2010-2-23 17:51 | 显示全部楼层
支持多线程下载吗

还有个问题是下载线程如果僵死,它的DDL支持自动kill吗。不过这些问题都超出Excel的范围了

Unix下面的压缩文件要用Bin方式下载

TA的精华主题

TA的得分主题

发表于 2010-3-15 06:19 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
Sub UploadFile()
    Dim strRemoteFile As String
    Dim strLocalFile As String
    Set cF = New cFTP
    cF.SetModePassive
    strLocalFile = "d:\1212.txt"   '这里放你想上传导FTP的文件名
    strRemoteFile = "1212.txt"
    If cF.OpenConnection("127.0.0.1:3721", "aaa", "123") = False Then
        GoTo errhandle
    End If
    If cF.FTPUploadFile(strLocalFile, strRemoteFile) = False Then
        GoTo errhandle
    End If
    cF.CloseConnection
    Exit Sub
errhandle:
    MsgBox cF.GetLastErrorMessage
    cF.CloseConnection
End Sub
我的FTP是3721端口,使用时出现“internetConnect error code: 12031 Message: 与服务器的连接被重置”
请问这是FTP的问题,还是这段代码不支持端口。(我的FTP用FTP上传工具或直接打开都可以正常上传和下载文件的)

怎样修改以上代码才能实现上传正在运行的excel文件,也就是上传自己

[ 本帖最后由 a19410593 于 2010-3-15 06:34 编辑 ]

TA的精华主题

TA的得分主题

发表于 2010-3-16 16:48 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
晕````都没老师关注!

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-3-16 20:26 | 显示全部楼层
关于自定义端口,原来的程序是默认使用21端口。如果要自定义端口的话,可以将InternetConnect函数的第3个参数改成你要的端口。
Public Function OpenConnection(sServer As String, sUser As String, sPassword As String) As Boolean
    If hConnection <> 0 Then
        InternetCloseHandle hConnection
    End If
    hConnection = InternetConnect(hOpen, sServer, INTERNET_INVALID_PORT_NUMBER, sUser, sPassword, INTERNET_SERVICE_FTP, dwSeman, 0)
    If hConnection = 0 Then
        ErrorOut Err.LastDllError, "InternetConnect"
        OpenConnection = False
        Exit Function
    Else
        OpenConnection = True
    End If
End Function
改成:
hConnection = InternetConnect(hOpen, sServer, 3721, sUser, sPassword, INTERNET_SERVICE_FTP, dwSeman, 0)

TA的精华主题

TA的得分主题

发表于 2010-3-22 17:03 | 显示全部楼层
非常感谢Winland版主的指点,完全知道怎么使用了。

TA的精华主题

TA的得分主题

发表于 2010-4-12 23:11 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2010-7-11 18:14 | 显示全部楼层

如何导入类模块(升级FTP)呢?

导入类模块(升级CFTP类)的命名问题.rar (17.62 KB, 下载次数: 74)
删除原有模块时,按理模块名应释放出来,
但导入类模块的以该名命名时会出现名称冲突!
如何解决呢?请教各路高手
Private Sub CommandButton1_Click()
'勾取信任
            Dim Chgset As Boolean
            Debug.Print ThisWorkbook.VBProject.Protection
            If Err.Number = 1004 Then
                Err.Clear
                Application.SendKeys "%TMS%T%V{ENTER}"
                Chgset = True
                DoEvents
            End If
'删除类模块CFTP
    Dim Vbc As VBComponent
    For Each Vbc In Application.ThisWorkbook.VBProject.VBComponents
        Select Case Vbc.Type
        Case 1, 2, 3
            With Application.VBE.ActiveVBProject.VBComponents
                .Remove .Item(Vbc.Name)
            End With
        Case vbext_ct_ClassModule
            With Application.VBE.ActiveVBProject.VBComponents
                .Remove .Item(Vbc.Name)
            End With
        Case Else
            Vbc.CodeModule.DeleteLines 1, Vbc.CodeModule.CountOfLines
        End Select
    Next
  '导入升级版类模块CFTP
    Dim FileName As String, ClassName As String
    FileName = ThisWorkbook.Path & "\CFTP.cls"
    ClassName = Left(FileName, InStr(1, FileName, ".") - 1)
    Set Vbc = ThisWorkbook.VBProject.VBComponents.Import(FileName)  '会自动命名为CFTP1,以致原用类引用失效
    Vbc.Name = ClassName  '此处出错

END SUB

[ 本帖最后由 zxylxw 于 2010-7-11 18:28 编辑 ]

TA的精华主题

TA的得分主题

发表于 2010-7-30 11:14 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

回复 38楼 zxylxw 的帖子

你的 ClassName 附带着路径,当然不对。

TA的精华主题

TA的得分主题

发表于 2010-7-30 11:22 | 显示全部楼层

上传文件的代码中有bug

cFTP 类中 FTPUploadFile() 中有个bug
  Get #1, , Data
  If (InternetWriteFile(hFile, Data(0), Size Mod BUFFERSIZE, Written) = 0) Then
    FTPUploadFile = False
    ErrorOut Err.LastDllError, "InternetWriteFile2"
    Exit Function
  End If

当 (Size Mod BUFFERSIZE = 0) 时会出现bug,所以这段代码应改为
If Size Mod BUFFERSIZE <> 0 Then
  Get #1, , Data
  If (InternetWriteFile(hFile, Data(0), Size Mod BUFFERSIZE, Written) = 0) Then
    FTPUploadFile = False
    ErrorOut Err.LastDllError, "InternetWriteFile2"
    Exit Function
  End If
End If
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-20 00:35 , Processed in 0.040437 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表