我在Excel 2007 VBA中遇到问题,我试图在UserForm中的框架上将visible属性设置为false。
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
编辑2 - 添加了图片
这是第一帧Frame1
。弹出一个msgbox,当用户单击是时,它将打开Frame2
。
这是Frame2
。此框打开,禁用所有文本框/组合框。按钮控件“编辑”已启用。
答案 0 :(得分:0)
我宁愿先让所有的框架看不见(也不要关心它们的位置和尺寸);之后,唯一相关的框架可以显示。 如果sub在userform的macromodule中,你可以使用Me(“Frame4”)并避免使用参数:'uf as 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
答案 1 :(得分:-3)
我在excel 2010中测试过代码工作正常(我没有excel 2007)
请尝试以下代码。
Private Sub Frame1_Click()
End Sub
Private Sub TextBox1_Change()
End Sub
Private Sub UserForm_Initialize()
Me.Frame1.Visible = False
End Sub