Я проверил Google и предлагаемые ответы здесь, но к сожалению, к сожалению.Visual Basic - Как использовать переменную от одной функции в другой
Последнее, что мне нужно сделать, это отправить электронное письмо в поле электронной почты, указав rateNbr
, но оно просто пусто.
Я попытался сделать Public Function FuncRateCheckFile
как Public Function FuncRateCheckFile(ByVal rateNbr As String)
, чтобы попытаться включить его для вызова вне функции, но тогда это прерывает функцию, когда она вызывается в другом месте. :(
Вот код, с комментариями относительно того, где я имею в виду:
Public Function FuncRateCheckFile()
Dim blnContinue As Boolean
Dim strLine As String
Dim strSearchFor, strSearchWrd, LineCount, objFSO, objTextFile, arrLines
Dim dteNow As Date
Dim newDate As String
'//==============================================================================================
'// DECLARED
Dim rateNbr As String
'//==============================================================================================
FuncRateCheckFile = False
blnContinue = True
If blnContinue Then
Const ForReading = 1
'Get todays date and reformat it
dteNow = DateValue(Now)
newDate = Format(dteNow, "dd/MM/yy")
strSearchWrd = newDate
'Read the whole file
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTextFile = objFSO.OpenTextFile(m_RateCheckFile, ForReading)
LineCount = 0
Do Until objTextFile.AtEndOfStream
strLine = objTextFile.ReadLine()
If InStr(strLine, strSearchWrd) <> 0 Then
arrLines = Split(strLine, vbCrLf)
LineCount = LineCount + 1
End If
Loop
'Log a message to state how many lines have todays day, and if there are none, log an error
If LineCount <> 0 Then
'//==============================================================================================
'// "rateNbr" IS WHAT I AM TRYING TO GET TO PUT IN THE EMAIL
LogMessage "Rate file date is correct"
rateNbr = "Number of rates for " & newDate & " in the file recieved on " & newDate & " is " & LineCount
LogMessage rateNbr
EmailAdvice2
objTextFile.Close
'//==============================================================================================
Else
blnContinue = False
LogError "Failed to retrieve Current Rate date, please check rate file.."
EmailAdvice
objTextFile.Close
End If
End If
FuncRateCheckFile = blnContinue
LogMessage "Completed Check Rate file"
End Function
Private Function EmailAdvice2()
Dim strSMTPFrom As String
Dim strSMTPTo As String
Dim strSMTPRelay As String
Dim strTextBody As String
Dim strSubject As String
Dim oMessage As Object
'//==============================================================================================
'// DECLARED AGAIN
Dim rateNbr As String
'//==============================================================================================
Set oMessage = CreateObject("CDO.Message")
strSMTPFrom = "[email protected]"
strSMTPTo = "[email protected]"
strSMTPRelay = "smtp.relay.com"
'//==============================================================================================
'// THIS MAKES THE TEXT BODY BLANK, BUT THE EMAIL STILL SENDS
strTextBody = rateNbr
'//==============================================================================================
strSubject = "Todays rates"
'strAttachment = "full UNC path of file"
oMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
oMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = strSMTPRelay
oMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
oMessage.Configuration.Fields.Update
oMessage.Subject = strSubject
oMessage.From = strSMTPFrom
oMessage.To = strSMTPTo
oMessage.textbody = strTextBody
'oMessage.AddAttachment strAttachment
oMessage.Send
End Function
Я уверен, что он пустой, потому что я объявил rateNbr
под EmailAdvice2()
, а потом не дал ему ничего, чтобы заполнить переменная с. Но я не знаю, как сделать это называть переменную под FuncRateCheckFile()
.
Спасибо всем за любую помощь.
Как это, ваш вопрос код свалка. Пожалуйста, уменьшите код до минимального примера, необходимого для иллюстрации вашей проблемы. – xxbbcc
Посмотрите на 'Scope'; объявленный внутри процедуры, 'rateNbr' существует только локально. Таким образом, у вас есть 2 из них, один в 'FuncRateCheckFile' и' EmailAdvice2'. Это даже VB.NET? Существует очень синтаксис VBA и использование объектов, например, с объектом FileScripting. – Plutonix
Вы опубликовали очень неопределенное (и несколько бессвязное) описание проблемы и огромную стену кода. Здесь не все проблемы. Пожалуйста, отредактируйте, чтобы четко сформулировать проблему, уменьшите код до минимального ** минимального **, необходимого для вашего вопроса, и задайте конкретный вопрос об этом коде. –