C# Excel VBA make module names not depended on the language -


excelfile.vbproject.vbcomponents.add(vbext_componenttype.vbext_ct_stdmodule); 

this code in english version of office creates module named: "module1". if office language different "module1" in language. need know how module called in code.

var standardmodule = excelfile.vbproject.vbcomponents.item("thisworkbook");     

the same problem here in english version of office "thisworkbook" exits, in language called differently.

it's possible make code language independent?

the first 1 easy - vbcomponents.add returns vbcomponent. can inspect .name property:

var module = excelfile.vbproject.vbcomponents.add(vbext_componenttype.vbext_ct_stdmodule); debug.writeline(module.name); 

the second 1 bit trickier. you'll need loop through of vbcomponents , test 2 things unique workbook object. have .type of vbext_ct_document , 134 properties in .properties collection default:

vbcomponent thisworkbook; foreach (var module in excelfile.vbproject.vbcomponents) {     var test = module vbcomponent;     if (test.type == vbext_componenttype.vbext_ct_document &&         test.properties.count == 134)     {         thisworkbook = test;         debug.writeline(thisworkbook.name);         break;     } } 

edit: linq solution looks this, it's possible leave dangling interop references way. if want try it, can't hurt - first place i'd if excel doesn't shut down properly:

var thisworkbook =     (excelfile.vbproject.vbcomponents).cast<vbcomponent>()         .first(x => x.type == vbext_componenttype.vbext_ct_document &&                     x.properties.count == 134); 

edit2: pointed out @mat'smug in comments, property count specific version - value above specific excel 2013. new workbook, thisworkbook module 1 highest property count. should work on version:

vbcomponent thisworkbook = null; foreach (var component in excelfile.vbproject.vbcomponents.cast<vbcomponent>()) {     if (thisworkbook == null || component.properties.count > thisworkbook.properties.count)     {         thisworkbook = component;     } } debug.writeline(thisworkbook.name); 

linq:

var thisworkbook =     excelfile.vbproject.vbcomponents.cast<vbcomponent>()         .aggregate((p, x) => (p.properties.count > x.properties.count ? p : x)); 

Comments

Popular posts from this blog

java - Jasper subreport showing only one entry from the JSON data source when embedded in the Title band -

serialization - Convert Any type in scala to Array[Byte] and back -

SonarQube Plugin for Jenkins does not find SonarQube Scanner executable -