提交用户表单数据到另一个工作簿

我在VBA中创build了一个用户表单,以便呼叫中心的工作人员可以在每天结束时将他们的号码提交给我们的跟踪电子表格。 在当前的devise中,表单成功地将数据提交到工作簿中的另一个工作表。 正如我所发现的那样,无法共享启用macros的电子表格(每个工作人员将在下午4点左右提交),所以我正在为每个工作人员(约15个)制作一份用户表格电子表格副本,并指示它提交到每天共享的电子表格。

即15名左右的工作人员每天下午4点左右使用“用户Form.xlsm”提交至“Tracking Spreadsheet.xlsx”。

问题1:如果有多名员工同时提交他们的日子结束表单,我是否需要将“跟踪Spreadsheet.xlsx”作为共享工作簿? Q2:我是否需要在“用户Form.xlsm”中插入VBA代码来主动打开“Tracking Spreadhseet.xlsx”,或者我可以参考“Tracking Spreadhseet.xlsx”?

问题3:我在下面的代码中出错了吗? 我是VBA新手。 我已经为提交button构build了代码,如下所示,但它只是将数据添加到当前工作簿中的Daily_Tracking_Dataset表单中,而不是新的:首先,我尝试更改工作簿 ,然后在工作簿中 创build相关工作表主动 ,然后我确定第一个空行 ,然后我将信息从窗体的文本框传输到新的工作簿。

Private Sub Button_Submit_Click() 'Change Workbook Dim nwb As Workbook Set nwb = Workbooks.Open("G:\Tracking Spreadsheet.xlsx") Dim emptyRow As Long 'Make Daily_Tracking_Dataset active Daily_Tracking_Dataset.Activate 'Determine emptyRow emptyRow = WorksheetFunction.CountA(Range("A:A")) + 1 'Transfer Information Cells(emptyRow, 1).Value = TextBox1.Value Cells(emptyRow, 2).Value = lstName.Value Cells(emptyRow, 3).Value = txtROIT.Value Cells(emptyRow, 4).Value = txtROISub.Value Cells(emptyRow, 5).Value = txtRefsT.Value Cells(emptyRow, 6).Value = txtRefsC.Value Cells(emptyRow, 7).Value = txtRefsSub.Value Cells(emptyRow, 8).Value = txtReSubT.Value Cells(emptyRow, 9).Value = txtReSubSub.Value End Sub 

试试下面这个例子:

 Private Sub TextBox1_afterupdate() Dim pro As Workbook Set pro = Workbooks.Open("F:\DOCUMENTS\Proration.xlsm") Workbooks("proration").Sheets("sheet1").Range("i20").End(xlUp).Offset(1, 0).Value = UserForm1.TextBox1.Value pro.Save pro.Close True End Sub 

关于Q1 / Q2:是的,您需要添加代码才能打开工作表,最好打开Shared工具,至less如果您没有保存并在插入数据后立即closures跟踪电子表格文件。

你有没有尝试一个Access数据库或类似的东西,在那里你可以更容易地添加所需的信息,并不需要担心对数据“表”的并发访问?

关于Q3:您目前没有说明您的代码出了什么问题。

编辑:关于Q3:尝试使用类似nwb.Sheets( "daily_tracking_dataset" ).Cells(emptyRow, 1).Value = TextBox1.Value并注意emptyRow也需要使用nwb确定,例如使用OffsetMove(xlDown) (请参阅Excel:将select移动到特定列中的下一个空白行,并按date和types枚举select )。

谢谢您的帮助。 我结束了使用下面的emptyrow方法:'开始传输信息和更改工作簿昏暗nwb作为工作簿集nwb = Workbooks.Open(“G:\时间来完成Dataset.xlsx”)

 'Determine emptyRow Dim emptyRow As Long emptyRow = WorksheetFunction.CountA(nwb.Sheets("daily_tracking_dataset").Range("A:A")) + 1 'Transfer Information With nwb.Sheets("daily_tracking_dataset") 'Datebox .Cells(emptyRow, 1).Value = CDate(txtDate.Text) 'Listbox .Cells(emptyRow, 2).Value = lbName.List(lbName.ListIndex) 'Textbox .Cells(emptyRow, 3).Value = txtROT.Value End With ActiveWorkbook.Save ActiveWindow.Close End Sub