Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Excel连接到FTP以自动共享文件(VBA初学者)_Vba_Excel_Ftp - Fatal编程技术网

从Excel连接到FTP以自动共享文件(VBA初学者)

从Excel连接到FTP以自动共享文件(VBA初学者),vba,excel,ftp,Vba,Excel,Ftp,我是Excel VBA的初学者和新手,但我正试图通过连接到Excel并创建一个有帮助的宏,在FTP(WinSCP)中实现一些文件共享的自动化。在FTP中,我进入会话>生成会话URL/代码>脚本(脚本文件),其中包含以下代码: open ftp://myUsername:myPassword@theHostname/ # Your command 1 # Your command 2 exit 我假设开放行可以将Excel连接到FTP。我正在引用此站点中的代码以放入“#命令”区域: 我按照这

我是Excel VBA的初学者和新手,但我正试图通过连接到Excel并创建一个有帮助的宏,在FTP(WinSCP)中实现一些文件共享的自动化。在FTP中,我进入会话>生成会话URL/代码>脚本(脚本文件),其中包含以下代码:

open ftp://myUsername:myPassword@theHostname/

# Your command 1
# Your command 2

exit
我假设开放行可以将Excel连接到FTP。我正在引用此站点中的代码以放入“#命令”区域:

我按照这个网站上说的去VBA编辑器>工具>参考并检查微软的互联网控制

1) 我使用的代码正确吗?我是否将其放置在正确的区域(在“命令”区域)?现在我把整个代码放在一个命令按钮中,但当我点击它时,它只会给我一个语法错误,突出显示第一行: 私有子命令按钮1u单击()

2) 我是将Msgbox留在第三行等待用户输入,还是填写用户名/密码/主机名?(我还不太熟悉VBA中的函数)如果我在代码中填写了它,那么由于我没有访问网站,我应该为“yoursite”值添加什么


对不起,我很困惑:(任何帮助都会很好,提前谢谢你!

我想你应该看看这里- 这里展示了如何在vba中为INet对象添加引用。此外,如果您只想测试代码是否有效,而不是将宏指定给按钮等等,那么使用“函数”然后,当您转到工作表单元格并开始键入=fnDown…您应该会看到您的宏-在那里您可以放置您的函数参数。但是,首先您必须注意对Inet的引用


这个链接可能也很有用:

我想你应该看看这里- 这里展示了如何在vba中为INet对象添加引用。此外,如果您只想测试代码是否有效,而不是将宏指定给按钮等等,那么使用“函数”然后,当您转到工作表单元格并开始键入=fnDown…您应该会看到您的宏-在那里您可以放置您的函数参数。但是,首先您必须注意对Inet的引用


此链接也可能有帮助:

您正在将两种完全不同的方法混合在一起。WinSCP是一个可编写脚本的FTP客户端,您确实可以从VBA运行。或者您可以使用
inetclsobjects.Inet
。但不要同时使用这两种方法。我在注释中看到,将FTP设置为Inet并设置为FTP=New Inet-这些行是否也这样做事情?你是说我应该去掉第一行“open ftp..”吗?不,它们不一样。第一行声明一个变量,而第二行为该变量分配一个新的类实例+是,删除
open
,那不是VB,那是WinSCP脚本命令。你在混合两种完全不同的方法。WinSCP I这是一个可编写脚本的FTP客户端,您确实可以从VBA运行。或者您可以使用
inetclsobjects.Inet
。但不要同时使用这两个。我在Dim FTP旁边的注释中看到,将其设置为Inet并设置为FTP=New Inet-这些行的功能相同吗?您的意思是我应该删除第一行“open FTP…”吗?不,它们的功能不同。第一行声明一个变量,而第二个变量为该变量分配一个新的类实例+是,删除
open
,这不是VB,这是WinSCP脚本命令。感谢这些引用-我似乎在C:\Windows中的任何地方都找不到msinet.ocx,但实际上,很难找到这个引用,因为我看到它出现在Win XP…h中owever,我发现了另一个有趣的来源。此外,这取决于你想用这个FTP做什么,但例如,你可以在Excel中使用webbrowser控件,它将模拟webbrowser-你将能够操纵该网站。我成功地获得了对msinet.ocx和MS Internet Transfer的引用,但你能解释更多吗如何测试以及在何处放置代码?您好,很好。因此,在您的工作簿alt+f11中,然后在左侧栏上右键单击并添加新模块。在此模块顶部添加“Option Explicit”在编译前强制代码无错误。然后将以函数开头的代码粘贴到下面。当您这样做时,您可以在工作表中使用此函数作为公式-开始键入任何单元格=函数名称,并在其中输入所需的参数,例如Ftp地址。这样您就可以检查代码是否工作正常。如果没有,则转到vba编辑器并在左栏中第一行函数的级别上单击鼠标左键…代码,然后当函数启动时(当您将其放入工作表单元格时),debbuger将在此点停止nad您将能够逐行使用F8进行调试,以检查nie代码的工作情况。感谢这些参考资料-我似乎在C:\Windows中的任何地方都找不到msinet.ocx。尽管如此,很难找到这个参考资料,因为我看到它出现在Win XP中……但是,我找到了另一个有趣的源代码。此外,这取决于您的想法你想使用这个FTP,但是,例如,你可以在Excel中使用webbrowser控件,它将模拟webbrowser-你将能够操作该站点。我成功地获得了对msinet.ocx和MS Internet Transfer的引用,但是你能解释一下你如何测试以及在哪里放置代码吗?嗨,太好了。所以在你的工作簿中,alt+f11然后在左边t侧栏右键单击并添加新模块。在此模块顶部添加“Option Explicit”在编译前强制代码无错误。然后将以函数开头的代码粘贴到下面。当您这样做时,您可以在工作表中使用此函数作为公式-开始键入任何单元格=函数名称,并在其中输入所需的参数,例如Ftp地址。这样您就可以检查代码是否工作正常。如果没有,则转到vba编辑器并在左栏中的第一行函数的级别上单击鼠标左键…代码,然后当函数启动时(当您将
open ftp://myUsername:myPassword@theHostname/

Option Explicit

Sub FtpTest()
    MsgBox fnDownloadFile("ftp://yoursite", "username", "password", _
        "The name of your file", _
        "C:\The name of your file to save as")
End Sub

Function fnDownloadFile(ByVal strHostName As String, _
    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

exit