【问题标题】:Open Specific sheets accord to cell values VBA根据单元格值打开特定工作表 VBA
【发布时间】:2020-08-21 08:57:19
【问题描述】:

我想通过设置不同的密码来打开特定工作表来保护我的工作簿。 我想根据单元格值(在每张纸的 B2 范围内)设置条件。
例如,我有 3 个密码可以打开不同的工作表:

如果 passord= 123 并且如果每个工作表的 range(B2) 等于 "xxx",则打开 Range(B2)= "xxx" 的所有工作表

如果 passord= 456 并且如果每个工作表的 range(B2) 等于 "yyy",则打开 Range(B2)= "yyy" 的所有工作表

如果 passord= 789 并且如果每个工作表的 range(B2) 等于 "zzz",则打开 Range(B2)= "zzz" 的所有工作表

我编写了这段代码,通过设置一个 unic 密码来帮助我打开所有工作表:

Private Sub CommandButton2_Click()
Dim ws As Worksheet
'Open all sheets for admin
If Me.TextBox1.Value = "MC" Then
    ThisWorkbook.Application.Visible = True
    Me.Hide
    
Else
'Open all sheets where range(B2) = Planification et maintennace"
If Me.TextBox1.Value = "MC1" Then
For Each ws In ThisWorkbook.Worksheets
    If ws.Range(B2).Value = "Planification et maintenance" Then
    ws.Visible = True
    End If
Next

'Open all sheets where range(B2) = Pole Essais"
If Me.TextBox1.Value = "MC2" Then
For Each ws In ThisWorkbook.Worksheets
    If ws.Range(B2).Value = "Pole Essais" Then
    ws.Visible = True
    End If
Next

Else
MsgBox ("veuillez entrer un mot de passe valide !")
Unload Me

End If
End If
End If
End Sub

这段代码什么也没做,我该如何改进它以使其正常工作? 谢谢

【问题讨论】:

  • Range(B2) 替换为Range("B2")。为什么最后都是你的End If?另外,与您的问题无关,但请考虑使用Select Case 而不是多次使用If 条件。
  • @romulax14 我做了更改,但仍然无法打开所需的工作表,
  • 我已经对您的代码进行了更正,如果它有效,请告诉我

标签: excel vba


【解决方案1】:

您的代码存在几个问题。
首先,您写的是 Range(B2) 而不是 Range("B2")
那么你所有的End If 都在最后,他们不应该。
在这种情况下,您应该Select Case 而不是If
另外,使用For Each ws In ...循环时,For后面的Next必须写成Next ws,告诉excel转到下一个。

我更正了您的代码,并带有适当的缩进:

Private Sub CommandButton2_Click()
    Dim ws As Worksheet
    Select Case Me.TextBox1.Value
        Case "MC"
            ThisWorkbook.Application.Visible = True
            Me.Hide
        Case "MC1"
            For Each ws In ThisWorkbook.Worksheets
                If ws.Range("B2").Value = "Planification et maintenance" Then
                    ws.Visible = True
                End If
            Next ws
        Case "MC2"
            For Each ws In ThisWorkbook.Worksheets
                If ws.Range("B2").Value = "Pole Essais" Then
                    ws.Visible = True
                End If
            Next ws
        Case Else
            MsgBox ("veuillez entrer un mot de passe valide !")
    End Select
End Sub

【讨论】:

  • 当我想打开所有工作表时它正在工作,但当我想在我设置条件的地方打开工作表时却不行。
  • 我的错,我在每个For 的末尾只写了Next 而不是Next ws,我编辑了我的答案,请再试一次,让我知道
  • 我们正在写例如Next ws 只是为了可读性,没有必要,只是 Next 很好,因此不是问题。
  • Next 或 Next ws 是一样的,还是不行
  • @IMP_Te:尝试在 ws.Visible = True 之后的 If 语句中添加以下内容:Else: ws.Visible = False
猜你喜欢
  • 1970-01-01
  • 2020-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-02
  • 2018-06-05
  • 1970-01-01
  • 2019-02-22
相关资源
最近更新 更多