Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel For循环以多列形式输出_Excel_Vba_Outlook - Fatal编程技术网

Excel For循环以多列形式输出

Excel For循环以多列形式输出,excel,vba,outlook,Excel,Vba,Outlook,我正在尝试将Outlook电子邮件解析为Excel电子表格 所有“vText”都在B列中输出,而不是在B到E列中输出 原始电子邮件文本: 调用方:第一个最后一个 电话:123-456-7890 收件人:公司名称-地址 城市:大都会 MSGID:3068749608 我很好地提取了Caller、Phone和MSGID字段,但是解析公司名称没有用。它会将Phone或MSGID值随机粘贴到该列中 选项显式 Private Const xlUp的长度=-4162 子CopyAllMessagesToE

我正在尝试将Outlook电子邮件解析为Excel电子表格

所有“vText”都在B列中输出,而不是在B到E列中输出

原始电子邮件文本:

调用方:第一个最后一个
电话:123-456-7890
收件人:公司名称-地址
城市:大都会
MSGID:3068749608
我很好地提取了Caller、Phone和MSGID字段,但是解析公司名称没有用。它会将Phone或MSGID值随机粘贴到该列中

选项显式
Private Const xlUp的长度=-4162
子CopyAllMessagesToExcel()
将objOL设置为Outlook.Application
将对象设置为Outlook.Items
将objFolder设置为Outlook.MAPIFolder
将我设置为Outlook.MailItem
将xlApp作为对象
作为对象的Dim xlWB
将图纸作为对象
变暗vText、vText2、vText3、vText4、vText5作为变型
作为字符串的Dim sText
暗计数等于长
Dim bx以布尔形式开始
Dim enviro As字符串
将strPath设置为字符串
Dim Reg1作为对象
将M1作为对象
将M作为对象
Dim OutlookNamespace作为命名空间
enviro=CStr(环境(“用户档案”))
'工作簿的路径
strPath=enviro&“文件路径”
出错时继续下一步
Set xlApp=GetObject(,“Excel.Application”)
如果错误为0,则
Application.StatusBar=“正在打开Excel源,请稍候…”
设置xlApp=CreateObject(“Excel.Application”)
bXStarted=True
如果结束
错误转到0
'打开工作簿以输入数据
设置xlWB=xlApp.Workbooks.Open(strPath)
设置xlSheet=xlWB.Sheets(“Sheet1”)
'查找工作表的下一个空行
“rCount=xlSheet.Range(“B”&xlSheet.Rows.Count).End(xlUp.Row)”原始代码
rCount=xlSheet.Range(“A”&xlSheet.Rows.Count)。End(xlUp)。Row
rCount=rCount+1
Set objOL=Outlook.Application
Set-OutlookNamespace=objOL.GetNamespace(“MAPI”)
设置objFolder=OutlookNamespace.GetDefaultFolder(olFolderInbox).Folders(“子文件夹”).Folders(“子子子文件夹”)
设置objItems=objFolder.Items
对于objItems中的每个olItem
出错时继续下一步
用沸石
sText=分子筛体
Set Reg1=CreateObject(“VBScript.RegExp”)
'\s*=不可见空格
'\d*=匹配的数字
'\w*=匹配字母数字
作为整数的Dim i
对于i=1到4
使用Reg1
'.IgnoreCase=True
选择Case i'每个Case=一个已解析的特定字符串
案例1
'在调用者之后提取所有内容(以:)并在行尾停止\n
.Pattern=“(调用方[:]([\w-\s]*)\s*)\n”
案例2
.Pattern=“(电话[:]([\d-\s]*)\s*)\n”
“案例3不起作用
案例3
'在For(以:)分隔)之后拖动所有内容,并在破折号处停止[-]
.Pattern=“(对于[:]([\w-\s]*)\s*)[-]”
案例4
'在MSGID后面拉动所有部件,并在仪表板处停止[-]
.Pattern=“(MSGID[:]([\w-\s]*)\s*)[-]”
结束选择
以
如果是Reg1.Test(sText),则
'每个“(\w*)”和“(\s)”都分配了一个vText变量
Set M1=Reg1.Execute(sText)
M1中每M
vText=修剪(M.子匹配(1))
vText2=修剪(M.子匹配(2))
vText3=修剪(M.子匹配(3))
vText4=修剪(M.子匹配(4))
下一个
xlSheet.Range(“a”&r计数)=.ReceivedTime
xlSheet.Range(“b”和rCount)=vText
xlSheet.Range(“c”&rCount)=vText2
xlSheet.Range(“d”和rCount)=vText3
xlSheet.Range(“e”&rCount)=vText4
'xlSheet.Range(“D”&rCount)=主题
'xlSheet.Range(“f”&rCount)=vText5
“##检查每次迭代的输出:
'MsgBox(“在第#行中输入数据”&rCount)
“下一行
rCount=rCount+1
如果结束
接下来我
“做什么都行
调试。打印。主题
以
下一个
'xlWB.Close 1
“如果BX启动了
'xlApp.退出
"完"
设置M=无
设置M1=无
Set Reg1=无
设置xlApp=Nothing
设置xlWB=Nothing
Set xlSheet=无
设置objItems=Nothing
设置objFolder=Nothing
Set objOL=无
端接头

我会将正则表达式移动到一个单独的函数中:

函数提取文本(txt作为字符串,patt作为字符串)
静态注册为对象
尺寸匹配,rv作为字符串“编辑:从静态行移动
如果reg什么都不是
Set reg=CreateObject(“VBScript.RegExp”)
'在这里设置IgnoreCase等。。。
如果结束
注册模式=patt
如果注册测试(txt),则
Set matches=reg.Execute(txt)
rv=匹配项(0)。子匹配项(1)
如果结束
ExtractText=rv
端函数
然后,主代码的核心变成如下所示:

Set objOL=Outlook.Application
Set-OutlookNamespace=objOL.GetNamespace(“MAPI”)
设置objFolder=OutlookNamespace.GetDefaultFolder(olFolderInbox).Folders(“子文件夹”).Folders(“子子子文件夹”)
设置objItems=objFolder.Items
对于objItems中的每个olItem
sText=分子筛体
xlSheet.Range(“a”&r计数)=.ReceivedTime
xlSheet.Range(“b”&rCount)=提取文本(sText),(调用方[:]([\w-\s]*)\s*)\n)
xlSheet.Range(“c”&rCount)=提取文本(sText),(电话[:]([\d-\s]*)\s*)\n)
xlSheet.Range(“d”&rCount)=提取文本(sText),(用于[:]([\w-\s]*)\s*)[-]))

xlSheet.Range(“e”&rCount)=ExtractText(sText),(MSGID:\s?(\d{1,}))”)一次只能运行一个模式,因此不清楚如何让所有4个模式同时匹配。如果您在下一步恢复时删除错误恢复时的
,这将更加清晰-这只是将问题隐藏在代码中。谢谢!通过清理代码,这对清晰性有很大帮助!问题#1已解决-但我仍然无法获得以下行以在列D中输出正确的子字符串:
code
xlSheet.Range(“D”&rCount)=ExtractText(sText),(For[:]([\w-\s]*)\s*)[-])抱歉,我是个新手,还不知道如何将代码粘贴到注释中(或者如果可能的话)如果粘贴一个文本示例,则为p