Excel 范围=在[vba]之前找到的列
我目前正在创建一个VBA宏,该宏将搜索名为“电子邮件”或“电子邮件-个人电子邮件”的列(这是同一列,但这两个名称是替代名称) 因此,首先搜索电子邮件列,然后检查电子邮件地址末尾是否有点。如果是,则应将其删除 我的VBA知识有限,我不是IT总监。因此,我主要使用和修改我在互联网上找到的现有脚本。下面是我结合两个宏编写的代码。它可以正常工作,但仅当电子邮件列位于同一位置时(在本例中为S列)。我应该如何修改代码以使用发现电子邮件标题的列 我的代码:Excel 范围=在[vba]之前找到的列,excel,vba,Excel,Vba,我目前正在创建一个VBA宏,该宏将搜索名为“电子邮件”或“电子邮件-个人电子邮件”的列(这是同一列,但这两个名称是替代名称) 因此,首先搜索电子邮件列,然后检查电子邮件地址末尾是否有点。如果是,则应将其删除 我的VBA知识有限,我不是IT总监。因此,我主要使用和修改我在互联网上找到的现有脚本。下面是我结合两个宏编写的代码。它可以正常工作,但仅当电子邮件列位于同一位置时(在本例中为S列)。我应该如何修改代码以使用发现电子邮件标题的列 我的代码: Sub GOOD_WORKS_No_Dots_at_
Sub GOOD_WORKS_No_Dots_at_End_of_Emails()
Dim strSearch As String
Dim aCell As Range
strSearch = "Email*"
Set aCell = Sheet2.Rows(1).Find(What:=strSearch, LookIn:=xlValues, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
If Not aCell Is Nothing Then
Sheets("Data").Activate
Dim LR As Long, i As Long
LR = Range("S" & Rows.Count).End(xlUp).Row
For i = 1 To LR
With Range("S" & i)
If Right(.Value, 1) = "." Then .Value = Left(.Value, Len(.Value) - 1)
End With
Next i
Sheets("Automation").Activate
MsgBox "No Dots at the end of email addresses - Done!"
End If
End Sub
以下几点应该有效
'rowNum<~~~ Enter the row number your "Header fields" are in
'returns a dictionary object
Function getAllColNum(ByVal rowNum As Long, ByVal searchString As Variant) As Object
Dim allColNum As Object
Dim i As Long
Dim j As Long
Dim width As Long
Set allColNum = CreateObject("Scripting.Dictionary")
colNum = 1
With ActiveSheet
width = .Cells(rowNum, .Columns.Count).End(xlToLeft).Column
For i = 1 To width
If InStr(UCase(Trim(.Cells(rowNum, i).Value)), UCase(Trim(searchString))) > 0 Then
allColNum.Add i, ""
End If '
Next i
End With
Set getAllColNum = allColNum
End Function
Sub GOOD_WORKS_No_Dots_at_End_of_Emails()
Dim strSearch As String
strSearch = "Email"
Dim colNum As Variant
Dim allColNum As Object
Sheets("Data").Activate
Dim LR As Long, i As Long
Set allColNum = getAllColNum(1, searchString)
For Each colNum In allColNum
LR = Cells(Rows.Count, colNum).End(xlUp).Row
For i = 1 To LR
With Range(Cells(i, colNum), Cells(i, colNum))
If Right(.Value, 1) = "." Then .Value = Left(.Value, Len(.Value) - 1)
End With
Next i
Next colNum
Sheets("Automation").Activate
MsgBox "No Dots at the end of email addresses - Done!"
End Sub
'rownumt这不适合我。它仍然在寻找S系列。我应该如何修改rowNum?应该在哪里进行更改。我的情况很简单——所有的标题都在第一行。你复制了我所有的代码吗?它从A栏搜索到任何你有的“电子邮件”或“电子邮件-个人电子邮件”栏如果A栏出现“电子邮件”,它应该可以工作,你的“电子邮件”栏在哪里?我已经找到了所有的代码,我没有更改任何内容,当我运行宏时,它会以消息结束,即它已完成,但电子邮件地址末尾的点尚未删除。电子邮件通常存储在R列中,但有些文件的S列中包含电子邮件。我还考虑使用1个搜索字符串作为电子邮件*我的问题,我看错了需要更改的编码部分之一,等等。我已修复了代码,现在它应该搜索“R”列,因为它位于S列之前。对于您的第二个请求,当我有时间的时候,我可以在大约4小时后做。