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

时间:2015-09-28 10:35:32

标签: excel vba excel-vba

在自动化工具中,培训师必须提及学生姓名,并使用该名称创建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

并且不知道我哪里出错了。

1 个答案:

答案 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