2014-12-10 6 views
0

최근에는 특정 문서에서 시간을 절약하기 위해 VBA에서 Word 매크로를 코딩하는 작업을 수행했습니다. 아이디어는 첫 번째 열의 숫자 문자열을 기반으로하는 절차로 표의 두 번째 열을 채우는 것입니다. 나는 잘 작동하는 첫 번째 열을 읽는 한 함수가 있습니다. 해당 데이터가 들어있는 배열을 다른 함수에 전달합니다. 내가 올바르게 지나가고 있음을 확인했습니다. 내 문제는 내가 두 번째 열에 대한 배열을 첫 번째 column.I 배열을 기반으로 채우려고하면 구조의 배열을 일종의 "키; 역할을합니다. 은 "키"의 각 요소는이 비슷한 모양의 한 구성원 및 another.This 기능과 해당 절차로 첫 번째 열을 비교하는 숫자의 문자열을 포함합니다 :조건부로 배열 채우기

Sub myFunction(ByRef codesFromTable() As String, ByRef procedures() As String) 
    Dim key(3) As myType 
    Dim x As Integer 
    Dim y As Integer 
    key(0).code = "1234" 
    key(0).procedure = "Procedure 1" 
    key(1).code = "2345" 
    key(1).procedure = "Procedure 2" 
    key(2).code = "3456" 
    key(2).procedure = "Procedure 3" 
    For x = 0 To 5 
    For y = 0 To 2 
     If StrComp(codesFromTable(x), key(y).code = 0 Then 
      procedures(x) = key(y).procedure 
    Next y 
    Next x 

I가이 코드를 테스트 할 때마다 테이블의 경우 프로 시저 배열은 키 배열의 마지막 요소에있는 정보로 완전히 채워집니다. 모든 입력은 가치 있고 인정 될 것입니다.

가 (1) 라인에서 "에서는 StrComp (codesFromTable (X), 키 (Y) .CODE가) 그런 경우"

"에서는 StrComp는"0을 반환

:

+0

다음 x와 다음 y를 사용 – Whome

+0

@Whome 이것이 실제로 달라질까요? Next 키워드는 루프의 카운터를 증가시키기위한 것입니다. 또한 카운터가 증가하고 마지막 반복의 데이터가 프로 시저 배열의 모든 요소에 할당되는 것처럼 보입니다. 어쨌든, 귀하의 의견에 감사드립니다. 나는 이것을 내일 시험하고 후속 조치 할 것이다. – MisterTophatJones

답변

0

나는 두 가지 문제가 코드에 존재하는 생각 두 개의 인수가 같을 때 불행히도 0은 VBA에서 FALSE를 의미합니다. 첫 번째 열이 키와 일치하지 않으면 코드가 'procedure'로 설정됩니다.

해당 줄은 다음과 같이 수정해야합니다. 의 내용에 관한

If StrComp(codesFromTable(x), key(y).code) = 0 Then 

(2) "codesFromTable (X)"(1) 첫 번째 열은 키와 동일한 경우 (0) .CODE 또는 버튼 (1) .CODE의 문제

, 절차는 열쇠가된다. (2). 절차.

첫 번째 열이 key (2) .code와 같을 때 프로 시저가 key (2)가되는 이유는 설명하지 않습니다.

codesFromTable (x) 유형이 String이 아니고 Integer가 아닌 것으로 의심됩니다.

다음과 같이 인수에 유형을 추가하여 codesFromTable()의 유형을 확인할 수 있습니다.

Sub myFunction(ByRef codesFromTable() as String, ByRef procedures() as String) 

codesofFromTable (x)의 형식이 정수이면 컴파일하는 동안 불일치 오류가 발생했습니다.

+0

입력 해 주셔서 감사합니다. codesFromTable()을 전달하는 함수 내에서 문자열로 선언됩니다. 이 함수에 대한 참조로 전달합니다.이 함수는 문자열로 유지한다고 가정합니다. 나는 너의 제안을 시도 할 것이다. 첫 번째 제안에 대해서는 문자열이 같을 때 StrComp 함수가 0을 반환한다는 것을 알지 못했습니다. 나는 그것이 사실로 돌아갈 것이라고 생각했다.그게 많이 설명해! 나는 내일 두 제안을 시도하고 이후에 후속 조치를 취할 것입니다. – MisterTophatJones

+0

나는 Excel의 VBA (http://www.techonthenet.com/excel/formulas/strcomp.php)에서 StrComp 기능이 sama에서 word의 VBA로 생각합니다. StrComp (str1, str2)는 str1 = str2 인 경우 0을 반환하고 str1> str2 인 경우 1을 반환하고 str1

+0

이것을 시도하고 @ Whome의 제안을 한 후에도 스크립트는 여전히 동일한 방식으로 작동합니다. – MisterTophatJones

0

나는 지금 매우 어리 석다. 배열의 내용을 살펴본 후, StrComp 함수는 항상 테이블에서 입력되는 문자열에 끝에 붙는 구분 문자가 있기 때문에 항상 1 또는 -1을 반환한다는 것을 알게되었습니다. 내 코드는 여전히 제대로 작동하지 않았을 것입니다. @Fumu 7은 StrComp이 어떻게 작동했는지 설명하지 않았으므로이를 답변으로 표시하겠습니다.