Vba 隐藏帧时无法设置可见属性错误
我在Excel2007VBA中遇到一个问题,我试图在UserForm中的框架上将visible属性设置为falseVba 隐藏帧时无法设置可见属性错误,vba,excel,runtime-error,Vba,Excel,Runtime Error,我在Excel2007VBA中遇到一个问题,我试图在UserForm中的框架上将visible属性设置为false Userform1.Frame1.Visible = False 尝试设置属性时,excel会抛出错误: 运行时错误“-2147418113(8000ffff)”: 无法设置Visible属性。对方法或属性访问的意外调用 我对此进行了研究,我发现的唯一一件事是,这可能与没有控制焦点有关。在我的例子中,这是不正确的,因为有一个按钮可以将焦点放在另一帧上。另一帧设置为在隐藏Frame
Userform1.Frame1.Visible = False
尝试设置属性时,excel会抛出错误:
运行时错误“-2147418113(8000ffff)”:
无法设置Visible属性。对方法或属性访问的意外调用
我对此进行了研究,我发现的唯一一件事是,这可能与没有控制焦点有关。在我的例子中,这是不正确的,因为有一个按钮可以将焦点放在另一帧上。另一帧设置为在隐藏Frame1
之前可见
是否有其他人遇到过此问题,或者可以帮助我了解导致此错误的原因
编辑-添加代码
Public Sub fOpenFrame(uf As UserForm, strName As String)
Dim con As Control
Dim i As Long
i = 5
Application.ScreenUpdating = False
With uf.Controls(strName)
.Top = 38.15
.Left = 120
.Height = 400
.Width = 565
.Visible = True
End With
For Each con In uf.Controls
If TypeName(con) = "Frame" And con.Name <> strName And InStr(con.Name, "Menu") < 1 _
And con.Name <> "frmNewAbsenceButton" And con.Name <> "frmExistingAbsenceButton" Then
With con
.Visible = False 'Error occurs here'
.Top = 5
.Left = i
.Height = 20
.Width = 20
End With
i = i + 25
End If
Next con
Application.ScreenUpdating = True
End Sub
Public Sub-fOpenFrame(uf作为用户表单,strName作为字符串)
Dim con作为控制
我想我会坚持多久
i=5
Application.ScreenUpdating=False
使用uf.控件(strName)
.Top=38.15
.左=120
.高度=400
.宽度=565
.Visible=True
以
对于uf.控件中的每个con
如果TypeName(con)=“Frame”和con.Name strName和InStr(con.Name,“Menu”)<1_
和con.Name“frmnewbsencebutton”和con.Name“frmexistingbsencebutton”,然后
带着骗局
.Visible=False“此处发生错误”
.Top=5
.左=i
.高度=20
.宽度=20
以
i=i+25
如果结束
下一个骗局
Application.ScreenUpdating=True
端接头
编辑2-添加图片
这是第一帧Frame1
。弹出一个msgbox,当用户单击yes时,它将打开Frame2
。
这是Frame2
。此框架打开时,所有文本框/组合框均已禁用。按钮控件“编辑”已启用。
我宁愿先让所有的框架都不可见(而不在乎它们的位置和大小);之后,只能看到相关的框架。 如果sub在userform的宏模块中,您可以使用Me(“Frame4”)并避免使用参数:“ufas userform”
Public Sub fOpenFrame(uf As UserForm, strName As String)
for each it in uf.controls
if typename(it)="Frame" then it.visible=false
next
With uf.Controls(strName)
.Top = 38.15
.Left = 120
.Height = 400
.Width = 565
.Visible = True
End With
End Sub
我在Excel2010中进行了测试,代码运行良好(我没有Excel2007) 请尝试下面的代码
Private Sub Frame1_Click()
End Sub
Private Sub TextBox1_Change()
End Sub
Private Sub UserForm_Initialize()
Me.Frame1.Visible = False
End Sub
请在将窗体设置为不可见之前添加前两行代码,好吗?您可能必须手动将焦点设置到另一个对象上,因为当对象当前具有焦点时,无法将其可见性设置为False。@我已添加了在出错行之前触发的过程。从本质上讲,这个过程循环通过相关的框架,并将false的可见性设置为false,而不是要打开的fame。ThanksTry创建了一个“伪装”控件,甚至可以是一个按钮,它除了改变焦点之外什么都不做。然后在设置
con.Visible=False
之前,将焦点设置在新创建的控件上。这可能是一种变通方法。不过,这个错误有点奇怪,您是否尝试过删除错误恢复下一步的,看看实际错误在哪里?@PaulFrancis感谢您的建议。关于错误,请继续下一步
,这只是一个占位符,这样我就可以继续解决问题了。删除它会产生完全相同的错误。我刚刚尝试添加一个空白按钮并将焦点设置为它,但仍然抛出错误!当您调用fOpenFrame
方法时?谢谢您的建议,但切换过程并没有什么区别。关于过程本身,它不在UserForms代码模块中。那么如果你将它放在userform的代码模块中会怎么样?很难相信你有几个框架,尺寸为。Top=5。Height=20。Width=20,放在同一行的位置5,30,55,80105,等等。它与您发布的图片不匹配。这是因为它们的可见性根据发布的过程设置为隐藏,因此在运行时,框架不可见。您是否考虑过使用多页控件而不是使用框架和“可见”?您只需将不同的控件放在不同的页面上,将页面样式设置为不显示选项卡标题,然后您的控件按钮只需更改活动页面,无需将任何内容设置为可见或其他。这是我在创建向导时经常使用的一种技术。这不是一个答案,因为它是一个彻底改变你所要求的,所以只需要考虑的事情。但一旦完成,这是一项非常有用的技术。这并不能真正回答问题,它只是使用OP已经尝试过的相同方法(即控制。可见)。