VBA Excel将多封电子邮件剪切/粘贴到另一个工作表中

时间:2018-10-18 22:56:50

标签: excel vba

我正在尝试通过循环将特定数据从一张纸移动到另一张纸。我需要宏来查看电子邮件,然后剪切这些行的所有数据并将其粘贴到下一个选项卡中。我有以下代码,但是无法识别我的.Value =“ @”。如果我这样做.Value =“”然后它将识别所有空白单元格。请帮忙,我知道这可能超级简单。

Private Sub CommandButton1_Click()
a = Worksheets("Master").Cells(Rows.Count, 1).End(xlUp).Row

For i = 2 To a

    If Worksheets("Master").Cells(i, 12).Value = "@" Then
        Worksheets("Master").Rows(i).Cut
        Worksheets("Email").Activate
        b = Worksheets("Email").Cells(Rows.Count, 1).End(xlUp).Row
        Worksheets("Email").Cells(b + 1, 1).Select
        ActiveSheet.Paste
        Worksheets("Master").Activate

    End If

Next

Application.CutCopyMode = False

ThisWorkbook.Worksheets("Master").Cells(1,1).Select


End Sub

1 个答案:

答案 0 :(得分:0)

好吧,这不起作用的原因是因为您正在询问Cells(i,12)的值是否等于@,但是我假设您正在询问它是否包含字符@。为此,您可以使用like而不是=,并在要比较的字符串中添加通配符(*)。因此,通配符的作用是说任何字符都可以位于指定字符的另一侧,并将其视为匹配项。例如,@*将匹配以@开头的任何内容,而*@将匹配以@结尾的所有内容。通过组合它们,您将获得*@*,它与包含@的任何内容匹配。

还要注意,您可以通过直接使用对象而不是激活它们来将其中的大部分折叠成一行。

您还应该养成使用Option Explicit并调暗变量的习惯,这样可以防止您使用未初始化的变量,这有助于防止较长代码段中的错误。

我在末尾添加了一些代码,该代码删除了主工作表使用范围内的所有空白单元格。这将使所有内容向上移动,因此,除非您关心的所有内容都位于中间没有空单元格的块中,否则我将其注释掉。但是,如果您选择使用它,确实可以帮助精简主列表。

Option Explicit

Private Sub CommandButton1_Click()

Dim A as Long
Dim i as Long

A = Worksheets("Master").Cells(Rows.Count, 1).End(xlUp).Row
Application.CutCopyMode = False

For i = 2 To A

    If Worksheets("Master").Cells(i, 12).Value Like "*@*" Then
        Worksheets("Master").Rows(i).Copy Destination:= Worksheets("Email").Cells(Worksheets("Email").Cells(Rows.Count, 1).End(xlUp).Row + 1, 1)
        Worksheets("Master").Rows(i).Clear
    End If

Next

Worksheets("Master").UsedRange.SpecialCells(xlCelltypeBlanks).Delete shift:=xlShiftUp

Application.CutCopyMode = True
End Sub