我正在尝试将我在MS Excel 2010的VBA编辑器中构建的用户表单链接到Excel工作表中的数据,但我得到了
运行时错误424:需要对象。
我在代码中明确地提到了活动工作表来尝试解决这个问题,但它仍然会出现相同的错误。我的代码是:
Private Sub GetData()
Dim r As Long
r = ActiveSheet.Range("B2").Value
If IsNumeric(RowNumber.Text) Then
r = CLng(RowNumber.Text)
Else
ClearData
MsgBox "Invalid row number"
Exit Sub
End If
If r > 1 And r <= LastRow Then
cboFilterResultId.Text = FormatNumber(Cells(r, 1), 0)
txtFolderPaths.Text = Cells(r, 2)
txtFileName.Text = Cells(r, 3)
txtDeletedDate.Text = Cells(r, 4)
txtReason.Text = Cells(r, 5)
txtcboAdd.Text = Cells(r, 6)
txtcboView.Text = Cells(r, 7)
txtcboChange.Text = Cells(r, 8)
DisableSave
ElseIf r = 1 Then
ClearData
Else
ClearData
MsgBox "Invalid row number"
End If
End Sub
其中RowNumber是一个文本框,用户可以在其中输入所需数据的行号。
请帮忙!
答案 0 :(得分:0)
我很少使用ActiveSheet
,以防万一不是我所追求的表格。通常最好明确指出您所指的是哪一张:
r=ThisWorkbook.WorkSheets("Sheet1").Range("B2")
是的,将数据从工作表提取到用户表单...因为您没有说明错误发生在哪一行,而您没有向我们提供ClearData
或DisableSave
我的代码我会从头开始。
我创建了一个空白用户窗体并添加了三个文本框和一个旋转按钮:
txtRowNumber
包含从中提取数据的行号。 TextBox1
和TextBox2
将保留我的样本值
在Tag
的{{1}}属性中,我输入TextBox1
,在1
的{{1}}属性中输入Tag
。这些是将从中提取数据的列号
实际上,我通常会添加额外的内容,例如TextBox2
。然后我会使用一些代码将它拆开,因此它粘贴在第8列,必须有一个百分比并且是必需的条目。 2
用于快速向上或向下移动一行。 我们需要两个过程来填充给定行号的表单并清除表单上的所有控件(准备好引入下一行)。
清除任何包含8;CPER;REQD
属性内容的文本框或组合框:
spnButton
从指定的Tag
和列(来自Private Sub ClearForm()
Dim frmCtrl As Control
For Each frmCtrl In Me.Controls
If frmCtrl.Tag <> "" Then
Select Case TypeName(frmCtrl)
Case "TextBox", "ComboBox"
frmCtrl.Value = Null
Case Else
'Do nothing.
End Select
End If
Next frmCtrl
End Sub
值)填充具有Tag
值(假定值正确)的任何控件。从包含VBA代码(RowNumber
)的工作簿中的名为 MyDataSheet 的工作表中取值始终,无论当前是否处于活动状态:
Tag
每当ThisWorkbook
更改时,表单都应使用指定行的值进行更新。要做到这一点,我们需要清除当前数据的形式,然后重新填充它:
Private Sub PopulateForm(RowNumber As Long)
Dim frmCtrl As Control
For Each frmCtrl In Me.Controls
With frmCtrl
If .Tag <> "" Then
.Value = ThisWorkbook.Worksheets("MyDataSheet").Cells(RowNumber, CLng(.Tag))
End If
End With
Next frmCtrl
End Sub
旋转按钮应增加/减少txtRowNumber
中的值。我添加了检查,它不会低于1.您还应该添加检查,它不会高于上一个填充的行。
Private Sub txtRowNumber_Change()
ClearForm
PopulateForm CLng(Me.txtRowNumber)
End Sub
最后,首次打开时应填充表单:
.txtRowNumber