具有2个用户窗体,其代码不会在两者之间交互

时间:2019-04-12 07:25:21

标签: excel vba

我有一个名为“ srForm”的userform1,当单击保存命令按钮时,会将数据放入我的主工作表(“ srData”)中。在第一列“ A”中,将放置一个唯一ID,该ID由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”,如果选中该复选框,则将打开第二个用户窗体“ Fracties”。该用户窗体包含更多复选框和一个选择命令按钮。 选中选择命令按钮后,数据将放入工作表(“ Result_Particles”)中。在此工作表中,列“ A”也是唯一ID。但这取决于选中的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

现在,当单击第二个用户窗体选择命令按钮时,将卸载该用户窗体,然后单击第一个用户窗体保存按钮。

我遇到的问题是userform1代码无法与userform2中的代码一起正常工作。当我单击用户窗体1中的“保存”命令按钮时,我认为它会覆盖userform2代码。唯一的ID代码已正确放置在工作表(“ Result_Particles”)中,但复选框internal.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 :(得分:0)

此行的结果:

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

是1。

这是因为CurrentRegion仅应用于Range("A1")仅是Rows的{​​{1}}。

据我了解您的目标,您应该将该范围更改为更广泛的范围,以使Count的结果更有意义。

让我知道这是否无济于事。