在自动化工具中,培训师必须提及学生姓名,并使用该名称创建Excel文件。示例:Shreesha_xlsx.xlsx
在为测试分配名称后,如果学生打开他们自己的Excel文件,那么他们应该能够看到用户形式(欢迎屏幕),下一个屏幕正在回答问题。
以下代码是在学生姓名下分配Excel文件,之后我还粘贴了当用户点击Excel文件时应该用userform打开的代码。
在没有设置任何引用的情况下,它总是调用另一个Excel文件的userform。
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
并且不知道我哪里出错了。
答案 0 :(得分:1)
1)创建一个包含所需表单的Excel工作簿
2)编写代码以在Workbook_Open()
上打开表单3)在WB打开时,在表单中编写代码以填充工作簿中的问题和其他任何信息。总而言之,在文件打开时,使文件的行为完全符合您的要求。
4)将您的文件另存为模板(扩展名为.xltm),让我们说一下examTemplate.xltm
5)现在,当您从主文件生成检查文件时,请从模板生成检查文件。考虑更改代码的这一部分:
Workbooks.Add.SaveAs filename:= mypath
ActiveWorkbook.Close
而不是这个,我们从模板生成文件:
Dim neWB as Workbook
Set newWB = Workbooks.Add("examTemplate.xltm") ' <~~~ generate from template
新生成的newWB继承模板。也就是说,它具有所有数据,代码,控件和表单。此时,您可以在newWB中填充一些与赋值相关的内容。也就是说,问题或一些参数将指示在哪里获取问题,以便表单可以访问这些参数并完成工作。理想情况下,这些参数可以嵌入隐藏的工作表中。之后:
newWB.SaveAs filename:=mypath ' <~~ save it as macro-enabled .xlsm
newWB.Close
从那时起,我认为你可以继续使用相同的逻辑。方法的根本变化是表单将很容易嵌入到新工作簿中,而不是从另一个工作簿中调用。
编辑:您希望您的工作簿仅显示表单但不显示工作簿本身。这可以通过将以下事件处理程序添加到模板文件的 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