【发布时间】:2020-05-28 08:48:53
【问题描述】:
这可能已经被问过了,但我仍然需要问,因为我对 VBA 和整个编程还很陌生,我不知道我做错了什么。 我有一个用户表单,它从文本框(在本例中为数字)获取数据,并在我的表中搜索它。 然后,从那个范围,我正在采取步骤来检索连接到这个数字的数据:
定义变量:
Sub UserForm_Initialize()
Call CloseButtonSettings(Me, False)
Dim selected_col As Long
Dim PZ_ID As Single, KD_ID As Single, Customer_Combination As String, Ship_ID As String, Author_ID As String, _
Art_Lager As Single, Art_Bestell As Single, DTPicker1 As Date, Calc_Time As Single, Time1 As Single, _
Time2 As Single, Time3 As Single, Time_Special As Single, Time_Total As Single, Notes_Buero As String, Notes_Lager As Single
End Sub
搜索 + 将数据放入文本框
Private Sub CommandButton1_Click()
Dim PZ_RNG As Range
Dim strSearch As String
strSearch = Packzettelinfo.PZ_ID
Set PZ_RNG = Range("B:B").Find(strSearch, , xlValues, xlWhole)
If Not PZ_RNG Is Nothing Then
Else
MsgBox "Packzettel Nr. " & strSearch & " konnte nicht gefunden werden (Fehler #001)", vbOKOnly
Packzettelinfo.PZ_ID.SetFocus
End If
Range("E1") = PZ_RNG.Row 'Saving for later
Packzettelinfo.KD_ID = Cells(PZ_RNG.Row, PZ_RNG.Column + 1)
Packzettelinfo.Customer_Combination = Cells(PZ_RNG.Row, PZ_RNG.Column + 2)
Packzettelinfo.Ship_ID = Cells(PZ_RNG.Row, PZ_RNG.Column + 3)
Packzettelinfo.Author_ID = Cells(PZ_RNG.Row, PZ_RNG.Column + 4)
Packzettelinfo.Art_Lager = Cells(PZ_RNG.Row, PZ_RNG.Column + 5)
Packzettelinfo.Art_Bestell = Cells(PZ_RNG.Row, PZ_RNG.Column + 6)
Packzettelinfo.DTPicker1 = Cells(PZ_RNG.Row, PZ_RNG.Column + 7)
Packzettelinfo.Calc_Time = Cells(PZ_RNG.Row, PZ_RNG.Column + 8)
Packzettelinfo.Time1 = Cells(PZ_RNG.Row, PZ_RNG.Column + 10)
Packzettelinfo.Time2 = Cells(PZ_RNG.Row, PZ_RNG.Column + 11)
Packzettelinfo.Time3 = Cells(PZ_RNG.Row, PZ_RNG.Column + 12)
Packzettelinfo.Time_Special = Cells(PZ_RNG.Row, PZ_RNG.Column + 13)
Packzettelinfo.Time_Total = Cells(PZ_RNG.Row, PZ_RNG.Column + 14)
Packzettelinfo.Notes_Buero = Cells(PZ_RNG.Row, PZ_RNG.Column + 15)
Packzettelinfo.Notes_Lager = Cells(PZ_RNG.Row, PZ_RNG.Column + 16)
End Sub
这很好用!
但是当我尝试保存文本框时(内容已更改),它显示“运行时错误 424”:
Private Sub CB_PZ_save_edit_Click()
Cells(PZ_RNG.Row, PZ_RNG.Column + 1) = Packzettelinfo.KD_ID
Cells(PZ_RNG.Row, PZ_RNG.Column + 2) = Packzettelinfo.Customer_Combination
Cells(PZ_RNG.Row, PZ_RNG.Column + 3) = Packzettelinfo.Ship_ID
Cells(PZ_RNG.Row, PZ_RNG.Column + 4) = Packzettelinfo.Author_ID
Cells(PZ_RNG.Row, PZ_RNG.Column + 5) = Packzettelinfo.Art_Lager
Cells(PZ_RNG.Row, PZ_RNG.Column + 6) = Packzettelinfo.Art_Bestell
Cells(PZ_RNG.Row, PZ_RNG.Column + 7) = Packzettelinfo.DTPicker1
Cells(PZ_RNG.Row, PZ_RNG.Column + 8) = Packzettelinfo.Calc_Time
Cells(PZ_RNG.Row, PZ_RNG.Column + 10) = Packzettelinfo.Time1
Cells(PZ_RNG.Row, PZ_RNG.Column + 11) = Packzettelinfo.Time2
Cells(PZ_RNG.Row, PZ_RNG.Column + 12) = Packzettelinfo.Time3
Cells(PZ_RNG.Row, PZ_RNG.Column + 13) = Packzettelinfo.Time_Special
Cells(PZ_RNG.Row, PZ_RNG.Column + 14) = Packzettelinfo.Time_Total
Cells(PZ_RNG.Row, PZ_RNG.Column + 15) = Packzettelinfo.Notes_Buero
Cells(PZ_RNG.Row, PZ_RNG.Column + 16) = Packzettelinfo.Notes_Lager
End Sub
再次,由于我是新手,对于我想做的事情来说,这可能是一种愚蠢的方法,但是哦,好吧......
【问题讨论】:
-
我没有看到你在哪里定义了
Packzettelinfo... -
@braX Packzettelinfo 是我的用户表单,其中有文本框(KD_ID 等)
-
一旦表单初始化,所有在
UserForm_Initialize()中定义的变量都会被遗忘...当您在CB_PZ_save_edit_Click()中使用它们时,它们都将隐式类型为Variant- 仅供参考。您可能希望在要使用它们的每个模块中声明它们。 -
看起来scope 在这里很重要。该链接将有助于全局变量(如果实际上需要它们)。
-
@NareshBhople 是的,我愿意!电子表格中的值已更改。另外,它是一个文本框。那我不需要声明它们吗? (bc 教科书总是文本格式对吗?我需要这些值,因为我可能正在计算,但这也可能在 excel 本身中......)