2017-12-29 22 views
4

이것은 틈새 문제이므로 최선을 다해 모든 것을 정의하려고 노력할 것입니다. Excel 2007을 사용 중입니다.Excel Interop을 사용하여 PERSONAL.xlsb를 수동으로 컴파일 할 때 VBA 매크로에 바로 가기 키를 지정 하시겠습니까?

저희 회사는 Excel 양식을 제작하는 데 Excel을 사용합니다. 우리는이 양식을 사용하는 많은 근로자가 있습니다. 보안상의 이유로 스프레드 시트에 매크로가 포함되는 것을 원치 않지만 VBA를 사용하여 일반 통합 문서의 데이터를 대량으로 수행해야합니다. 결과적으로 모든 매크로는 각 직원의 PERSONAL.xlsb 파일에 정의되며 일반 통합 문서에서 호출 할 수 있습니다. 이 통합 문서를 통해 많은 다른 매크로를 실행하기 때문에 호출하기위한 바로 가기가있는 것이 좋습니다. 여기서 볼 수 있듯이 바로 가기는 엑셀에 정의되어 있습니다 : Excel에서 자동으로 모든 파일을 엑셀 열 때마다 숨겨진 배경 통합 문서로이 열립니다 때문에

Assigning Macro Hotkeys

PERSONAL.xlsb 파일이 특별하다. 현재 통합 문서에서 매크로를 사용할 필요없이 현재 통합 문서의 PERSONAL.xlsb에서 사용자 정의 매크로를 호출 할 수 있으므로이 방법이 유용합니다.

.xlsb는 이진 확장 프로그램이며 일부 독점 Microsoft 압축 알고리즘을 사용합니다. 매크로와 VBA 코드를 작성하는 것은 Excel에 번들 된 VBA IDE를 통해 수행됩니다. 즉, 작성한 코드는 일반 텍스트로 저장되지 않으며 Excel은 .xlsb 파일의 이진 BLOB로 VBA 코드를 읽거나 쓰는 중개자 역할을합니다.

우리는 많은 매크로를 사용하기 때문에 (추가 할 계획이 있습니다.) 내가 선택한 편집기에서 일반 파일로 코딩하고 git을 사용하여 변경 사항을 추적하는 것이 매우 유용 할 것입니다. 이상적으로, 각 매크로를 논리적으로 분리하기 위해 여러 .vba 파일을 가진 개발 폴더를 원합니다. 그런 다음 .vba 코드 모듈 각각에 선택적 바로 가기 키를 정의하는 일반 텍스트 구성 파일이 필요합니다.

변경 사항이 만족 스럽다면 Microsoft Excel Interop을 사용하여이 파일을 모두 최신 PERSONAL.xlsb 파일로 컴파일하여 다른 직원들에게 쉽게 보낼 수있는 프로그램을 실행하고 싶습니다. 거의 모든 것을 구현했지만 바로 가기 키를 코드 모듈에 할당하는 방법을 알 수 없습니다.

using Microsoft.Office.Interop.Excel; 
using Microsoft.Vbe.Interop; 
using System; 
using System.IO; 

namespace BinaryCompile 
{ 
    class Program 
    { 
     private static string path = @"C:\Users\Path\To\Source"; 

     static void Main(string[] args) 
     { 
      var excel = new Microsoft.Office.Interop.Excel.Application(); 
      //Console.WriteLine(path); 
      var workbook = excel.Workbooks.Add(); 

      var project = workbook.VBProject; 

      include_files(get_vba_files(), ref project); 

      excel.MacroOptions(); 

      workbook.SaveAs(path + "/PERSONAL.xlsb", XlFileFormat.xlExcel12); 
      workbook.Close(); 

      Console.Read(); 
      excel.Quit(); 

     } 

     static string[] get_vba_files() 
     { 
      return Directory.GetFiles(path, "*.vba"); 
     } 

     static void include_files(string[] vba_files, ref VBProject project) 
     { 
      foreach (string source in vba_files) 
      { 
       var module = project.VBComponents.Add(vbext_ComponentType.vbext_ct_StdModule); 
       module.CodeModule.AddFromFile(source); 
       module.Name = Path.GetFileNameWithoutExtension(source); 

      } 
     } 
    } 
} 

내가이 프로그램 적으로 생성 모듈에 바로 가기 키를 할당하는 방법에 대한 문서를 찾을 수 없습니다

는 여기에 .xlsb 파일에 VBA 파일을 컴파일 내 예제 코드입니다.

답변

0

vba 파일을 자유롭게 수정할 수있는 경우이 옵션 중 하나입니다.

Attribute VB_Name = "MyModule" 
Sub MyFunction() 
Attribute MyFunction.VB_ProcData.VB_Invoke_Func = "y\n14" 
    'Do Your stuff 
End Sub 

Sub MyFunction2() 
Attribute MyFunction2.VB_ProcData.VB_Invoke_Func = "q\n14" 
    'Do more stuff 
End Sub 

이 바로 가기 키가 될 것입니다 "y\n14""q\n14"의 첫 번째 문자가

를 사용하는 : 당신은 Excel에서 매크로를 만들 경우,이 파일은 다음과 같은 구조를 가지고 볼 수있는 바로 가기를 할당 한 다음 모듈을 수출 이 경우 키가 Ctrl이고이 경우 Ctrl + yCtrl + q입니다.

사이드 노트 : 코드를 시험해 보았는데 excel.MacroOptions(); 행만 제거하면 작동하도록 만들 수있었습니다.