2017-02-14 1 views
2

임시 파일에 코드를 쓰지 않고 문자열 내에있는 VBA 코드를 실행하려고합니다. exemple 들어VBA 코드에서 문자열을 실행하십시오.

: 나는 평가, 평가를 시도

Dim code As String 
code = "n = 0 : e_i_e = 0 : For e_i_e = 0 To 100 : n+=1 : Next" 

, 실행, executeGlobal 및

Set VBComp = ThisWorkbook.VBProject.VBComponents.Add(vbext_ct_StdModule) 
    VBComp.Name = "NewModule" 
Set VBCodeMod = ThisWorkbook.VBProject.VBComponents("NewModule").CodeModule 
    With VBCodeMod 
     LineNum = .CountOfLines + 1 
     .InsertLines LineNum, _ 
     "Sub MyNewProcedure()" & Chr(13) & _ 
     code & Chr(13) & _ 
     "End Sub" 
    End With 
    Application.Run "MyNewProcedure" 

하지만이 모든으로 새로운 모듈을 추가는 ('= 오류를 반환하는

.

고마워요

+1

어떤 오류가 있습니까? – BruceWayne

+3

당신의 코드는 C#뿐만 아니라'n = n + 1'이어야합니다. –

+1

@ Nathan_Sav 또는 VB.NET –

답변

1

모듈을 만들어 문자열의 하위로 채울 수 있습니다. 실제로 개발자가 vba 코드를 저장소에 저장하는 방법 중 하나는 모듈에서 문자열로 코드를 추출한 다음 사용중인 버전 제어 소프트웨어에서 다시 읽는 것입니다. 당신이 "vbext_ct_StdModule"를 입력 할 때 어떤 일이 일어날해야

Sub make_module_sub_and_run(): 
    Dim strMacro As String 
    Dim myModule As VBComponent 

    Set myModule = ThisWorkbook.VBProject.VBComponents.Add(vbext_ct_StdModule) 
    strMacro = "Public Sub exampleSub()" & vbCrLf & _ 
       " n=0" & vbCrLf & _ 
       " For e_i_e = 0 to 100:" & vbCrLf & _ 
       " n=n+1" & vbCrLf & _ 
       " Next" & vbCrLf & _ 
       " MsgBox(""Hello World. Oh and n="" & n)" & vbCrLf & _ 
       "End Sub" 

    myModule.CodeModule.AddFromString strMacro 
    Application.Run myModule.Name & ".exampleSub" 

End Sub 

하는 것으로 즉 : 여기

은 당신이해야 할 무엇을 찾고있어 할 수있는 전체 예제 (새 별도의 모듈에서 하위를 원하는 가정) Intellisense는 이것이 누락되었다는 것을 알아 채고 당신이 그것을로드하고 싶은지 묻습니다 - 당신은 물론 그렇게합니다.

또한 모듈 이름을 실행할 때 모듈 이름 앞에 의도적으로 접두어가 붙였습니다. 그렇지 않으면 반복적으로 실행하면 반복적으로 동일한 이름의 하위 모듈로 새 모듈을 만들고 어떤 모듈인지 알 수 없습니다 하나는 달릴거야.

3

코드가 C# 인 경우 해당 코드는이어야합니다.

4

프로젝트를 컴파일 한 후에 생성 된 코드를 중단 할 수 없으므로 유효하고 컴파일 가능한 코드로 동적 모듈을 빌드해야합니다.

Sub MyNewProcedure() 
    n = 0 : e_i_e = 0 : For e_i_e = 0 To 100 : n+=1 : Next 
End Sub 

왜 그냥 그 조각을 어딘가에 붙여 넣기와 VBE에 대해 불평 무엇을 참조하십시오 당신은 당신의 코드는 다음과 같이 것입니다 그 F5 버튼에 충돌하기 전에 을 알고

?

Compile error: syntax error

와우. 코드의 동일한 줄에 6 가지 명령어를 섞는 것은 나쁜 생각입니다. 한 줄에 하나의 명령어가 있다면, 어떤 명령어가 고장 났는지 궁금하지 않을 것입니다.

As was already mentionedn += 1은 VBA 구문 (특히 C# 구문도 아닙니다)입니다. VBA의 값을 증가 시키면 현재 값에 액세스해야하므로 n = n + 1입니다.

ne_i_e이 어디에서 왔는지 확실하지 않습니다. 둘 다 지역 주민이라면, 당신의 절차는 근본적으로 아무것도 달성하지 못합니다. nMyNewProcedure 외부에서 선언 된 경우 ByRef 매개 변수로 전달하는 것이 좋습니다. 그렇지 않은 경우 코드를 n에 할당하여 결과를 Function으로 만들고 나머지는 그대로 두는 것이 좋습니다. 내가 당신이 달성하려고하는지 도대체 궁금합니다

Function MyNewFunction() As Long 
    MyNewFunction = 100 
End Function 

: 아래로 비등

Sub MyNewProcedure(ByRef n As Long) 
    Dim i As Long 
    For i = 0 To 100 
     n = i 
    Next 
End Sub 

.

생성 된 코드에 버그가있는 경우 VBE의 디버거가 생성 된 코드를 중단시키지 않으므로 문자열로 디버깅해야합니다. 즉, 코드를 생성하는 것이 중요합니다. 읽기 쉽고 유지할 수있는 방법으로 현재 코드에서 실제 생성 된 코드가 명확한 문자열로 표시되지 않습니다. InsertLines 호출 내에서 인라인으로 연결됩니다.

고려 :

Dim code As String 
code = "'Option Explicit" & vbNewLine & _ 
     "Public Sub MyNewProcedure()" & vbNewLine & _ 
     " n = 0" & vbNewLine & _ 
     " e_i_e = 0" & vbNewLine & _ 
     " For e_i_e = 0 To 100" & vbNewLine & _ 
     "  n = n + 1 ' fixed from n += 1" & vbNewLine & _ 
     " Next" & vbNewLine & _ 
     "End Sub" & vbNewLine 
'... 
'Debug.Print code 
.InsertLines LineNum, code 

그것은 다시 디버깅하는 동안 전체 코드를 얻기 위해 훨씬 쉽게, 그리고 검토뿐만 아니라 수정하는 것이 훨씬 쉽다. 연결 가능한 줄 수는 제한되어 있습니다.

0

욕실 기정 르 코드

n+=1 

C'était는 라모 exemple 부어 르 코드 릴 EST 분별 등 JE NE peux PAS 르 divulguer. Je suis sûr qu'il s'exécute sans erreurs.

J'ai donc essayé 라 proposée :

Sub make_module_sub_and_run(): 
    Dim strMacro As String 
    Dim myModule As VBComponent 

    Set myModule = ThisWorkbook.VBProject.VBComponents.Add(vbext_ct_StdModule) 
    strMacro = "Public Sub exampleSub()" & vbCrLf & _ 
       " n=0" & vbCrLf & _ 
       " For e_i_e = 0 to 100:" & vbCrLf & _ 
       " n=n+1" & vbCrLf & _ 
       " Next" & vbCrLf & _ 
       " MsgBox(""Hello World. Oh and n="" & n)" & vbCrLf & _ 
       "End Sub" 

    myModule.CodeModule.AddFromString strMacro 
    Application.Run myModule.Name & ".exampleSub" 

End Sub 

칼슘 fonctionne의 메르! "확장 성 라이브러리 용 Microsoft Visual Basic"을 (를) 작성하십시오. dans outils -> 사례

merci!

관련 문제