Excel VBA:运行时错误';438';对象没有';不支持此属性或方法

Excel VBA:运行时错误';438';对象没有';不支持此属性或方法,vba,excel,runtime-error,Vba,Excel,Runtime Error,我是Excel Vba的新手,在尝试运行宏时遇到此错误。所以我的任务是制作一本电子日记。我需要让每个老师只能看到自己的分数。我的想法是用一个密码和非常隐藏的功能来实现。错误出现在代码中的标记位置。你能帮我解决这个问题吗?非常感谢 Sub Makro1() Dim myPassword1, myPassword2, myPassword3, myPassword4, myPassword5, myPassword6, myPassword7, myPassword8, myPassword9,

我是Excel Vba的新手,在尝试运行宏时遇到此错误。所以我的任务是制作一本电子日记。我需要让每个老师只能看到自己的分数。我的想法是用一个密码和非常隐藏的功能来实现。错误出现在代码中的标记位置。你能帮我解决这个问题吗?非常感谢

Sub Makro1()

Dim myPassword1, myPassword2, myPassword3, myPassword4, myPassword5, myPassword6, myPassword7, myPassword8, myPassword9, myPassword10, myPassword11, myPassword12, myPassword13, myPassword14, myPassword15 As String

Srpski = "pas1"
Engleski = "pas2"
Fizicko = "pas3"
Matematika = "pas4"
Informatika = "pas5"
Istorija = "pas6"
Likovno = "pas7"
Hemija = "pas8"
Fizika = "pas9"
Osnove = "pas10"
Multimedija = "pas11"
IKT = "pas12"
Praksa = "pas13"
Izborni = "pas14"
Ostalo = "pas15"

Password = InputBox("Unesite lozinku:")

If Password = "" Then
 ThisWorkbook.Sheets("1").Range("Srp").Visible = xlSheetVeryHidden
 ThisWorkbook.Sheets("1").Range("Eng").Visible = xlSheetVeryHidden
 ThisWorkbook.Sheets("1").Range("Fizc").Visible = xlSheetVeryHidden
 ThisWorkbook.Sheets("1").Range("Mat").Visible = xlSheetVeryHidden
 ThisWorkbook.Sheets("1").Range("Info").Visible = xlSheetVeryHidden
 ThisWorkbook.Sheets("1").Range("Ist").Visible = xlSheetVeryHidden
 ThisWorkbook.Sheets("1").Range("Lik").Visible = xlSheetVeryHidden
 ThisWorkbook.Sheets("1").Range("Hem").Visible = xlSheetVeryHidden
 ThisWorkbook.Sheets("1").Range("Fiz").Visible = xlSheetVeryHidden
 ThisWorkbook.Sheets("1").Range("Osn").Visible = xlSheetVeryHidden
 ThisWorkbook.Sheets("1").Range("Mult").Visible = xlSheetVeryHidden
 ThisWorkbook.Sheets("1").Range("Ikt").Visible = xlSheetVeryHidden
 ThisWorkbook.Sheets("1").Range("Prk").Visible = xlSheetVeryHidden
 ThisWorkbook.Sheets("1").Range("Izb").Visible = xlSheetVeryHidden
 ThisWorkbook.Sheets("1").Range("Ost").Visible = xlSheetVeryHidden
 Exit Sub

ElseIf Password = Srpski Then
 ThisWorkbook.Sheets("1").Range("Srp").Visible = True 'This is the place where error shows
 ThisWorkbook.Sheets("1").Range("Eng").Visible = xlSheetVeryHidden
 ThisWorkbook.Sheets("1").Range("Fizc").Visible = xlSheetVeryHidden
 ThisWorkbook.Sheets("1").Range("Mat").Visible = xlSheetVeryHidden
 ThisWorkbook.Sheets("1").Range("Info").Visible = xlSheetVeryHidden
 ThisWorkbook.Sheets("1").Range("Ist").Visible = xlSheetVeryHidden
 ThisWorkbook.Sheets("1").Range("Lik").Visible = xlSheetVeryHidden
 ThisWorkbook.Sheets("1").Range("Hem").Visible = xlSheetVeryHidden
 ThisWorkbook.Sheets("1").Range("Fiz").Visible = xlSheetVeryHidden
 ThisWorkbook.Sheets("1").Range("Osn").Visible = xlSheetVeryHidden
 ThisWorkbook.Sheets("1").Range("Mult").Visible = xlSheetVeryHidden
 ThisWorkbook.Sheets("1").Range("Ikt").Visible = xlSheetVeryHidden
 ThisWorkbook.Sheets("1").Range("Prk").Visible = xlSheetVeryHidden
 ThisWorkbook.Sheets("1").Range("Izb").Visible = xlSheetVeryHidden
 ThisWorkbook.Sheets("1").Range("Ost").Visible = xlSheetVeryHidden

....

<>你可以考虑用字典的方法来缩短代码,使代码更加灵活。
  • 将所有
    表格(“1”)
    “教师”范围(即:
    表格(“1”).Range(“Srp”)
    表格(“1”).Range(“Eng”)
    ,…)格式化如下

    • 字符颜色=白色

    • 单元格格式保护:隐藏

    这样,您的工作表总是以“隐藏”所有内容范围开始,这意味着它们的内容在用户界面上不可见

  • 使用任何密码(比如“mypwd”)保护您的工作表

    这是为了使“隐藏”格式有效

  • 在VBA IDE中添加“Microsoft脚本运行时”参考

    • 单击工具->参考

    • 向下滚动列表框至“Microsoft脚本运行时”条目,并勾选其复选标记

    • 单击“确定”

  • 使用此代码

    Sub Makro1()
        Dim Password As String
        Dim passwordsDict As Scripting.Dictionary
    
        Set passwordsDict = GetPasswords '<--| retrieve all correspondencies of any valid password to its matter
    
        Password = Application.InputBox("Unesite lozinku:", "Input Password", Type:=2) '<--| retrieve password requiring a text (string) value
    
        If passwordsDict.Exists(Password) Then '<--| if input password is a valid one...
            With ThisWorkbook.Sheets("1") '<--| ...reference
                .Unprotect Password:="mypwd"
                With passwordsDict(Password)
                    .Font.ColorIndex = 1 'make characters font black and see them
                    .FormulaHidden = False ' unhide formula bar cell insight
                End With
                .Protect Password:="mypwd"
            End With
        Else '<--| if input password isn't a valid one
            MsgBox "Sorry!" & vbCrLf & vbCrLf & "Invalid password", vbCritical + vbInformation, "Password" '<--| inform the user and exit
        End If
    End Sub
    
    Function GetPasswords() As Scripting.Dictionary
        Dim myDict As Scripting.Dictionary
    
        Set myDict = New Scripting.Dictionary '<--| set a new dictionary
        With myDict
            .Add "pas1", ThisWorkbook.Sheets("1").Range("Srp")
            .Add "pas2", ThisWorkbook.Sheets("1").Range("Eng")
            .Add "pas3", ThisWorkbook.Sheets("1").Range("Fizc")
            .Add "pas4", ThisWorkbook.Sheets("1").Range("Mat")
            .Add "pas5", ThisWorkbook.Sheets("1").Range("Info")
            '... '<--| add your other password/range correspondency couples
        End With
        Set GetPasswords = myDict '<--| return the passwords/ranges dictionary
    End Function
    
    Sub-Makro1()
    将密码设置为字符串
    Dim passwordsDict作为脚本。字典
    
    Set passwordsDict=GetPasswords'
    Range
    s没有
    Visible
    属性<代码>工作表
    s可以。是的,因此thishworkbook.Sheets(“1”).Visible=True可以修复它。好的,但我必须只隐藏工作表“1”中的某些单元格?我该怎么办?你最好把每位老师的详细情况写在不同的纸上。(请注意,您的代码将
    myPassword15
    声明为String
    ,但是
    myPassword1
    myPassword2
    等被声明为
    变体
    )那么,这将是一个很大的工作。13个学校对象*33个学生,每人一张,即495张…非常感谢你的代码,我会尝试一下,看看它是否有效。代码非常有效,但我有一个问题。在输入标记后,是否有任何方式使“启用”标记在退出后再次变为不可见,以便下次打开文件。因为,例如,数学老师会看到物理老师在一堂课之前在日记中输入的内容。您可以使用放置在
    此工作簿
    代码窗格中的
    事件处理程序,在该窗格中,您总是在打开工作簿时隐藏所有范围