Excel VBA: поиск листа для конкретной строки при инициализации пользовательской формы - PullRequest
0 голосов
/ 20 сентября 2018

Я пытаюсь изучить некоторые возможности 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

1 Ответ

0 голосов
/ 20 сентября 2018

В дополнение к рекомендации Матье Гиндона использовать событие UserForm_Activated, а не событие UserForm_Initialize.Использование Cell (строка, столбец) не будет работать в текущем контексте.Я думаю, что если вы попробуете код ниже, вы обнаружите, что ваша проблема решена.

'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
...