我想我首先是想看看这是否完全可行和可行。
我的任务是创建一个易于使用的表单,供用户在Excel中填写。完成后,他们单击“提交”按钮,该按钮会自动将表单通过电子邮件发送给适当的一方进行审核,并分配唯一的ID供以后参考。这部分很简单,已经完成。
现在,我没有经验的第二部分是通过VBA获取信息以存储在SharePoint列表中。这个想法是让接收表单的人能够打开它,查看表单并单击命令按钮以将其上载到SharePoint列表(创建一个新项目)。我找不到单独通过VBA来执行此操作的任何工作方法。
我现在的想法是可能使用Access作为中间人。有没有办法让我从Excel工作簿中运行一个宏,以打开一个与预期的SharePoint列表连接的Access数据库,添加一个新项目/行(最好将所述工作簿作为附件),保存并关闭?然后,该项目将同时添加到SP列表中,但我不知道这是否可行。
任何指导都一如既往地受到赞赏,我认为这是我无法通过一些简单的谷歌搜索就可以实现的。
更新:我设法拼凑了一些我发现的代码(尽管需要进行大量测试才能确保它与其他用户兼容),这些代码将从Excel运行一个子例程,从而打开指定Access数据库,然后在Access中调用一个公共函数,该函数将修改Excel文件中的数据,从而将该项目添加到SP列表中。我不确定这有多干净,到目前为止它似乎还可以,但是我真的需要一种方法将Excel文件本身作为附件添加到记录中,以便分别将其附加到SP项目中。>
这是Excel中的子程序。我要做的只是将表单上输入的数据拉到一个隐藏的工作表中,然后将工作表另存为用于数据导入的临时文件。
Sub AccessImport()
Dim wb As Workbook, wb2 As Workbook
Dim AC As Object
Dim ret As Byte
Dim TempFilePath As String, TempFileName As String
Set wb = ActiveWorkbook
Worksheets("Table").Copy
Set wb2 = ActiveWorkbook
TempFilePath = Environ$("temp") & "\"
TempFileName = "AccessUpload.xls"
wb2.SaveCopyAs TempFilePath & TempFileName
wb2.Close False
Set AC = CreateObject("Access.Application")
With AC
.OpenCurrentDatabase "C:\TEMP\Database2.accdb", False
ret = .Run("GetXLData")
End With
Kill TempFilePath & TempFileName
End Sub
Access打开并运行GetXLData函数。
Public Function GetXLData() As Byte
Dim ret As Byte
On Error GoTo ErrHandler
ret = 1
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel8, "custom list", "C:\TEMP\AccessUpload.xls", True
ret = 0
ErrHandler:
GetXLData = ret
End Function
这将仅用于每次运行时用一条记录更新数据库,必须有一种方法可以通过指定文件路径在“附件”字段中添加附件,每次都相同?>