簡體   English   中英

如何根據需要動態在Excel VBA用戶窗體中添加列表框和文本框?

[英]How to add list boxes and text boxes in Excel VBA Userforms dynamically as needed?

盡管與VBA相關,我不知道這是否適合放置在stackoverflow中-尤其是在UserForms區域中,但是,我根本看不到我將如何編寫此代碼。

我的Excel工作表如下所示: Excel工作表

我創建的用於輸入數據的用戶窗體如下所示: 用戶窗體

但是,我要實現的功能類似於QuickBooks的實現方式,即在第一筆圖片(My excel工作表)中無需在輸入Expense Accounts情況下自動在Expense Accounts之間分配Expense Accounts Amount Due 另外,當費用帳戶比平時多時(例如10個費用帳戶,Quickbooks將為此目的自動添加新行)。 示例如下所示: 快速手冊樣本

我的主要問題是,如果需要,我不知道如何讓UserForms動態添加更多行。 當先前的所有行都已填滿時,它可以自動添加行,如下圖所示:

理想形式

n為費用科目數

因此,從必須輸入n*2 (或者在我的情況下為4個值)中:

電話/保險費用:40,000

銀行現金40,000

水費:40,000

銀行現金:40,000

我可以將其簡化為n+1輸入(或者在我的情況下為3個輸入):

應付金額:80,000

電話/保險費用:40,000

水費40,000

例如,可以找到許多示例和教程,這些示例和教程如何動態添加控件。

如何對創建的控件,動態在運行時
加入-控制到一幀式-AN-Excel的用戶窗體與- VBA
VBA的用戶窗體,基礎加-控制-動態在運行時

但是,根據最大行數,也許是在設計時創建所有控件,將Visible -property設置為false並在需要時將其更改為true的更好解決方案。

您可以基於標簽在用戶窗體代碼中單擊添加控件。 您必須保持一定數量的行,才能利用該行將它們整齊地放置並從示例中向下移動該標簽(否則它將被隱藏在添加的文本框后面)。

UserForm的示例代碼:

Private rowCount As Integer 'To keep track of rows.
Private Sub UserForm_Initialize()
    rowCount = 1
End Sub

Private Sub LabelAddRow_Click() 'Event handler: Add row on click of label.
    Dim tb As Control
    rowCount = rowCount + 1
    Set tb = Me.Controls.Add("Forms.TextBox.1", "textBox" & rowCount & "left", True) 'Add left TextBox.
    With tb 'Position and size it:
        .Top = 25 + (rowCount * 25) + 10
        .Left = 25
        .Height = 25
        .Width = 100
    End With
    Set tb = Me.Controls.Add("Forms.TextBox.1", "textBox" & rowCount & "right", True) 'Same for the right one:
    With tb
        .Top = 25 + (rowCount * 25) + 10
        .Left = 150
        .Height = 25
        .Width = 100
    End With
    LabelAddRow.Top = LabelAddRow.Top + 25 'Move the label down.
End Sub

您可能還想在UserForm的高度上添加一些內容,以使其隨添加的控件一起增長。 另外,您可能想重新定位TextBoxes下面的其他控件。

如果要在填寫完最后一個框后自動添加行,則需要向新添加的控件中添加一些事件,但這不是問題中列出的主要問題。

編輯 :上面的顯然是基於您的最后一張圖片,因為那是“快速獲勝”; 處理動態添加的TextBoxes的事件將增加額外的復雜性。 如果您決定走這條路,我建議先嘗試一下,並在出現新問題時發布新問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM