excel - 如何动态引用用户表单

标签 excel vba

我试图避免将用户表单的名称硬编码到填写并稍后从所述用户表单中检索数据的子项中。我在这里包含的 sub 是应该将用户窗体中的值放入工作表上的单元格的那个。

(我对此还是很陌生)

我已经尝试了其他解决方案中的几种方法来解决 stackoverflow 上的类似问题,但均无济于事。
我最接近的是 Screen.ActiveForm 但遗憾的是那是用于 Access,而不是 excel。

我也尝试过创建一个公共(public)对象变量,但也无法让它工作。

唯一有效的方法是将 Userform1 硬编码到 subs 中,但这似乎是一种低效的方法。我不明白为什么有人每次设置另一个用户表单时都必须编写一个新模块。

''''''''''''''''' Userform '''''''''''''''''''

Private Sub CommandButton1_Click() ' Ok

' Set CurrentForm = Me.Caption
Interactive_Userforms.EditAdd

End Sub


''''''''''''''''' Module '''''''''''''''''''


Public StartRow, StartColumn, n_TextBoxes As Integer
Public sheet As String
' public CurrentForm as object

Sub EditAdd()

Dim i, j, k  As Integer

i = StartRow
j = StartColumn
k = 1

Do While screen.activeform.Controls("TextBox" & k).Value <> ""

    Worksheets(sheet).Cells(i, j).Value = screen.activeform.Controls("TextBox" & k).Value

    Debug.Print (Worksheets(sheet).Cells(i + StartRow, j + StartColumn).Value)

    i = i + 1
    k = k + 1

Loop

End Sub

我希望能够做的是最终让任何用户窗体能够调用这个子来检索其文本框控件上的值并将它们很好地放入工作表中。

最佳答案

如果您只想让用户表单调用 EditAdd Sub,您可以更改您的 EditAdd
签名至Sub EditAdd(Form as Object)Sub EditAdd(Form as Userform)然后您可以在调用 EditAdd 时将用户表单实例本身作为“我”传递

Private Sub CommandButton1_Click() ' Ok

' Set CurrentForm = Me.Caption
Interactive_Userforms.EditAdd(Me)

End Sub

关于excel - 如何动态引用用户表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58544325/

相关文章:

c# - 使用 C# 处理启用宏的 Excel 文件的警报弹出对话框

excel - 使用 Excel VBA 激活工作表

vba - 如何使单词的每个字母都大写,但字母 "of"、 "and"、 "it"、 "for"不大写?

Excel VBA 从字符串中获取日期

excel - 如何在一张纸上获取文件中所有工作表的列表?

excel - Excel 中的间接函数

php - xml 中未显示的整数的第一个数字为零

c# - 通过 C# 为 MS Excel 的 VSTO 加载项代码签名证书

VBA - 比较多个工作表中的单元格值

excel - 保存 VBA 前检查文件夹权限