С 2 пользовательскими формами, имеющими код, который не взаимодействует между двумя - PullRequest
0 голосов
/ 12 апреля 2019

У меня есть пользовательская форма1 с именем «srForm», которая при нажатии кнопки «Сохранить» помещает данные в мою основную таблицу («srData»).В первом столбце «A» будет размещен уникальный идентификатор, сгенерированный userform_initialize.
Код userform_initialize выглядит следующим образом:

Private Sub UserForm_Initialize()
Me.srID.Enabled = True
Dim iRow As Long
Dim ws As Worksheet
Set ws = Worksheets("srData")
'find last data row from database
iRow = ws.Cells(Rows.Count, 1).End(xlUp).Row
If ws.[a2].Value = "" Then
Me.srID.Text = "SR-" & 1
Else
With ws.Cells(iRow, 1)
    Me.srID.Text = Left(.Value, 3) & CInt(Right(.Value, Len(.Value) - 3)) + 1
    End With
  End If
End Sub

В userform1 есть флажок «zeefTest», если этопроверен 2-й пользовательской формы "Fracties" откроется.Эта пользовательская форма содержит больше флажков и кнопку выбора команды.Когда кнопка выбора команды проверена, данные будут помещены в рабочий лист («Result_Particles»).В этом столбце таблицы «А» также указан уникальный идентификатор.Но это зависит от того, установлен ли флажок zeeftest.Код для вызова userform2 "Fracties":

Private Sub zeefTest_Click()
Fracties.Show

Dim sRow As Long

With Worksheets("Result_Particles").Range("A1")

sRow = Worksheets("Result_Particles").Range("A1").CurrentRegion.Rows.Count

.Offset(sRow, 0).Value = Me.srID.Value
End With

End Sub

Теперь, когда нажата 2-я кнопка выбора пользовательской формы, пользовательская форма выгружается и может быть нажата 1-я кнопка сохранения пользовательской формы.

Проблема, с которой я столкнулся, состоит в том, что код userform1 не работает правильно с кодом в userform2.Я думаю, что он переопределяет код userform2, когда я нажимаю на кнопку команды Save в пользовательской форме 1. Уникальный идентификационный код помещается в таблицу («Result_Particles») должным образом, но флажок interior.colorindex не записывает в соответствующие столбцы.Это только делает это правильно для первого ряда.Код для userform2:

Private Sub CmB1_Click()
Dim iRow As Long
With Worksheets("Result_Particles").Range("A1")
iRow = Worksheets("Result_Particles").Range("A1").CurrentRegion.Rows.Count
If Cbx1.Value = True Then
     .Offset(iRow, 1).Interior.ColorIndex = 2
    Else:
  .Offset(iRow, 1).Interior.ColorIndex = 15
End If

If Cbx2.Value = True Then
     .Offset(iRow, 2).Interior.ColorIndex = 2
    Else:
  .Offset(iRow, 2).Interior.ColorIndex = 15
End If

If Cbx3.Value = True Then
     .Offset(iRow, 3).Interior.ColorIndex = 2
    Else:
  .Offset(iRow, 3).Interior.ColorIndex = 15
End If

If Cbx4.Value = True Then
     .Offset(iRow, 4).Interior.ColorIndex = 2
    Else:
  .Offset(iRow, 4).Interior.ColorIndex = 15
End If
If Cbx5.Value = True Then
     .Offset(iRow, 5).Interior.ColorIndex = 2
    Else:
  .Offset(iRow, 5).Interior.ColorIndex = 15
End If

If Cbx6.Value = True Then
     .Offset(iRow, 6).Interior.ColorIndex = 2
    Else:
  .Offset(iRow, 6).Interior.ColorIndex = 15
End If

If Cbx7.Value = True Then
     .Offset(iRow, 7).Interior.ColorIndex = 2
    Else:
  .Offset(iRow, 7).Interior.ColorIndex = 15
End If

If Cbx8.Value = True Then
     .Offset(iRow, 8).Interior.ColorIndex = 2
    Else:
  .Offset(iRow, 8).Interior.ColorIndex = 15
End If

If Cbx9.Value = True Then
     .Offset(iRow, 9).Interior.ColorIndex = 2
    Else:
  .Offset(iRow, 9).Interior.ColorIndex = 15
End If

If Cbx10.Value = True Then
     .Offset(iRow, 10).Interior.ColorIndex = 2
    Else:
  .Offset(iRow, 10).Interior.ColorIndex = 15
End If

If Cbx11.Value = True Then
     .Offset(iRow, 11).Interior.ColorIndex = 2
    Else:
  .Offset(iRow, 11).Interior.ColorIndex = 15
End If

If Cbx12.Value = True Then
     .Offset(iRow, 12).Interior.ColorIndex = 2
    Else:
  .Offset(iRow, 12).Interior.ColorIndex = 15
End If
End With
Unload Me

End Sub

Я надеюсь, что кто-то может помочь мне исправить мой код для правильной работы.Я знаю, что это не самый удачный код, поэтому, если кто-то знает лучший способ написания кода для моих флажков, это также будет высоко цениться.

Спасибо, что уделили время.

1 Ответ

0 голосов
/ 12 апреля 2019

Результат этой строки:

Worksheets("Result_Particles").Range("A1").CurrentRegion.Rows.Count

равен 1.

Это потому, что CurrentRegion применяется только к Range("A1"), чья Rows это только один.

Насколько я понимаю вашу цель, вы должны изменить этот диапазон на что-то более широкое, чтобы Count привело к чему-то более значимому.

Дайте мне знать, если это не поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...