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

时间:2014-05-14 07:24:57

标签: forms excel vba

我已在VBA中创建了一个用户表单,以便呼叫中心员工可以在每天结束时将他们的号码提交给我们的跟踪电子表格。在其当前设计中,表单成功将数据提交到工作簿中的另一个工作表。正如我发现的那样,无法共享支持宏的电子表格(每个工作人员将在大约下午4点提交),因此我希望为每位工作人员(大约15名)制作一份用户表单电子表格,并指示其提交每天到共享电子表格。

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

Q1:我是否需要将“Tracking Spreadsheet.xlsx”作为共享工作簿,以防多个工作人员立即提交其结束日期表单? Q2:我是否需要在主动打开“Tracking Spreadhseet.xlsx”的“User Form.xlsm”中插入VBA代码,还是只能引用“Tracking Spreadhseet.xlsx”?

问题3:我在下面的代码中出了什么问题?我是VBA的新手。我已按照以下方式构建了提交按钮的代码,但它只是将数据添加到当前工作簿中的Daily_Tracking_Dataset工作表,而不是新工作簿: 首先,我尝试更改工作簿, 然后我使工作簿中的相关表格处于活动状态, 然后我确定第一个空行, 然后我将信息从表单的文本框传输到新工作簿。

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

3 个答案:

答案 0 :(得分:2)

请尝试以下示例:

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

答案 1 :(得分:0)

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

您是否尝试过Access数据库或类似的东西,您可以更轻松地添加所需信息,而无需担心并发访问数据"表"?

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

修改 关于问题3:尝试使用nwb.Sheets( "daily_tracking_dataset" ).Cells(emptyRow, 1).Value = TextBox1.Value之类的内容,并注意emptyRow也需要使用nwb来确定,例如使用OffsetMove(xlDown)的组合(请参阅Excel: Move selection to next blank row in specific column, and enumerate selection by date and type)。

答案 2 :(得分:0)

感谢您的帮助。我最终使用下面的emptyrow方法:     '开始转移信息和变更工作簿     Dim nwb As Workbook     设置nwb = Workbooks.Open(“G:\ Time To Complete 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