2016-04-12 11 views
0

私はC#2に変換しようとしているExcelのマクロを持っていますが、私はこの部分変換する方法を知らないのマクロエクセル:私はいくつかの方法を試してみました同等のC#

Dim Files As Variant 
Dim glos As Integer 
Dim Sheet1 As Object 
Dim Un As Workbook 

Files = Application.GetOpenFilename("Excel Files (*.xlsx), *.xlsx", 2, "Open Files", , True) 
If IsArray(Files) Then 
    'Something with some data 
    For y = LBound(Files) To UBound(Files) 
     Workbooks.Open Files(y) 
     b = ActiveWorkbook.Name 
     glos = glos + 1 
     For Each Sheet1 In ActiveWorkbook.Sheets 
      Sheet1.Copy after:= Un.Sheets(Un.Sheets.Count) 
     Next 
     Workbooks(b).Close False 
    Next 
End IF 

を、しかしdoesnの「トンの仕事、よく私はC#で、これまでにこれを持っている:

var excelApp = new Excel.Application(); 
Excel.Workbook oWB = excelApp.Workbooks.Add(Type.Missing); 

dynamic Files = oWb.Application.GetOpenFilename("Excel Files (*.xlsx), *.xlsx", 2, "Select Files", Type.Missing, true); 
if (Files is Array) 
{ 
    //Something with some data 
    Array ar = (Array)((object)Files); 
    for(int y = ar.GetLowerBound(1); y < ar.GetUpperBound(1); y++) 
    { 
     oWB.Application.Workbooks.Open(ar[y]); 
     b = excelApp.ActiveWorkbook.Name; 
     glos += 1; 
     foreach(Excel.Sheets Sheet1 in excelApp.ActiveWorkbook.Sheets) 
     { 
      Sheet1.Copy(After: Un.Sheets[Un.Sheets.Count]); 
     } 
     ExcelApp.Workbooks[b].Close(false); 
    } 
} 

私はC#に私の仕事で使ういくつかのマクロを翻訳自分のスキルを向上しようとしているが、私はこの1つで動けなく、申し訳ありません悪い英語、私はまだ言語を学んでいます。

ありがとうございます。

+2

を使用して対処することができるが、問題文のではありません。エラーメッセージが表示されますか?彼らは何ですか?これらのエラーメッセージが表示されるのはどのコードですか? –

+0

ええ、そうです、申し訳ありませんが、コードエラーが発生します。「[配列]型の式にindenxingを適用できません」 – MeLop

+0

どのコード行ですか? –

答えて

1

Arrayは、C#の特別な種類のクラスであり、VBA配列と同じではありません。あなたがArrayを使用する場合は、このように、個々の要素に対処する必要があります:Arrayクラスの

ar.GetValue(y).ToString(); 

詳しい情報はMSDNドキュメントに記載されています。 C#には配列の概念があります - 非大文字に注意してください。それは、より多くのように宣言されています:

string[] ar = new string[iNumberOfMembers]; 

そして、それは「それは動作しません」ar[y]