Excel VBA:运行时错误';438';对象没有';不支持此属性或方法
我是Excel Vba的新手,在尝试运行宏时遇到此错误。所以我的任务是制作一本电子日记。我需要让每个老师只能看到自己的分数。我的想法是用一个密码和非常隐藏的功能来实现。错误出现在代码中的标记位置。你能帮我解决这个问题吗?非常感谢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,
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
s可以。是的,因此thishworkbook.Sheets(“1”).Visible=True可以修复它。好的,但我必须只隐藏工作表“1”中的某些单元格?我该怎么办?你最好把每位老师的详细情况写在不同的纸上。(请注意,您的代码将Sub-Makro1() 将密码设置为字符串 Dim passwordsDict作为脚本。字典
Set passwordsDict=GetPasswords'
s没有Range
属性<代码>工作表Visible
myPassword15
,但是声明为String
,myPassword1
等被声明为myPassword2
)那么,这将是一个很大的工作。13个学校对象*33个学生,每人一张,即495张…非常感谢你的代码,我会尝试一下,看看它是否有效。代码非常有效,但我有一个问题。在输入标记后,是否有任何方式使“启用”标记在退出后再次变为不可见,以便下次打开文件。因为,例如,数学老师会看到物理老师在一堂课之前在日记中输入的内容。您可以使用放置在变体
代码窗格中的此工作簿
事件处理程序,在该窗格中,您总是在打开工作簿时隐藏所有范围