保持活跃的工作表

时间:2018-08-22 21:59:25

标签: excel-vba

我有一本包含每月工作表的工作簿。一个用于电子邮件,一个用于呼叫,我创建了两个用于数据输入的userForm,一个用于电子邮件,一个用于呼叫。

表单完成了工作,并在正确的位置输入日期,但是如果我选择了“ August 18 Email”表并使用“ Email”表单,则一旦提交表单,它就会跳转以显示“ August 18 Calls”表。

我只希望它保留在选定的工作表中,在本例中为“ 8月18日电子邮件”。

“电子邮件”表单的代码如下,“呼叫”表单的代码几乎相同,但仅更改了此行:Set ws = Sheets(Format(Date, "mmmm yy") & " calls")

Private Sub CommandButton2_Click()


Dim lRow As Long
Dim ws As Worksheet
Set ws = ActiveSheet
Set ws = Sheets(Format(Date, "mmmm yy") & " emails")


lRow = ws.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
With ws
    If Me.txtDateBox.Value = "" Then
        .Cells(lRow, 1).Value = Format(Date, "dd/mmm/yy")
    Else
        .Cells(lRow, 1).Value = Me.txtDateBox.Value
    End If

 myVar = ""

For x = 0 To Me.ListBox2.ListCount - 1
    If Me.ListBox2.Selected(x) Then
        If myVar = "" Then
            myVar = Me.ListBox2.List(x, 0)
        Else
            myVar = myVar & "," & Me.ListBox2.List(x, 0)
        End If
    End If
Next x

.Cells(lRow, 11).Value = myVar



myVarSign = ""

For x = 0 To Me.ListBox3.ListCount - 1
    If Me.ListBox3.Selected(x) Then
        If myVarSign = "" Then
            myVarSign = Me.ListBox3.List(x, 0)
        Else
            myVarSign = myVarSign & "," & Me.ListBox3.List(x, 0)
        End If
    End If
Next x

.Cells(lRow, 12).Value = myVarSign

myVarTheme = ""

For x = 0 To Me.ListBox1.ListCount - 1
    If Me.ListBox1.Selected(x) Then
        If myVarTheme = "" Then
            myVarTheme = Me.ListBox1.List(x, 0)
        Else
            myVarTheme = myVarTheme & "," & Me.ListBox1.List(x, 0)
        End If
    End If
Next x

.Cells(lRow, 14).Value = myVarTheme

    .Cells(lRow, 2).Value = Me.Time.Value
    .Cells(lRow, 3).Value = Me.ComboBox1.Value
    .Cells(lRow, 4).Value = Me.ComboBox2.Value
    .Cells(lRow, 5).Value = Me.ComboBox3.Value
    .Cells(lRow, 6).Value = Me.ComboBox4.Value
    .Cells(lRow, 7).Value = Me.ComboBox5.Value
    .Cells(lRow, 8).Value = Me.ComboBox15.Value
    .Cells(lRow, 9).Value = Me.ComboBox6.Value
    .Cells(lRow, 10).Value = Me.ComboBox7.Value
    .Cells(lRow, 13).Value = Me.ComboBox11.Value
    .Cells(lRow, 15).Value = Me.ComboBox16.Value
    .Cells(lRow, 16).Value = Me.TextBox2.Value
End With

Me.txtDateBox.Value = ""
Me.Time.Value = ""
Me.ComboBox1.Value = ""
Me.ComboBox2.Value = ""
Me.ComboBox3.Value = ""
Me.ComboBox4.Value = ""
Me.ComboBox5.Value = ""
Me.ComboBox6.Value = ""
Me.ComboBox7.Value = ""
Me.ComboBox11.Value = ""
Me.ComboBox16.Value = ""
Me.ComboBox15.Value = ""
Me.TextBox2.Value = ""

Dim iCount As Integer

For iCount = 0 To Me!ListBox1.ListCount
    Me!ListBox1.Selected(iCount) = False
Next iCount

 For iCount = 0 To Me!ListBox2.ListCount
    Me!ListBox2.Selected(iCount) = False
Next iCount

 For iCount = 0 To Me!ListBox3.ListCount
    Me!ListBox3.Selected(iCount) = False
Next iCount


End Sub

可以进行很多改进,但是我很高兴在提交工作表后仍停留在视图中而不是跳到另一个。

如您所见,我才刚刚开始(我已经设法在别人的帮助下创建了它)。

谢谢。

1 个答案:

答案 0 :(得分:0)

如果删除工作表,范围或单元格对象上的.Select.Activate的任何实例,则工作表不应更改。

如果这不是一个选择,那么另一种解决方案是在调用代码时记下您所在的工作表,然后Activate结束工作表之前的工作表。由于我们看不到所有的用户表单代码,因此您必须从战略上确定它的去向(如@ K.Davis所提到的,没有显示任何内容切换工作表,因此它必须在其他代码中发生)。


启动宏/用户窗体时:

Dim StartSheet as Worksheet
Set StartSheet = ActiveSheet

然后,在退出宏/用户窗体之前:

StartSheet.Activate

根据代码的结构,您可能必须将此作为参数传递。

相关问题