Userform仅在首次使用#excel-vba时出现

时间:2016-06-15 13:45:27

标签: excel vba excel-vba

所以我在excel上做了一个调查表,其中包含工作簿打开时的用户表单(所以当你打开excel时)。 userform使用户选择他想要使用的语言(法语或英语)。我的问题是我希望userform只在用户第一次打开文件时弹出。因此,他打开文件,选择语言,回答问题并保存文件。如果他重新打开文件,我希望他/她不再选择语言。

有没有办法让用户表单只在首次使用时出现?

如果没有,我正在考虑在问卷打开时更改问卷中某个方框中的值,然后将该值链接到用户表单,以便下次如果值已更改则不会打开。我不知道这是否可能。

感谢您的帮助,

文森特

3 个答案:

答案 0 :(得分:0)

一种常见且简单的方法是使用隐藏的工作表,您可以在保存后使用单元格存储值。

Private Sub Workbook_Open()
    'Where HiddenSheet is the name of your hidden worksheet
    If ActiveWorkbook.Sheets("HiddenSheet").Cells(1, 1).Value = 0 Then
        'Code to open the form
    End If    
End Sub

然后,一旦用户完成了问题,您可以更改单元格值,使其不再打开。

ActiveWorkbook.Sheets("HiddenSheet").Cells(1, 1).Value = 1

答案 1 :(得分:0)

我喜欢在我想要隐藏的工作表中使用此语句。

Private Sub Worksheet_Activate()
    If ActiveSheet.Visible Then ActiveSheet.Visible = False
End Sub

基本上用户可以尝试取消隐藏工作表,但它会立即再次隐藏它。当然,您仍然需要密码来保护代码,但我发现有助于防止向用户显示他们不需要担心的信息。

以为我会添加这个,因为它似乎与问题的一部分有关。希望它有所帮助。

答案 2 :(得分:0)

我认为更好的方法是保留所有访问文件的用户的日志:

Application.Username() 

Environ()

函数。

然后使用 Workbook.Open 事件,运行一段代码:

  1. 在隐藏的工作表上循环用户登录;
  2. 检查当前用户是否已经存在于日志中;
  3. 如果是,则表示该用户不是新用户;
  4. 如果没有,获取用户名并添加到日志中。

只有用户名,没有日期和时间戳。

这是一种万无一失的方法,具有双重好处,即保留曾经访问过该文件的所有用户的历史记录。