C#でWord VBAマクロをプラグインに変換しています。私がこれまでに成功したC#でのすべてのステートメント、メソッドとプロパティをリファクタリングしましたが、この1つは私の苦労を与えるC#でVBAを変換してもC#にループしますが、コンパイルエラーが発生します
:
For Each l In Application.Languages
If InStr(LCase(l.NameLocal), LCase(Language)) > 0 Then
Selection.LanguageID = l.ID
Exit For
End If
Next l
次のように私はC#で上記を変換した:
using Microsoft.Office;
using Microsoft.Office.Interop;
using Word = Microsoft.Office.Interop.Word;
Word.Application oWord = new Word.Application();
Word.Document oWordDoc = new Word.Document();
var Selection = oWordDoc.ActiveWindow.Selection;
string strTgtLanguage = "Hungarian";
foreach (var item in oWord.Application.Languages)
{
if (item.NameLocal.IndexOf(strTgtLanguage)>-1)
//The error is ---^ here on 'NameLocal'.
{
Selection.LanguageID = item.ID
//And here on 'ID' -----------------------^
break;
}
}
両方のインスタンスのコンパイラエラーがある:
'object'に 'NameLocal'の定義が含まれておらず、 'ObjectL'の最初の引数を受け入れる拡張メソッド 'NameLocal'が見つかりませんでした(usingディレクティブまたはアセンブリ参照がありません)
私はここで間違っていますか?私はforeach
ステートメントがコレクションからobject
を正しく宣言したと思った。
ありがとうございます。
、私はここに何かを参照してください信じていません。あなたのC#版の 'Application.Languages'はあなたのVB版のものと同じですか?彼らは同じ名前だと思うけど、彼らは同じタイプですか?それは何が間違っているように聞こえる。私は 'C言語で' oWord.Application.Languages'を参照してください、それはちょうど 'Application.Languages'でしょうか? –
1つのエラー 'Selection.LanguageID = l.ID'は' Selection.LanguageID = item.ID'である必要があります – Mostafiz
つまり、これは厳密には言語の問題ではないと思います。あなたは正しい構文を持っていて、あなたが期待していると考えて行動します。これはVBでも同様に問題になるので、あなたがそこに持っていたのと同じ方法でトラブルシューティングを行います。しかし、はい、Mostafizurのコメントも正しい - ちょうど2番目の誤植。 –