Vba 点击按钮将Word文件传输到数据库或FTP?

Vba 点击按钮将Word文件传输到数据库或FTP?,vba,ftp,ms-word,Vba,Ftp,Ms Word,我希望能够通过单击菜单栏上的按钮或关闭(如果保存)将合并word文档的内容发送到数据库 我发现了一些工作代码,但在尝试修改时遇到问题(VBA noob) ”写于2008年6月11日 作者:莱思·罗斯 '打开Internet对象 私有声明函数InternetOpen_ 库“wininet.dll”_ 别名“InternetOpenA”_ (ByVal sAgent作为字符串_ ByVal lAccessType,只要_ ByVal sProxyName作为字符串_ ByVal sProxyBypa

我希望能够通过单击菜单栏上的按钮或关闭(如果保存)将合并word文档的内容发送到数据库

我发现了一些工作代码,但在尝试修改时遇到问题(VBA noob)

”写于2008年6月11日
作者:莱思·罗斯
'打开Internet对象
私有声明函数InternetOpen_
库“wininet.dll”_
别名“InternetOpenA”_
(ByVal sAgent作为字符串_
ByVal lAccessType,只要_
ByVal sProxyName作为字符串_
ByVal sProxyBypass作为字符串_
ByVal lFlags(长)一样长
'连接到网络
专用声明函数InternetConnect_
库“wininet.dll”_
别名“InternetConnectA”_
(ByVal hInternetSession,只要_
ByVal sServerName作为字符串_
ByVal N服务器端口为整数_
ByVal sUsername作为字符串_
ByVal sPassword作为字符串_
ByVal L服务,只要_
拜瓦尔和我一样长_
ByVal lContext As Long)As Long
'使用FTP获取文件
私有声明函数FtpGetFile_
库“wininet.dll”_
别名“FtpGetFileA”_
(ByVal hFtpSession,只要_
ByVal lpszRemoteFile作为字符串_
ByVal lpszNewFile作为字符串_
ByVal ffailife以布尔形式存在_
ByVal dwFlagsAndAttributes的长度_
拜瓦尔:只要_
ByVal dwContext(长度)为布尔值
'使用FTP发送文件
私有声明函数FtpPutFile_
库“wininet.dll”_
别名“FtpPutFileA”_
(ByVal hFtpSession,只要_
ByVal lpszLocalFile作为字符串_
ByVal lpszRemoteFile作为字符串_
拜瓦尔:只要_
ByVal dwContext(长度)为布尔值
'关闭Internet对象
私有声明函数InternetCloseHandle_
库“wininet.dll”_
(ByVal hInet等长)作为整数
子自动关闭()
暗淡如长
昏暗的康涅狄格河
将主机文件设置为字符串
将本地文件设置为字符串
将密码设置为字符串
暗淡的后退
将服务器名称设置为字符串
只要成功
将用户名设置为字符串
常量ASCII_传输=1
常量二进制_传输=2
ServerName=“ftp.myserver.com”
UserName=“myusername”
Password=“Password”
'如果使用localFile=ActiveDocument.FullName,则此操作失败
'但如果本地文件是硬编码的,则可以
localFile=“f:\My Documents\Test.Txt”
hostFile=ActiveDocument.Name
如果Len(ActiveDocument.Path)=0,则
MsgBox“必须先保存文档。”
出口接头
如果结束
RetVal=False
INet=InternetOpen(“MyFTP控件”,1&,vbNullString,vbNullString,0&)
如果INet>0,则
INetConn=InternetConnect(INet、服务器名、0&、用户名、密码、1&、0&、0&)
如果INetConn>0,则
Success=FtpPutFile(INetConn、localFile、hostFile、二进制\u传输、0&)
RetVal=InternetCloseHandle(iNet连接)
如果结束
RetVal=InternetCloseHandle(INet)
如果结束
如果成功为0,则
MsgBox(“上传过程已完成”)
其他的
MsgBox“FTP文件错误!”
如果结束
端接头

我希望localFile变量是动态的并反映当前文档,但它只有在硬编码的情况下才能工作。我哪里做错了

已编辑,现在可以将当前word文档的副本发送到ftp服务器

'Written: June 11, 2008
'Author:  Original author Leith Ross
'Amended: Jun 25, 2010 Saul Galloway

'Open the Internet object
 Private Declare Function InternetOpen _
   Lib "wininet.dll" _
     Alias "InternetOpenA" _
       (ByVal sAgent As String, _
        ByVal lAccessType As Long, _
        ByVal sProxyName As String, _
        ByVal sProxyBypass As String, _
        ByVal lFlags As Long) As Long

'Connect to the network
 Private Declare Function InternetConnect _
   Lib "wininet.dll" _
     Alias "InternetConnectA" _
       (ByVal hInternetSession As Long, _
        ByVal sServerName As String, _
        ByVal nServerPort As Integer, _
        ByVal sUsername As String, _
        ByVal sPassword As String, _
        ByVal lService As Long, _
        ByVal lFlags As Long, _
        ByVal lContext As Long) As Long

'Get a file using FTP
 Private Declare Function FtpGetFile _
   Lib "wininet.dll" _
     Alias "FtpGetFileA" _
       (ByVal hFtpSession As Long, _
        ByVal lpszRemoteFile As String, _
        ByVal lpszNewFile As String, _
        ByVal fFailIfExists As Boolean, _
        ByVal dwFlagsAndAttributes As Long, _
        ByVal dwFlags As Long, _
        ByVal dwContext As Long) As Boolean

'Send a file using FTP
 Private Declare Function FtpPutFile _
   Lib "wininet.dll" _
     Alias "FtpPutFileA" _
       (ByVal hFtpSession As Long, _
        ByVal lpszLocalFile As String, _
        ByVal lpszRemoteFile As String, _
        ByVal dwFlags As Long, _
        ByVal dwContext As Long) As Boolean

'Close the Internet object
 Private Declare Function InternetCloseHandle _
   Lib "wininet.dll" _
     (ByVal hInet As Long) As Integer

Sub AutoClose()

  Dim INet As Long
  Dim INetConn As Long
  Dim hostFile As String
  Dim localFile As String
  Dim Password As String
  Dim RetVal As Long
  Dim ServerName As String
  Dim Success As Long
  Dim UserName As String
  Dim currentFileAndPath As String

  Const ASCII_TRANSFER = 1
  Const BINARY_TRANSFER = 2


    ServerName = "ftp.yourserver.com"
    UserName = "username"
    Password = "yourpassword"

    currentFileAndPath = ActiveDocument.FullName
    ActiveDocument.SaveAs ("C:\TempFile.doc")
    ActiveDocument.SaveAs (currentFileAndPath)

    localFile = "C:\TempFile.doc"
    hostFile = ActiveDocument.Name

    If Len(ActiveDocument.Path) = 0 Then
        MsgBox "The document must be saved first."
        Exit Sub
    End If

      RetVal = False
      INet = InternetOpen("MyFTP Control", 1&, vbNullString, vbNullString, 0&)
        If INet > 0 Then
          INetConn = InternetConnect(INet, ServerName, 0&, UserName, Password, 1&, 0&, 0&)
            If INetConn > 0 Then
              Success = FtpPutFile(INetConn, localFile, hostFile, BINARY_TRANSFER, 0&)
              RetVal = InternetCloseHandle(INetConn)
            End If
         RetVal = InternetCloseHandle(INet)
        End If

      If Success <> 0 Then
        MsgBox ("Upload process completed")
      Else
        MsgBox "FTP File Error!"
      End If

End Sub
”写于2008年6月11日
作者:原作者莱思·罗斯
修订日期:2010年6月25日
'打开Internet对象
私有声明函数InternetOpen_
库“wininet.dll”_
别名“InternetOpenA”_
(ByVal sAgent作为字符串_
ByVal lAccessType,只要_
ByVal sProxyName作为字符串_
ByVal sProxyBypass作为字符串_
ByVal lFlags(长)一样长
'连接到网络
专用声明函数InternetConnect_
库“wininet.dll”_
别名“InternetConnectA”_
(ByVal hInternetSession,只要_
ByVal sServerName作为字符串_
ByVal N服务器端口为整数_
ByVal sUsername作为字符串_
ByVal sPassword作为字符串_
ByVal L服务,只要_
拜瓦尔和我一样长_
ByVal lContext As Long)As Long
'使用FTP获取文件
私有声明函数FtpGetFile_
库“wininet.dll”_
别名“FtpGetFileA”_
(ByVal hFtpSession,只要_
ByVal lpszRemoteFile作为字符串_
ByVal lpszNewFile作为字符串_
ByVal ffailife以布尔形式存在_
ByVal dwFlagsAndAttributes的长度_
拜瓦尔:只要_
ByVal dwContext(长度)为布尔值
'使用FTP发送文件
私有声明函数FtpPutFile_
库“wininet.dll”_
别名“FtpPutFileA”_
(ByVal hFtpSession,只要_
ByVal lpszLocalFile作为字符串_
ByVal lpszRemoteFile作为字符串_
拜瓦尔:只要_
ByVal dwContext(长度)为布尔值
'关闭Internet对象
私有声明函数InternetCloseHandle_
库“wininet.dll”_
(ByVal hInet等长)作为整数
子自动关闭()
暗淡如长
昏暗的康涅狄格河
将主机文件设置为字符串
将本地文件设置为字符串
将密码设置为字符串
暗淡的后退
将服务器名称设置为字符串
只要成功
将用户名设置为字符串
将currentFileAndPath设置为字符串
常量ASCII_传输=1
常量二进制_传输=2
ServerName=“ftp.yourserver.com”
UserName=“UserName”
Password=“您的密码”
currentFileAndPath=ActiveDocument.FullName
ActiveDocument.SaveAs(“C:\TempFile.doc”)
ActiveDocument.SaveAs(currentFileAndPath)
localFile=“C:\TempFile.doc”
hostFile=ActiveDocument.Name
如果Len(ActiveDocument.Path)=0,则
MsgBox“必须先保存文档。”
出口接头
如果结束
RetVal=False
INet=InternetOpen(“MyFTP控件”,1&,vbNullString,vbNullString,0&)
如果INet>0,则
'Written: June 11, 2008
'Author:  Original author Leith Ross
'Amended: Jun 25, 2010 Saul Galloway

'Open the Internet object
 Private Declare Function InternetOpen _
   Lib "wininet.dll" _
     Alias "InternetOpenA" _
       (ByVal sAgent As String, _
        ByVal lAccessType As Long, _
        ByVal sProxyName As String, _
        ByVal sProxyBypass As String, _
        ByVal lFlags As Long) As Long

'Connect to the network
 Private Declare Function InternetConnect _
   Lib "wininet.dll" _
     Alias "InternetConnectA" _
       (ByVal hInternetSession As Long, _
        ByVal sServerName As String, _
        ByVal nServerPort As Integer, _
        ByVal sUsername As String, _
        ByVal sPassword As String, _
        ByVal lService As Long, _
        ByVal lFlags As Long, _
        ByVal lContext As Long) As Long

'Get a file using FTP
 Private Declare Function FtpGetFile _
   Lib "wininet.dll" _
     Alias "FtpGetFileA" _
       (ByVal hFtpSession As Long, _
        ByVal lpszRemoteFile As String, _
        ByVal lpszNewFile As String, _
        ByVal fFailIfExists As Boolean, _
        ByVal dwFlagsAndAttributes As Long, _
        ByVal dwFlags As Long, _
        ByVal dwContext As Long) As Boolean

'Send a file using FTP
 Private Declare Function FtpPutFile _
   Lib "wininet.dll" _
     Alias "FtpPutFileA" _
       (ByVal hFtpSession As Long, _
        ByVal lpszLocalFile As String, _
        ByVal lpszRemoteFile As String, _
        ByVal dwFlags As Long, _
        ByVal dwContext As Long) As Boolean

'Close the Internet object
 Private Declare Function InternetCloseHandle _
   Lib "wininet.dll" _
     (ByVal hInet As Long) As Integer

Sub AutoClose()

  Dim INet As Long
  Dim INetConn As Long
  Dim hostFile As String
  Dim localFile As String
  Dim Password As String
  Dim RetVal As Long
  Dim ServerName As String
  Dim Success As Long
  Dim UserName As String
  Dim currentFileAndPath As String

  Const ASCII_TRANSFER = 1
  Const BINARY_TRANSFER = 2


    ServerName = "ftp.yourserver.com"
    UserName = "username"
    Password = "yourpassword"

    currentFileAndPath = ActiveDocument.FullName
    ActiveDocument.SaveAs ("C:\TempFile.doc")
    ActiveDocument.SaveAs (currentFileAndPath)

    localFile = "C:\TempFile.doc"
    hostFile = ActiveDocument.Name

    If Len(ActiveDocument.Path) = 0 Then
        MsgBox "The document must be saved first."
        Exit Sub
    End If

      RetVal = False
      INet = InternetOpen("MyFTP Control", 1&, vbNullString, vbNullString, 0&)
        If INet > 0 Then
          INetConn = InternetConnect(INet, ServerName, 0&, UserName, Password, 1&, 0&, 0&)
            If INetConn > 0 Then
              Success = FtpPutFile(INetConn, localFile, hostFile, BINARY_TRANSFER, 0&)
              RetVal = InternetCloseHandle(INetConn)
            End If
         RetVal = InternetCloseHandle(INet)
        End If

      If Success <> 0 Then
        MsgBox ("Upload process completed")
      Else
        MsgBox "FTP File Error!"
      End If

End Sub