2009-10-16 6 views
1

내가 원했던 부분에 대한 온라인 코드를 발견했습니다. 평상시처럼 Visual Studio에서 실행했는데 문제가 없습니다.VB (MSVisualStudio 2005) 및 VBA (Excel)과 다른 점 찾기

이 문제는 Excel로 이식하려고하면 작동을 멈추는 문제가 발생합니다. 제가 아는 바에 따르면 VBA는 VB의 다운 된 버전입니다. (이 기사를 읽을 때 기준 : Difference between Visual Basic 6.0 and VBA)

따라서 두 프로그래밍 환경간에 갈 때 무엇이 ​​손실되는지 어떻게 알 수 있습니까?

좀 더 자세히 알려면 : Visual Studio에서 버튼을 누르면 이메일이 전송되는 프로그램을 작성했습니다. 그런 다음 Excel로 매크로로 포트하려고했지만 작동하지 않았습니다.

편집 :

: Adeed 추가 문제 정보 여기

내가 비주얼 스튜디오 공공 Form1 클래스

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
    CDO_Mail_Small_Text() 
End Sub 

Sub CDO_Mail_Small_Text() 
    Dim iMsg As Object 
    Dim iConf As Object 
    Dim strbody As String 
    Dim Flds As Object 

    iMsg = CreateObject("CDO.Message") 
    iConf = CreateObject("CDO.Configuration") 

    iConf.Load(-1) ' CDO Source Defaults 
    Flds = iConf.Fields 
    With Flds 
     .Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 
     .Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") _ 
           = "morgan" 
     .Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25 
     .Update() 
    End With 

    strbody = "Hi there" & vbNewLine & vbNewLine & _ 
       "This is line 1" & vbNewLine & _ 
       "This is line 2" & vbNewLine & _ 
       "This is line 3" & vbNewLine & _ 
       "This is line 4" 

    With iMsg 
     .Configuration = iConf 
     .To = "[email protected]" 
     .CC = "" 
     .BCC = "" 
     .From = """Ron"" <[email protected]>" 
     .Subject = "Important message" 
     .TextBody = strbody 
     .Send() 
    End With 

End Sub 

최종 클래스

여기

내가 Excel에서 실행 한 무슨을에있는 것입니다

Sub Button1_Click() 
    CDO_Mail_Small_Text 
End Sub 


Sub CDO_Mail_Small_Text() 
    Dim iMsg As Object 
    Dim iConf As Object 
    Dim strbody As String 
    Dim Flds As Object 

iMsg = CreateObject("CDO.Message") 
iConf = CreateObject("CDO.Configuration") 

iConf.Load (-1) 
Flds = iConf.Fields 
With Flds 
    .Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 
    .Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") _ 
           = "morgan" 
    .Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25 
    .Update 
End With 

strbody = "Hi there" & vbNewLine & vbNewLine & _ 
      "This is line 1" & vbNewLine & _ 
      "This is line 2" & vbNewLine & _ 
      "This is line 3" & vbNewLine & _ 
      "This is line 4" 

With iMsg 
    .Configuration = iConf 
    .To = "[email protected]" 
    .CC = "" 
    .BCC = "" 
    .From = """Ron"" <[email protected]>" 
    .Subject = "Important message" 
    .TextBody = strbody 
    .Send 
End With 

End Sub 

작동하지 않는 부분은 다음과 같습니다.,"런타임 오류 '91': 개체 변수 또는 With 블록 변수가 설정되지" "iMsg = CreateObject를 ("CDO.Message ")"

나는 그것이 다음 줄에 저를 소요 디버깅

건배, 예레미야 Tantongco

+0

코드를 제공 객체 또는 적어도 작업 할 때 VB6/VBA에서

http://www.rondebruin.nl/sendmail.htm

답변

1

당신은 SET 문을 사용해야합니다.
+0

감사. 이제 작동합니다! 구문에 미묘한 차이가 있다고 생각합니다.독서로 인해 구문이 동일하다고 생각하게되었습니다! – Zigu

4

VBA는 클래식 VB의 컴파일 - 온 - 더 - 플라이 버전입니다. 나는 항상 Full VB 6.0과 VB 스크립트 사이의 중간 정도로 생각했다. 핵심은 기본 VB 6.0 라이브러리 및 기타 COM 라이브러리에만 액세스 할 수 있다는 것입니다. 스크립트 라이브러리, ADO 2.6, Excel, Word 등의 오피스 라이브러리와 같이 많은 유용한 com 라이브러리가 거의 항상 사용 가능하기 때문에 실제로는 매우 강력했습니다.

그러나 이것은 .NET이 아니며 .NET 라이브러리에 대한 액세스가 전혀 없습니다. Visual Studio를 말할 때 Visual Studio 6.0을 의미합니까? VS.NET에서 Excel로 코드를 복사하는 경우 작업 할 기회가 없습니다. 그러나 VS6 (또는 이전 버전)에서 Excel VBA로 코드를 복사하는 경우 해당 코드를 가져와야합니다. VS에서 참조하고있는 라이브러리를 참조하기 만하면됩니다. 더 많은 정보와 물론 오류가 필요합니다.

0

코드의 차이점을 증명할 수는 없지만 다음 링크는 VBA에서 전자 메일을 보내는 훌륭한 예입니다. 무엇이 잘못되었는지 알아낼 수 있습니다. 이 "작업 중단"할 때 오류

Set iMsg = CreateObject("CDO.Message") 
Set iConf = CreateObject("CDO.Configuration") 
+0

여기에서 코드를 사용하는 사이트입니다! – Zigu