打开工作簿后只显示用户窗体的方法探讨

问题起源
这是一位网友提出的问题:

  • 如何通过一个窗体录入数据,但是我又不想让人看到整个EXCEL工作薄。简单的说,就是打开某个EXCEL文件之后,我只看到一个窗体,然后我就通过该窗体录入数据,保存之后,所输入的数据就存在EXCEL文件里。

准备示例用户窗体
在VBE编辑器中,插入一个用户窗体,并在其中添加控件,如下图所示:
UserformSample
其相应的代码为:
Private Sub CommandButton1_Click()
    Dim i As Long
    i = Worksheets(”sheet1″).Range(”A65536″).End(xlUp).Row
    If Range(”A1″) = “” Then
        Range(”A1″) = TextBox1.Text
    Else
        i = i + 1
        Range(”A” & i) = TextBox1.Text
    End If
    TextBox1.Text = “”
    TextBox1.SetFocus
End Sub

几种方法探讨
要使代码在工作簿打开时执行,则应利用Workbook_Open事件。一般应该将代码放置在ThisWorkbook模块中,这样在打开该工作簿时会执行其中的代码。
方法1 下面的代码,打开工作簿后,工作表均隐藏,只显示用户窗体,但Excel菜单和工具栏仍显示。
Private Sub Workbook_Open()
    UserForm1.Show
    Workbooks(”Sample1.xls”).Windows(1).Visible = False
End Sub

详见示例Sample1.xls
方法2 下面的代码,在打开工作簿后,将只显示用户窗体。
Private Sub Workbook_Open()
  ‘最小化窗口
  Application.WindowState = xlMinimized
  ‘显示用户窗体
  UserForm1.Show
End Sub

若需在关闭用户窗体后,工作簿也随之前闭,则在用户窗体关闭事件中,添加下面的代码:
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    ThisWorkbook.Close
End Sub

当关闭用户窗体时,Excel会提示用户是否保存对工作簿的修改,单击“是”将保存工作簿并退出。若要默认关闭用户窗体并自动保存工作簿,则添加下面的代码:
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    ThisWorkbook.Close SaveChanges:=True
End Sub

详见示例Sample2.xls
方法3 下面的示例代码,将彻底隐藏工作簿。在打开工作簿后,该工作簿将被隐藏,而只显示用户窗体,即将用户窗体当作用户输入界面,工作簿当作后台数据存储和处理。
Private Sub Workbook_Open()
    ‘隐藏工作簿
    Application.Visible = False
    ‘显示用户窗体
    UserForm1.Show
End Sub

详见示例Sample3.xls
注意:此时,Excel将在后台运行,要退出该Excel应用程序,必须结束其进程。


提示:您可以在评论中使用HTML标签,且任何与HTML标签相同的符号都会被理解为HTML标签并以相应的格式显示.如果您的评论中有代码,可以使用相应的标签,例如,如果有VB或VBA代码,则可以使用[vb]标签,即[vb]放置的代码[/vb],这样会很清晰地显示代码.

1条评论

  1. chen:

    好极了,谢谢!

发表评论