2014-07-15 2 views
0

20k + 이미지에 대한 메타 데이터 정보가 포함 된 Excel 파일이 있습니다. 나는 매크로를 작성하여 exiftool.exe (메타 데이터를 일괄 처리하는 데 사용되는 도구)를 실행하여 각 행에 대한 변수를 반복적으로 사용하려고합니다.셸 명령에 변수를 입력하는 매크로 작성

C:\exiftool\exiftool.exe -Author="CELL B1 CONTENT" 
C:\exiftool\exiftool.exe -Author="CELL B2 CONTENT" 

이 ... 무한히 반복 :

는 예를 들어, 나는 다음과 같은 열 B ("저자")의 정보를 가지고 반복 exiftool 명령을 실행합니다.

이것은 내가 지금까지 시도한 것입니다 :

Sub EnterMetadata() 
    For Each Cell In Range("C1:C20000") 
    Shell("c:\Exiftool\exiftool.exe -o I:/Photos/ & ActiveCell.Offset(0, -2).Value) & " -Author=" & ActiveCell.Offset(0, -1).Value) 
    Next 
    End Sub 

사항은 해당 열 A는 원본 파일의 경로가 포함되어 있습니다. B 열은 작성자 이름을 포함합니다. 매크로의 열 A와 B에있는 셀의 상대 정보를 사용하려고합니다.

미리 감사드립니다.

답변

1

테스트되지 않은 : 당신의 명령 줄 매개 변수 중 하나가 다음에 공백이 포함되어있을 수 있습니다 당신이 그들을 인용해야하는 경우

Sub EnterMetadata() 
    Const CMD As String = "c:\Exiftool\exiftool.exe -o ""I:/Photos/{fn}"" -Author=""{auth}""" 
    Dim Cell as Range, s as String 

    For Each Cell In Range("C1:C20000") 
     s = Replace(CMD, "{fn}", Cell.Offset(0, -2).Value) 
     s = Replace(s, "{auth}", Cell.Offset(0, -1).Value) 

     Debug.Print s 


     Shell s 
    Next 
End Sub 

무엇 ShellExecute 사용에 대한

+0

작동하지 않습니다 ... "구문 오류가 발생했습니다. – Werner

+0

") "Cell.Offset (0, -2) 뒤에 값이 없습니다. 값이 – Werner

+0

이제 작동합니다. 감사합니다. – Werner

1

(따옴표는 그들을 배로 VBA 문자열에 이스케이프를)? 뭔가 가면 무슨 일이 일어 났는지 이해 tohelp 반환 값을 얻을

Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (_ 
    ByVal hWnd As Long, _ 
    ByVal lpOperation As String, _ 
    ByVal lpFile As String, _ 
    ByVal lpParameters As String, _ 
    ByVal lpDirectory As String, _ 
    ByVal nShowCmd As Long) As Long 

당신은 문자열 (lpParameters)로 매개 변수를 전달할 수 있습니다

당신이 그것을 사용할 수 있도록 매크로에 선언 할 필요가 무엇인가 일반적으로 Shell을 사용하는 것보다 다양합니다.

당신이 비슷한 할 수있는 (내가 exiftool을 가지고 있지 않는 한,이 은 테스트하지입니다 .) : 나는 당신이 당신의 요구 사항에 따라 저자를 채울 드리겠습니다

ShellExecute 0, vbNullString, "C:\exiftool\exiftool.exe", "-Author=""CELL B1 CONTENT""", vbNullString, 10 ' 10=SW_SHOWDEFAULT 

.

ShellExecute에 대한 자세한 내용은 MSDN에서 click here을 (를) 참조하십시오.