以编程方式创build将在打开时显示用户表单的Excel工作簿

在自动化工具中,培训师必须提到学生姓名,并使用该名称创buildExcel文件。 例如: Shreesha_xlsx.xlsx

在分配testing名称后,如果学生打开他们自己的Excel文件,那么他们应该能够看到用户表单(欢迎屏幕),下一个屏幕正在回答问题。

下面的代码是分配学生名下的Excel文件,之后我也粘贴了代码,当用户点击Excel文件时,应该用userform打开。

总而言之,在另一个Excel文件中调用用户表单而不需要设置任何参考。

 Sub Button2_Click() Dim s(6 To 100) As String Dim stname As String Dim status As String Dim mypath As String Dim u As String u = "_xlsx" For i = 6 To 100 s(i) = Range("E" & i).Value stname = s(i) & "" & u If s(i) = "" Then ActiveWorkbook.Open = False End If 'in case of Run time error On Error GoTo jamun: mypath = Range("B1").Value & "\" & stname Workbooks.Add.SaveAs filename:=mypath ActiveWorkbook.Close Range("B" & i).Value = mypath & "_assigning..." Application.Wait Now + TimeValue("00:00:02") Range("F" & i).Value = "Done" Range("B" & i).Value = mypath & "_assigned" Range("B" & i).Select ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="mypath", TextToDisplay:=Range("B" & i).Value Range("B" & i).Select Selection.Hyperlinks(1).Address = Range("B1").Value Application.Wait Now + TimeValue("00:00:01") Next MsgBox "Test assigned successfully" Exit Sub jamun: MsgBox "Test assigned successfully" End Sub 

现在下面的代码是当他们打开时,他们应该看到用户窗体

  enter code here Sub Workbook_Open() Dim FSO As New FileSystemObject Dim objFolder As Folder Dim objFile As File Dim strpath As String Dim a As Workbook Dim filename As String strpath = Range("B1").Value Set objFolder = FSO.GetFolder(strpath) If objFolder.Files.Count = 0 Then MsgBox "No files were found....", vbExclamation End If For Each objFile In objFolder.Files a = "Good" 'userform name is good Workbook.Open (a) VBA.UserForms.Add(a).Show a.Show Next objFile End Sub 

不知道我哪里去错了。

1)用所需的表格创build一个excel工作簿

2)编写代码打开Workbook_Open()上的表单

3)在表格中填写代码,以填写工作簿中的问题,以及世行在开始工作时提供的其他信息。 总而言之,使文件的行为完全按照您希望在向学生开放时的行为。

4)将您的文件保存为一个模板(扩展名为.xltm),让我们说examTemplate.xltm

5)现在,当您将从主文件生成考试文件,从模板生成它们。 考虑改变你的代码的这一部分:

Workbooks.Add.SaveAs文件名:= mypath

ActiveWorkbook.Close

而不是这个,我们从模板生成文件:

 Dim neWB as Workbook Set newWB = Workbooks.Add("examTemplate.xltm") ' <~~~ generate from template 

新生成的newWBinheritance该模板。 也就是说,它拥有所有的数据,代码,控件和表单。 此时,您可以在newWB中填写一些数据,与分配相关的内容。 也就是说,问题或某些参数将指示何处提取问题,以便表单可以访问这些参数并完成工作。 理想情况下,这些参数可以embedded到隐藏表格中。 然后:

 newWB.SaveAs filename:=mypath ' <~~ save it as macro-enabled .xlsm newWB.Close 

从这一点来说,我认为你可以继续用同样的逻辑。 方法的彻底改变是,表单将很容易embedded到新的工作簿中,而不是从另一个工作簿中调用。

编辑:你希望你的工作簿只显示窗体,但从来没有工作簿本身。 这可以通过将以下事件处理程序添加到您的模板文件的ThisWorkbook代码模块来实现:

 Private Sub Workbook_Open() If InStr(1, Me.Name, ".xltm") > 1 Then Exit Sub ' <~~ to apply only to chidren no to template itself With Me.Application .Visible = False .DisplayAlerts = False MyForm.Show .Visible = True End With Me.Close End Sub