excel VBA宏用于通过电子邮件进行过滤并基于电子邮件地址创建新工作表

n9vozmp4  于 2023-04-22  发布在  其他
关注(0)|答案(1)|浏览(144)

我已经创建了一个宏过滤器的基础上的电子邮件地址在列D,它过滤电子邮件一个接一个,复制所有可见的细胞,创建一个新的工作表的名称的电子邮件地址,并粘贴到新的工作表的细胞,它继续到下一个电子邮件地址,直到结束.但正在发生的是,它忽略/不阅读一些电子邮件地址,它创建新的工作表,它不会根据电子邮件地址命名(它将其命名为“sheeet 22”),并将其留空(没有粘贴数据)。但它适用于其余的电子邮件地址,只是有些不适用,我不知道为什么。我用蓝色为每个新创建的工作表上色。

Dim r As Double
Dim email As String
Dim sh As Worksheet
Dim OA As Object
Dim msg As Object
Dim lastrow As Double
Dim i As Double
Dim S_UserName As String
Dim sImgFront As String
Dim POV As String
Dim POF As String
Dim Vcost As Double
Dim Fcost As Double

ThisWorkbook.Sheets("InvoiceTracker").Select
Range("D2:D1000000").ClearFormats
Range("D2:D1000000").ClearHyperlinks
Range("D2:D1000000").ClearNotes
Set sh = ActiveSheet
sh.Range("A1:AE1").AutoFilter
r = 1

Do
    r = r + 1
    email = sh.Range("D" & r).Value
    On Error Resume Next
    If Sheets(email) Is Nothing Then
        sh.Range("A1:AE1").AutoFilter Field:=4, Criteria1:=email
        sh.Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Copy
        Debug.Print email
        Sheets.Add.Name = email
        Sheets(email).Paste
        ActiveSheet.Tab.Color = RGB(0, 112, 192)
        sh.ShowAllData
    End If
Loop While sh.Range("D" & r + 1).Value <> ""

有人能建议吗?
我试着做了以下事情:

  • print-查看是否有该电子邮件地址的值,它就在那里。
  • 我重写了电子邮件地址,这是不工作的不同的电子邮件地址,和不同的电子邮件地址是工作。
  • 我已经删除了该电子邮件的前3个字母,它是工作,但一旦我再次输入整个电子邮件地址,它不工作。
31moq8wy

31moq8wy1#

您需要添加长度和字符的检查。最大值为31个字符,并且某些字符是非法的
下面是以前使用过的代码。

Public Function IsValidSheetName(strSheetName As String) As Boolean

   Dim varSheetNameIllegalCharacters As Variant: varSheetNameIllegalCharacters = SheetNameIllegalCharacters

   Dim i As Integer

   For i = LBound(varSheetNameIllegalCharacters) To UBound(varSheetNameIllegalCharacters)
    If InStr(strSheetName, (varSheetNameIllegalCharacters(i))) > 0 Then Exit Function
   Next i

  If len(strSheetName) >= 31 then exit function

  IsValidSheetName = False

  End Function

这是角色的功能

Private Function SheetNameIllegalCharacters() As Variant

SheetNameIllegalCharacters = Array("/", "\", "[", "]", "*", "?", ":")
End Function

相关问题