Использование информации информации из комбинированного окна в EXCEL VBA для записи данных на лист - PullRequest
0 голосов
/ 16 января 2020

Я собираюсь сделать книгу по контролю за макросами для команды боулинга моего сына после того, как я увидел одного из тренеров, пытающихся отслеживать выплаты и очки с бумагой и карандашом во время соревнования, которое мы организовали. Я прошел долгий путь, но застрял на чем-то, для чего не могу найти хорошего решения. В форме, которую вы пишете в поле Имя, HP C [гандикап], оплата, способ оплаты, группа игроков, клуб и какой город.

Все игроки зарегистрированы в одной базе данных, расположенной на листе данных Базы данных с именем , HP C club .. .. .. но тогда игроки также должны быть зарегистрированы в других wotksheets, где каждая группа игроков находится на отдельном рабочем листе. При регистрации вы выбираете группу игроков в комбинированном окне. Идея состоит в том, чтобы использовать информацию для регистрации, но я могу застрять.

Option Explicit

Sub Reset()
    Dim iRow As Integer

    iRow = [counta(DataBas!A:A)] 'Find last row in column A

     With frmform

        'Reset the form

        .txtHPC.Value = ""
        .txtName.Value = ""
        .optJa.Value = False
        .optNej.Value = False
        .ChbKontant.Value = False
        .ChbSwish.Value = False


        .cmbGrupp.Clear 'rensa kombintionsrutan

        ' Lägg till val i kombinationsrutan
        .cmbGrupp.AddItem "Småttingen"
        .cmbGrupp.AddItem "Lillinget"
        .cmbGrupp.AddItem "Mellingen"
        .cmbGrupp.AddItem "Storingen"
        .cmbGrupp.AddItem "Elit"

        .txtKlubb.Value = ""
        .txtOrt.Value = ""

        .lstDataBas.ColumnCount = 10
        .lstDataBas.ColumnHeads = True
        .lstDataBas.ColumnWidths = "25;75;50;25;60;60;30;45;70;70"

           If iRow > 1 Then
               .lstDataBas.RowSource = "DataBas!A2:J" & iRow

           Else
               .lstDataBas.RowSource = "DataBas!A2:J2"
            End If
    End With
End Sub

Sub Submit()
    Dim sh As Worksheet
    Dim iRow As Long
    Dim gRow As Long
    Dim name As String

    name = frmform.cmbGrupp.Value

    Set sh = ThisWorkbook.Sheets("DataBas")
    iRow = [counta(DataBas!A:A)] + 1 ' finding the last row and adding 1

    With sh
        .Cells(iRow, 1) = iRow - 1
        .Cells(iRow, 2) = frmform.txtName.Value
        .Cells(iRow, 3) = frmform.cmbGrupp.Value
        .Cells(iRow, 4) = frmform.txtHPC.Value
        .Cells(iRow, 7) = IIf(frmform.optNej = True, "Nej", "Ja")
        .Cells(iRow, 8) = IIf(frmform.ChbSwish = True, "Swish", "Kontant")
        .Cells(iRow, 5) = frmform.txtKlubb.Value
        .Cells(iRow, 6) = frmform.txtOrt.Value
        .Cells(iRow, 9) = Application.UserName
        .Cells(iRow, 10) = [Text(now(), "YYYY-MM-DD HH:MM:SS")]
    End With
    Set sh = ThisWorkbook.Sheets(frmform.cmbGrupp.Value)

    gRow = [counta(name! A:A)] + 1  ' ***here I'm stuck***


    Debug.Print gRow
    With sh
        .Cells(gRow, 1) = frmform.txtName.Value
        .Cells(gRow, 2) = frmform.txtHPC.Value
        .Cells(gRow, 3) = frmform.txtKlubb.Value
    End With


End Sub

Sub Show_form()

    frmform.Show

End Sub

1 Ответ

0 голосов
/ 16 января 2020

Вам не нужна переменная name.

Заменить

Set sh = ThisWorkbook.Sheets(frmform.cmbGrupp.Text)

gRow = [counta(name! A:A)] + 1  ' ***here I'm stuck***


Debug.Print gRow
With sh
    .Cells(gRow, 1) = frmform.txtName.Value
    .Cells(gRow, 2) = frmform.txtHPC.Value
    .Cells(gRow, 3) = frmform.txtKlubb.Value
End With

этим ...

Dim grpsh As Worksheet
Set grpsh = ThisWorkbook.Sheets(frmform.cmbGrupp.Value)

    With grpsh
        Dim gRow As Long
        gRow = .Cells(.Rows.Count, "A").End(xlUp).Offset(1).Row 'CountA is unreliable        

        .Cells(gRow, 1).Value = frmform.cmbGrupp.Value
        .Cells(gRow, 2).Value = frmform.txtHPC.Value
        .Cells(gRow, 3).Value = frmform.txtKlubb.Value 
    End With     
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...