如何设置框架的滚动条位置(在用户窗体内)?
案子:
我在userform中有一个具有动态内容的框架.因此,如果内容太大而无法适应框架,则(动态地)在该框架中创建滚动条.滚动条还具有动态值,遵循帧内容大小.
更新滚动条的代码如下:
With userform1.frame1
'dynamic size
.ScrollHeight = param1 * param2
.ScrollWidth = .InsideWidth * 30
End with
Run Code Online (Sandbox Code Playgroud)
所以我想有一些东西将滚动条发送到底部位置!我怎么做?提前致谢
我有一个Auto_Open的vba代码.它会进行一些检查,然后提示用户表单询问用户名和密码.我用这个用户表单调用了userform_name.show.
我的问题是如何从userform代码返回Boolean到我的Auto_Opensub.
我将验证凭据是否正确的代码链接到表单上的"登录"按钮.这是产生布尔值的代码.我需要将它返回到Auto_Open.
Private Sub loginbutton()
Dim bool As Boolean
Dim lrup
Dim r As Long
Dim pass As String
loginbox.Hide
'are fields empty
Do While True
If unBox.Text = "" Or pwBox.Text = "" Then
MsgBox ("You must enter a Username and Password")
Else
Exit Do
End If
loginbox.Show
Exit Sub
Loop
'find pw reated to username (if existant)
lrup = UserPass.Range("A1").Offset(UserPass.Rows.Count - 1, 0).End(xlUp).Row
If unBox = "b0541476" And pwBox = "theone" …Run Code Online (Sandbox Code Playgroud) 在Excel VBA中,我有一个类似于以下内容的用户表单,用户输入一个ID号,然后在用户表单上显示详细信息:
Private Sub btnIDNo_Click()
Dim IDNo As Long
If txtIDNo.Text <> "" Then
If IsNumeric(txtIDNo.Text) = True Then
lblError.Caption = ""
IDNo = txtIDNo.Text
Worksheets("Details").Activate
Range("B4").Select
While ActiveCell.Value <> "" And ActiveCell.Value <> IDNo
ActiveCell.Offset(1, 0).Select
Wend
If ActiveCell.Value = IDNo Then
txtName.Value = ActiveCell.Offset(0, 1).Value
txtPhone.Value = ActiveCell.Offset(0, 2).Value
Else
lblError.Caption = "Cannot find ID nummber"
End If
Else
lblError.Caption = "Please enter the ID Number in numeric form"
End If
End If
End Sub
Run Code Online (Sandbox Code Playgroud)
在详细信息用户表单上,我有一个"编辑"按钮.单击"编辑"按钮将打开另一个用户表单,用户可以在其中更改该ID号的详细信息,但显然不是ID号本身.为此,我需要将详细信息用户表单中的ID号传递给编辑用户表单.有办法做到这一点吗?
显示详细信息用户表单上打开编辑用户表单的底部类似于以下内容:
Private …Run Code Online (Sandbox Code Playgroud) 我尝试导入一个Userform:
With ownVBProj.VBComponents.Import(FileName:=FName)
Print #2, FName; " has ", .Properties.Count; " Properties"
End With
Run Code Online (Sandbox Code Playgroud)
在执行期间我得到错误
-2147467259(80004005)引发(对象'_VBComponent'的方法'属性'失败)
虽然用户表单已正确导入 - 我可以在公式窗口中看到它.
如果我使用对象检查器检查新导入的组件,我可以看到属性树,在完成此操作后,代码可以继续!奇怪的.
有人有任何建议可以避免这个问题吗?
编辑:
这是一个完整的例子:
Sub test()
Dim FName As String
With ThisWorkbook.VBProject.VBComponents ' save UserForm1
With .Item("UserForm1")
FName = Environ$("Temp") & "\" & .Name & ".frm"
If (LenB(Dir(FName)) <> 0) Then
Kill FName
End If
.Export Filename:=FName ' rename Form
.Name = .Name & "_org"
End With ' import
With .Import(FName)
Debug.Print FName; " has ", .Properties.Count; " …Run Code Online (Sandbox Code Playgroud) 我运行的程序会重复执行。当用户关闭用户窗体时,它应该停止。它运行不停。
由于该程序每8秒调用一次,因此我想在最后检查是否仍然加载/打开了用户窗体。
Public Sub NextPicture1()
PictureChange = Now + TimeValue("00:00:08")
If Onboarding_Projekt.Visible = True Then
Application.OnTime PictureChange, "NextPicture1"
End If
End Sub
Run Code Online (Sandbox Code Playgroud) 无论如何,有没有一种可以无模式运行的用户窗体,同时仍然像模式窗体一样暂停了代码执行?
我希望显示用户窗体,但仍允许与父程序进行交互。模态形式会阻止与父程序的交互。无模式表单可以工作,但是我希望在表单启动时暂停代码执行。
我通过创建一个无限循环来解决此问题,该循环检查该窗体是否可见,但这似乎有点hacky。
Public Sub GetFormInfoAndDoStuff
ufForm.show vbModeless
Do while ufForm.Visible
DoEvents
Loop
' Do other stuff dependent on form
End Sub
Run Code Online (Sandbox Code Playgroud)
编辑以澄清.show之后的代码存在,必须在完成用户表单后执行
我在网上搜索了一段时间,确实找到了一些解决方案,但似乎没有一个对我有帮助。
我在 Excel 2010 中有一个用户窗体,我想将它放在 Excel 窗口的中心。我有双显示器,它似乎总是在两个显示器之间居中。我知道您可以编辑一些属性,例如 StartUpPosition 等,以控制它的去向,但似乎更改这些参数没有任何作用。这是我在网上找到的代码,许多用户证明为他们工作。我的表单名为“HighlightForm”
Private Sub HighlightForm_Activate()
With HighlightForm
.StartUpPosition = 0
.Left = Application.Left + (0.5 * Application.Width) - (0.5 * .Width)
.Top = Application.Top + (0.5 * Application.Height) - (0.5 * .Height)
.Show
End With
End Sub
Run Code Online (Sandbox Code Playgroud)
但是,这根本不会改变我的表单放置的位置。它仍然在中心。我什至尝试将所有这些参数更改为零,但无济于事。我将此代码放在用户窗体代码本身中,我认为这是正确的位置。我也尝试过 HighlightForm_Initialize(),但它仍然不会响应任何更改。
有什么明显明显的我遗漏了吗?我不认为这是一个非常困难的问题,但我真的很难过。在此先感谢您的帮助。
我有这个从网站中提取数据的宏。我从用户那里得到输入。它可以正常工作,但 IE 不会关闭并占用所有内存。是否需要其他东西而不是IE.Quit?
这是子。如您所见,我最后关闭了 IE。
Public Cancel As Boolean
Sub USGD()
Dim IE As Object
Dim iWsh As Worksheet
Dim link As String
Dim sDate As String
Dim eDate As String
Dim StationID As String
Cancel = False
With USGS
.StartUpPosition = 0
.Left = Application.Left + (0.5 * Application.Width) - (0.5 * .Width)
.Top = Application.Top + (0.5 * Application.Height) - (0.5 * .Height)
.Show
End With
If Cancel = True Then
Unload USGS
Exit Sub
End …Run Code Online (Sandbox Code Playgroud) 我有一个用户窗体,它根据工作表上的选择显示附加信息。
调用用户窗体的过程位于工作表模块中,触发器是Worksheet_SelectionChange. 该表单是无模式的,因此用户可以选择工作表上的不同单元格。显示带有数据的表格。
问题是用户窗体将焦点从 Excel 应用程序上移开,因此箭头键不起作用。由于触发器是一个Worksheet_SelectionChange事件,因此它总是在选择更改后获得焦点。
如何从用户窗体中重新设置焦点或阻止用户窗体首先获得焦点?
我查看了应用程序属性以重新获得焦点,并查看了用户窗体属性以从用户窗体中删除焦点,但无法弄清楚。
我在 Excel 中有一个用户窗体,其中问题在 Listbox 控件中编入索引。单击列表框中的项目会调用 Change 事件,该事件根据已选择的项目填充其他控件的值。
用户可以更改文本框中的值。更改它们后,该问题的“已保存”标志将设置为 False。然后用户可以将问题保存到内存中;或离开问题。
如果用户在没有保存的情况下导航离开(通过单击列表框中的不同项目),我想向他们显示警告 - 提供放弃未保存更改的选项;或保留当前选择,并恢复他们刚刚单击的列表框选择。
如果选择“放弃更改”,则工作正常。但是,当我尝试恢复列表框选择时遇到了麻烦。我使用“EventsOn”布尔值来处理何时应该继续更改过程,以避免它调用自身。这似乎有效,在代码中的正确位置。但是在 EventsOn 恢复之后,并且在Exit Sub 之后,似乎再次调用了 Change 事件。
我不知道为什么该事件再次触发。这会导致用户第二次看到该选项。
下面的很多代码因为涉及到其他表单控件的细节,所以被删掉了;从数据库加载/保存数据;和处理类和字典。但是我保留了表单控件的相关逻辑:
Option Explicit
Dim NumberOfQuestions As Long
Dim EventsOn As Boolean
Dim SelectedListIndex As Long, CurrentQuestion As Long, QuestionSaved As Variant
Private Sub UserForm_Initialize()
' Stripped out lots of code here. Basically opens a recordset and loads values
ReDim QuestionSaved(1 To NumberOfQuestions) As Boolean
'
For X = 1 To NumberOfQuestions
lbox_QuestionList.AddItem "Question " …Run Code Online (Sandbox Code Playgroud) userform ×10
vba ×10
excel ×9
excel-vba ×5
excel-2010 ×2
forms ×1
listbox ×1
modal-dialog ×1
modeless ×1
scrollbar ×1