我正在尝试探索VBA中的一些可能性,并希望创建一个费用跟踪表。(我的将专门针对体育赌博,因为它在我居住的地方是合法的,但可以更改为家庭开支、旅行费用等。
用户输入投注(1 行(并通过单独的用户表单将其结果设置为"未决定">
然后,当游戏决定时,用户需要通过另一个用户表单更新该赌注的结果,这是我目前陷入困境的地方。我希望我能让表单有两个文本框,其中包含相关信息(投注日期和描述(,其中填充了结果设置为"未决定"的行中的数据。
我尝试汇编的代码运行没有错误,但没有输出任何内容,如下所示。我尝试添加一个带有"Beskrivelse"变体的消息框,但它返回为空。我无法弄清楚它是否正常运行但未保存单元格的值,或者它是否没有在正确的位置查找。
Private Sub UserForm_Initialize()
Dim sht As Worksheet
Dim finalrow As Long
Dim Beskrivelse As String 'description of bet'
Dim Dato As Date 'date of bet'
Dim i As Integer 'row counter'
Set sht = ThisWorkbook.Worksheets("FormelIndtastninger") 'needs to look up data from this specific sheet'
finalrow = sht.ListObjects("Data").Range.Rows.Count 'final row in Data table'
For i = 2 To finalrow
If Cells(i, 9) = "Ikke Afgjort" Then
Beskrivelse = Cells(i, 6)
Dato = Cells(i, 1)
End If
Next
OpdaterIndtastning.DatoTekstboks.Text = Dato
OpdaterIndtastning.SpilTekstboks.Text = Beskrivelse
End Sub
除了Mathieu Guindon建议使用UserForm_Activated
事件而不是UserForm_Initialize
事件之外。 使用单元格(行,列(在当前上下文中不起作用。 我想如果你尝试下面的代码,你会发现你的问题解决了。
'Change finalrow from long to range
'Old Code Dim finalrow as Long
Dim finalrow as Range
Set finalrow = sht.ListObjects("Data").Range.Rows 'Sets finalrow = to entire data table range
'The range below as the index of your for loop
Dim aRow as Range
For Each aRow In finalrow
If aRow.Value2(1, 9) = "A" Then
Beskrivelse = aRow.Value2(1, 6)
Dato = aRow.Value2(1, 1)
End If
Next