I’m using PowerPoint extensively in multiple languages, and I have a macro that changes the language of each box across the presentation. I call the macro with an argument from the Ribbon, passing the argument as a Tag (as I haven’t found any other working method, I can’t just call sub(argument) in the Ribbon XML). The problem is, that it only works, when I use an explicit numeric argument (ID of a language), and can’t use the name from msoLanguageID enum.
Public Sub langChange(control As IRibbonControl) Call Macros.ChangeSpellCheckLang(control.Tag) End Sub
And the final procedure:
Sub ChangeSpellCheckLang(lang As Integer) (...) .Text.Range.LanguageID = lang End Sub
This works, but if I change the tag from 2057 to msoLanguageIDEnglishUK I get an error (13) Type mismatch. I tried changing the final procedure to lang as String or Variant, but I keep getting the same error. I know that msoLanguageIDEnglishUK would work, as previously my final procedure didn’t use an argument – instead I just explicitly set …Text.Range.LanguageID = msoLanguageIDEnglishUK and it worked.
So, how can I avoid hardcoding language IDs, while still being able to pass them as arguments for the procedure from the Ribbon?