VBA语法:运行时错误424

您所在的位置:网站首页 运行错误424要求对象vba VBA语法:运行时错误424

VBA语法:运行时错误424

2024-07-17 03:24| 来源: 网络整理| 查看: 265

让我们退一步,看看我们想做什么。

从工作簿上的某个区域获取一些数据,并将其填充到用户表单文本框中。编辑用户表单上的数据。将新数据更新回工作表。

现在,我们可以把我们的努力集中在这三个步骤。

,但在我们讨论这一点之前,理解VBA.中的 作用域 会使您受益。

现在,您的代码并不是最具描述性的(至少在英语中不是这样),所以如果问题注释中没有对代码进行澄清,我将做一些假设。

下面写在一个新的用户表单上,包含一个文本框、label和2个命令按钮,所有这些都带有默认名称(下面的屏幕截图)。

步骤1:

获取数据并将其放入文本框的方法是很好的。为了避免模棱两可,最好总是显式地限定我们的语句,这样代码就可以查看正确的工作簿/工作表或用户表单等等。

代码语言:javascript复制Private Sub CommandButton1_Click() Dim TargetCell As Range Dim SearchString As String SearchString = ThisWorkbook.Sheets("Sheet1").Range("A1").Value 'Only "Range("A1").Value" implies ActiveSheet which may give false results. Set TargetCell = ThisWorkbook.Sheets("Sheet1").Range("B:B").Find(SearchString, , xlValues, xlWhole) If Not TargetCell Is Nothing Then 'TargetRange Is Something, do the thing 'You could assign the values to the textbox here rather than outside of the If statement 'Or you could change it to If TargetCell Is Nothing Then - And only execute the code in the Else section below Else MsgBox "Packzettel Nr. " & strSearch & " konnte nicht gefunden werden (Fehler #001)", vbOKOnly UserForm1.TextBox1.SetFocus Exit Sub 'This stops the rest of the code from running - I'm assuming the above is an error that nothing was found. End If ThisWorkbook.Sheets("Sheet1").Range("E1") = TargetCell.Address 'Saving for later UserForm1.TextBox1.Value = ThisWorkbook.Sheets("Sheet1").Cells(TargetCell.Row, TargetCell.Column).Offset(0, 1).Value End Sub

我对代码所做的唯一真正的更改是显式地显示Range或Cells在哪里,或者我们希望访问该对象的Value属性。

以及对列使用Offset属性而不是+ 1等。

第2步:

用户可以根据需要更改数据--对于我们来说,没有什么可以明智地进行编程。

您可以在这里为数据验证添加一些步骤,等等,

第3步:

再次将数据写回工作表,您写得相当好。同样,我将确保使用相关的工作簿/工作表显式限定对象(如Range和Cells )以及我们想要访问的属性(如Value )。

这一次,我将工作簿/工作表分配给一个变量。

代码语言:javascript复制Private Sub CommandButton2_Click() Dim TargetSheet As Worksheet Set TargetSheet = ThisWorkbook.Sheets("Sheet1") Dim TargetCellAddress As String With TargetSheet TargetCellAddress = .Range("E1").Value 'Recall our saved cell address from the Commandbutton1 click .Range(TargetCellAddress).Offset(0, 1).Value = UserForm1.TextBox1.Value .Range("E1").ClearContents 'Remove TargetCellAddress value from the sheet End With End Sub

虽然使用了以前保存的Range.Address属性(在E1中),但这里基本上与上面相同,但相反。

注意,您可以像我对With Statement一样将语句封装在TargetSheet中,这样您就可以访问它的对象、属性和方法,而不必每次都限定它--尽管每个语句都以.开头

总结;

不需要为任何textbox值声明变量,只需将它们直接从/分配到userform/worksheet,而visa相反。对对象等进行限定,例如Range或Cells,并显式引用要使用的属性,即Value (这是默认的,但不是全部!)

以下是一些截图,每点击一次。

UserForm第一次打开:

Commandbutton1单击:

TextBox1编辑:

Commandbutton2单击:



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3