由于不能为Variant分配一个Array值,因此FN过程的返回值变暗 [英] Return value of FN procedure dim'd as Variant cannot be assigned an Array value
问题描述
以下程序在
http://ffdba.com/downloads/Send_Mail...ok_Express.htm
旨在协同工作,通过OE实现电子邮件发送。
最后一个程序(FN SplitB)在其最后一行失败,这意味着
赋予SplitB(一个变体)的值aSplit的值(
数组暗淡'作为变体)。由于类型不匹配而失败。任何人
知道如何解决这个问题吗?
私有类型MapiRecip
保留为长
RecipClass As Long
Name as String
Address as String
EIDSize As Long
EntryID As Long
结束类型
私有类型MAPIFileDesc
保留为长
标志为长
Position As Long
PathName As String
fileName As String
FileType As Long
结束类型
私有类型MAPIMessage
保留为长
主题为字符串
NoteText为字符串
MessageType As String
DateReceived As String
ConversationID As String
Originator As Long
flags As很长
RecipCount As Long
收件人为长
FileCount为长
文件为长
结束类型
声明函数MAPISendMail _
Lib" ; c:\program files\outlook express\msoe.dll" (_
ByVal会话长,_
ByVal UIParam As Long,_
消息作为MAPIMessage,_
ByVal标志为长,_
ByVal保留为长)
Public Sub SendMailWithOE(ByVal vSubject As String,_
ByVal vMessage As String,_
ByRef vRecipients As String,_
可选ByVal vFiles As String)
Dim aFiles ()As String
Dim aRecips()As String
Dim FilePaths()As MAPIFileDesc
Dim Recips()As MapiRecip
作为MAPIMessage的暗淡消息
Dim z As Long
aFiles = Split(vFiles,"," ;)
ReDim文件路径(LBound(aFiles)到UBound(aFiles))
对于z = LBound(aFiles)到UBound(aFiles)
使用FilePaths(z)
.Position = -1
.PathName = StrConv(aFiles(z),vbFromUnicode)
结束
下一页z
aRecips =拆分(vRecipients,",")
ReDim Recips(LBound(aRecips)To UBound(aRecips))
for z = LBound(aRecips)To UBound(aRecips)
With Recips(z)
.RecipClass = 1
如果InStr(aRecips(z)," @")< 0那么
.Address = StrConv(aRecips(z),vbFromUnicode)
Else
.Name = StrConv(aRecips(z),vbFromUnicode)
结束如果
结束
下一页z
带消息
.FileCount = UBound(FilePaths) - LBound(FilePaths)+ 1
.Files = VarPtr(FilePaths(LBound(FilePaths)))
.NoteText = vMessage
.RecipCount = UBound(Recips) - LBound(Recips)+ 1
.Recipients = VarPtr(Recips(LBound(Recips)))
.Subject = vSubject
结束
MAPISendMail 0,0,消息,0,
结束子
私有子Test_SendMailWithOE()
Dim aFiles()As Variant
Dim aRecips()As String
Dim Files as String
Dim Messag e As String
Dim Recipients As String
Dim Subject As String
''不需要
Files =" C:\ twacker.log"
Files = Files& "," &安培; C:\readme.txt
''需要
收件人=所以***** @ Some.Domain
''不需要
收件人=收件人& "," &安培; 所以********* @ SomeOther.Domain
消息=如果你知道的话,请告诉我。
主题=测试
SendMailWithOE主题,消息,收件人,文件
结束子>
公共函数SplitB(ByVal SplitString As String,ByVal Delimiter As
String)As Variant
Dim Position As Long
Dim aSplit()As Variant
Dim Dimension As Long
Position = InStr(SplitString,Delimiter)
Do While Position< 0
ReDim保留aSplit(尺寸)
aSplit(UBound(aSplit))=修剪(左(SplitString,Position - 1))
SplitString = Mid $(SplitString,Position + 1)
Dimension = Dimension + 1
Position = InStr(SplitString,Delimiter)
Loop
ReDim保留aSplit(维度)
aSplit(维度)=修剪(SplitString)
SplitB = aSplit
结束功能
The following procedures found at
http://ffdba.com/downloads/Send_Mail...ok_Express.htm
are meant to work together in harmony to effect eMail sends via OE.
The last procedure (FN SplitB) fails on its last line which is meant
to assign the value of SplitB (a variant) the value of aSplit (an
array dim''d as variant). That fails due to Type Mismatch. Anyone
know how to get around this?
Private Type MapiRecip
Reserved As Long
RecipClass As Long
Name As String
Address As String
EIDSize As Long
EntryID As Long
End Type
Private Type MAPIFileDesc
Reserved As Long
flags As Long
Position As Long
PathName As String
fileName As String
FileType As Long
End Type
Private Type MAPIMessage
Reserved As Long
Subject As String
NoteText As String
MessageType As String
DateReceived As String
ConversationID As String
Originator As Long
flags As Long
RecipCount As Long
Recipients As Long
FileCount As Long
Files As Long
End Type
Declare Function MAPISendMail _
Lib "c:\program files\outlook express\msoe.dll" ( _
ByVal Session As Long, _
ByVal UIParam As Long, _
Message As MAPIMessage, _
ByVal flags As Long, _
ByVal Reserved As Long) As Long
Public Sub SendMailWithOE(ByVal vSubject As String, _
ByVal vMessage As String, _
ByRef vRecipients As String, _
Optional ByVal vFiles As String)
Dim aFiles() As String
Dim aRecips() As String
Dim FilePaths() As MAPIFileDesc
Dim Recips() As MapiRecip
Dim Message As MAPIMessage
Dim z As Long
aFiles = Split(vFiles, ",")
ReDim FilePaths(LBound(aFiles) To UBound(aFiles))
For z = LBound(aFiles) To UBound(aFiles)
With FilePaths(z)
.Position = -1
.PathName = StrConv(aFiles(z), vbFromUnicode)
End With
Next z
aRecips = Split(vRecipients, ",")
ReDim Recips(LBound(aRecips) To UBound(aRecips))
For z = LBound(aRecips) To UBound(aRecips)
With Recips(z)
.RecipClass = 1
If InStr(aRecips(z), "@") <0 Then
.Address = StrConv(aRecips(z), vbFromUnicode)
Else
.Name = StrConv(aRecips(z), vbFromUnicode)
End If
End With
Next z
With Message
.FileCount = UBound(FilePaths) - LBound(FilePaths) + 1
.Files = VarPtr(FilePaths(LBound(FilePaths)))
.NoteText = vMessage
.RecipCount = UBound(Recips) - LBound(Recips) + 1
.Recipients = VarPtr(Recips(LBound(Recips)))
.Subject = vSubject
End With
MAPISendMail 0, 0, Message, 0, 0
End Sub
Private Sub Test_SendMailWithOE()
Dim aFiles() As Variant
Dim aRecips() As String
Dim Files As String
Dim Message As String
Dim Recipients As String
Dim Subject As String
'' not required
Files = "C:\twacker.log"
Files = Files & "," & "C:\readme.txt"
'' required
Recipients = "So*****@Some.Domain"
'' not required
Recipients = Recipients & "," & "So*********@SomeOther.Domain"
Message = "Let me know if you get this, please."
Subject = "Test"
SendMailWithOE Subject, Message, Recipients, Files
End Sub
Public Function SplitB(ByVal SplitString As String, ByVal Delimiter As
String) As Variant
Dim Position As Long
Dim aSplit() As Variant
Dim Dimension As Long
Position = InStr(SplitString, Delimiter)
Do While Position <0
ReDim Preserve aSplit(Dimension)
aSplit(UBound(aSplit)) = Trim(Left(SplitString, Position - 1))
SplitString = Mid$(SplitString, Position + 1)
Dimension = Dimension + 1
Position = InStr(SplitString, Delimiter)
Loop
ReDim Preserve aSplit(Dimension)
aSplit(Dimension) = Trim(SplitString)
SplitB = aSplit
End Function
推荐答案
(SplitString,Position + 1)
Dimension = Dimension + 1
Position = InStr(SplitString,Delimiter) )
循环
ReDim保留aSplit(维度)
aSplit(维度)=修剪(SplitString)
SplitB = aSplit
结束函数
(SplitString, Position + 1)
Dimension = Dimension + 1
Position = InStr(SplitString, Delimiter)
Loop
ReDim Preserve aSplit(Dimension)
aSplit(Dimension) = Trim(SplitString)
SplitB = aSplit
End Function
SplitB返回变量数组。
它可以用作
Dim aV As Variant
aV = SplitB(Lyle R Fairfield," ")
Debug.Print aV(0)
''Lyle
''或
昏暗aV作为变体
Dim z As Long
对于z = LBound(aV)到UBound(aV)
Debug.Print aV(z)
下一页z
''Lyle
''R
''Fairfield
''使用
SplitB(Lyle R Fairfield,")(0)
SplitB(Lyle R Fairfield,")(1)
SplitB(Lyle R Fairfield,")(2)
''对于上述任务有效,但比我们应该要求VBA更多的工作
做。
无论我认为它' SendMailwithOE代码不再需要了吗?
-
Lyle Fairfield
SplitB returns a variant array.
It can be used as
Dim aV As Variant
aV = SplitB("Lyle R Fairfield", " ")
Debug.Print aV(0)
''Lyle
''or
Dim aV As Variant
Dim z As Long
For z = LBound(aV) To UBound(aV)
Debug.Print aV(z)
Next z
''Lyle
''R
''Fairfield
''using
SplitB("Lyle R Fairfield", " ")(0)
SplitB("Lyle R Fairfield", " ")(1)
SplitB("Lyle R Fairfield", " ")(2)
''for the above task works but is more work than we should ask VBA to
do.
Regardless I think it''s no longer required for the SendMailwithOE code?
--
Lyle Fairfield
< ; snip>
的程序 http://www.ffdba.com /downloads/Send_...ok_Express.htm
仍在使用它。它是一套非常方便的程序。我会尝试
让它运转起来。如果可以,我会在这里发布。
<snip>
The procedures at
http://www.ffdba.com/downloads/Send_...ok_Express.htm
still use it. Its a very handy set of procedures there. I''ll try to
get it working. If I can, I''ll post it here.
>
无论我认为它不再需要SendMailwithOE代码?
>
Regardless I think it''s no longer required for the SendMailwithOE code?
这篇关于由于不能为Variant分配一个Array值,因此FN过程的返回值变暗的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!