从Excel连接到FTP以自动共享文件(VBA初学者)
我是Excel VBA的初学者和新手,但我正试图通过连接到Excel并创建一个有帮助的宏,在FTP(WinSCP)中实现一些文件共享的自动化。在FTP中,我进入会话>生成会话URL/代码>脚本(脚本文件),其中包含以下代码:从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。我正在引用此站点中的代码以放入“#命令”区域: 我按照这
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