2015-01-07 2 views
0

CSV 파일을 생성하는 C# 프로그램이 있고 Excel에서 XLSM 파일을 엽니 다 (ProcessStartInfoProcess.Start 사용). XLSM의 매크로는 CSV 파일을로드하고 그 파일을 특정 셀에 배포합니다. 결국 이것은 어떤 Office 제품군에도로드 할 수있는 매크로없이 스프레드 시트를 생성하는 C# 일 것이며 CSV는 사라질 것입니다.일괄 처리에서 Excel VBA 매크로로 값을 전달하는 방법은 무엇입니까?

제 문제는이 시스템이 현재 어디서든 디스크에서 XLSM을 실행할 수 있어야한다는 것입니다. 사용자 지정 위치에서 작동하지 않는 하드 코드 된 상대 경로를 통해 CSV를 찾습니다. 상수를 정의하기 위해 컴파일러 매개 변수를 전달하는 것과 비슷한 작업을하고 싶습니다.

편집 1 : 내가 생각하고 거절

대체 방법 :

  • 복사하여 CSV 근처 표준 위치에 XLSM하고 거기에서 실행합니다.

    파일을 원래 위치로 다시 복사해야하지만 Excel이 닫히는 시점을 알지 못합니다 ... Excel에서는 제외하고 원래 위치를 모르는 경우가 있으므로 문제.

  • 사용자 지정 XLSM 위치 옆에 CSV 파일을 만듭니다.

    CSV 파일의 위치는 NLOG 구성 파일에 지정되어 있으며 하드 코드 된 경로를 사용하도록 주변 구현을 변경하면 비용이 많이 듭니다. 이것이 내가 할 수 있었던 유일한 생각이지만, 다치게 될 것입니다.

  • 표준 위치에서 사용자 지정 위치에 대한 Windows 기반 하드 링크를 만듭니다.

    NTFS 파일 시스템에서 실행되고 있다고 가정 할 수 없습니다. 당신이 할 수있는 사용자 컴퓨터로 CSV 생성 프로그램을 포팅

답변

1

:

  • 대상 디렉토리에 대한 사용자 컴퓨터에 환경 변수를 설정; 예 : (cmd line) SET CSVPATH=C:\My\CSV
  • CSV 처리 XLSM의 매크로가 Environ() 함수를 사용하여이 환경 변수를 읽도록합니다. 예 : (VBA) 양자 택일 MyPath = Environ("CSVPATH") & "\"

, 그럴 수

  • 사용에 "설치 XLSM"는 SaveSetting
  • 을 사용하여 대상 컴퓨터의 레지스트리에 올바른 파일 경로 (들)을 쓸 수있는 디렉토리 선택 대화 상자
  • 당신의 CSV 처리 XLSM에서 매크로를 보자는 올바른 경로를 얻을 수있는 GetSetting() 기능을 사용하여 레지스트리를 읽을
+0

는'싸다는()'합리적으로 가까운 내 이상적인 솔루션. Ew, 레지스트리; 나는 그것이 가까운 초를 만들었다는 것을 믿을 수 없다. 많은 감사합니다. 컴파일러 플래그를보고 환경 변수를 생각조차하지 않았습니다. – Grault

+0

SaveSetting/GetSetting()은 환경 변수보다 최종 사용자로부터 약간 더 나은 것을 숨길 수 있습니다 (요구 사항 인 경우).키 (예 : 'HKEY_CURRENT_USER \ Software \ VB 및 VBA 프로그램 설정 \ [YourGroup] \ Settings \ [YourParam]')를 알고 있으면 regedit.exe를 통해 직접 패치 할 수 있으며 그렇지 않은 경우 해를 끼치 지 않습니다. – MikeD

관련 문제