标签: userform

excel - vba - userform - frame - 设置滚动条位置

如何设置框架的滚动条位置(在用户窗体内)?

案子:

我在userform中有一个具有动态内容的框架.因此,如果内容太大而无法适应框架,则(动态地)在该框架中创建滚动条.滚动条还具有动态值,遵循帧内容大小.

更新滚动条的代码如下:

With userform1.frame1
    'dynamic size
    .ScrollHeight = param1 * param2
    .ScrollWidth = .InsideWidth * 30
End with
Run Code Online (Sandbox Code Playgroud)

所以我想有一些东西将滚动条发送到底部位置!我怎么做?提前致谢

excel vba scrollbar excel-vba userform excel-2010

6
推荐指数
1
解决办法
1万
查看次数

调用userform并返回值

我有一个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 excel-vba userform excel-2010

6
推荐指数
2
解决办法
3万
查看次数

在UserForms之间传递数据

在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)

forms excel vba excel-vba userform

6
推荐指数
1
解决办法
3万
查看次数

将Userform导入VBComponents后无法读取属性

我尝试导入一个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'的方法'属性'失败)

虽然用户表单已正确导入 - 我可以在公式窗口中看到它.

如果我使用对象检查器检查新导入的组件,我可以看到属性树,在完成此操作后,代码可以继续!奇怪的.

有人有任何建议可以避免这个问题吗?

编辑:

这是一个完整的例子:

  • 创建一个新的Excel工作表
  • 插入用户表单
  • 执行以下代码:

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)

excel vba excel-vba userform

6
推荐指数
1
解决办法
298
查看次数

检查用户表单是否打开

我运行的程序会重复执行。当用户关闭用户窗体时,它应该停止。它运行不停。

由于该程序每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)

excel vba excel-vba userform

6
推荐指数
1
解决办法
6005
查看次数

无模式形式仍会暂停代码执行

无论如何,有没有一种可以无模式运行的用户窗体,同时仍然像模式窗体一样暂停了代码执行?

我希望显示用户窗体,但仍允许与父程序进行交互。模态形式会阻止与父程序的交互。无模式表单可以工作,但是我希望在表单启动时暂停代码执行。

我通过创建一个无限循环来解决此问题,该循环检查该窗体是否可见,但这似乎有点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之后的代码存在,必须在完成用户表单后执行

vba modal-dialog modeless userform

5
推荐指数
1
解决办法
2万
查看次数

在多个监视器上居中用户窗体

我在网上搜索了一段时间,确实找到了一些解决方案,但似乎没有一个对我有帮助。

我在 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(),但它仍然不会响应任何更改。

有什么明显明显的我遗漏了吗?我不认为这是一个非常困难的问题,但我真的很难过。在此先感谢您的帮助。

excel vba userform

5
推荐指数
1
解决办法
5538
查看次数

我的模块结束后 Internet-Explorer 不会关闭

我有这个从网站中提取数据的宏。我从用户那里得到输入。它可以正常工作,但 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)

excel internet-explorer vba userform

5
推荐指数
1
解决办法
1017
查看次数

加载非模式用户窗体后将焦点设置回 Excel

我有一个用户窗体,它根据工作表上的选择显示附加信息。

调用用户窗体的过程位于工作表模块中,触发器是Worksheet_SelectionChange. 该表单是无模式的,因此用户可以选择工作表上的不同单元格。显示带有数据的表格。

问题是用户窗体将焦点从 Excel 应用程序上移开,因此箭头键不起作用。由于触发器是一个Worksheet_SelectionChange事件,因此它总是在选择更改后获得焦点。

如何从用户窗体中重新设置焦点或阻止用户窗体首先获得焦点?

我查看了应用程序属性以重新获得焦点,并查看了用户窗体属性以从用户窗体中删除焦点,但无法弄清楚。

excel vba userform

5
推荐指数
1
解决办法
4901
查看次数

VBA:ListBox Change 事件触发两次

我在 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)

excel vba listbox userform

5
推荐指数
1
解决办法
868
查看次数