2016-07-17 8 views
0

Excelを開いてワークブックを開き、特定のワークシートをアクティブに設定する(ユーザーの入力に応じて)関数を作成しました。機能...メソッドCの変数from関数を使用する#

public void openExcel() 
    { 
     var excelObj = new Microsoft.Office.Interop.Excel.Application(); 
     string fileName = @"C:\Users\" + userName + @"\Documents\Visual Studio 2015\Projects\ProgramForMom\ProgramForMom\bin\Debug\Excel Files\" + frm2.year.Text + " Expenses"; 
     Workbook wb = excelObj.Workbooks.Open(fileName, 0, false, 5, "", "", false, XlPlatform.xlWindows, "", true, false, 0, true, false, false);  
     wb.Activate(); 
     Microsoft.Office.Interop.Excel.Worksheet ws = wb.Worksheets[frm2.month.Text]; 
     ws.Activate(); 
    } 

私は、ワークシートの範囲を選択したいと考えている別の方法を持っている...

var cellValue = ws.Range["A10"].Value2; 

私は次のエラーを取得:

"The name 'ws' does not exist in the current context"

私はこのmsdnページを見てみましたが、それを理解するのが難しかったです(私はプログラミングに慣れていません) - https://msdn.microsoft.com/en-us/library/ms173114.aspx

私は約5種類の方法があります(ユーザーがWindowsフォームの異なるボタンをクリックしたときに基づいています)。同じ方法でExcelを開きたいが、それぞれ異なる方法を選びます。 5回書き直す以外にこれを行う方法はありますか?

ご協力いただければ幸いです。

+0

あなたは '文字列filename = System.IO.Pathにファイル名を簡素化することができます.GetFullPath(@ "Excel Files \" + frm2.year.Text + "Expenses"); ' – Slai

+0

@Slaiありがとう!私は別のコンピュータでそれを使用する方法を見つけ出したいと思っていました。あなたの提案は私のものよりずっと優れています。それは有り難いです。 – Michael

答えて

0

既存の方法を簡単に使用できます。ただ、それが開かれたワークシートを返してみましょう:

public Worksheet openExcel() 
{ 
    var excelObj = new Microsoft.Office.Interop.Excel.Application(); 
    string fileName = @"C:\Users\" + userName + @"\Documents\Visual Studio 2015\Projects\ProgramForMom\ProgramForMom\bin\Debug\Excel Files\" + frm2.year.Text + " Expenses"; 
    Workbook wb = excelObj.Workbooks.Open(fileName, 0, false, 5, "", "", false, XlPlatform.xlWindows, "", true, false, 0, true, false, false);  
    wb.Activate(); 
    Microsoft.Office.Interop.Excel.Worksheet ws = wb.Worksheets[frm2.month.Text]; 
    ws.Activate(); 
    return ws; // return the activated Worksheet 
} 

あなたは、あなたの他の方法でwsへの参照を使用することができます。

public void SomeMainMethod() 
{ 
    // open the worksheet 
    Worksheet ws = openExcel(); 

    // and use it anywhere 
    // invoke your other method(s) and provide the reference to 'ws' 
    YourOtherMethod(ws); 
} 
+0

うわー、ありがとう!私は2時間のようにそれを探しました。ありがとう、それは本当に、本当にシンプルで簡単になります! – Michael

+0

歓迎します:-) – khlr

+0

もう一度お悔やみして申し訳ありません。私がワークブックとワークシートの両方を返すことを希望したら、どうすればいいのか分かりますか?たぶんタプルがうまくいくのでしょうか? – Michael

2

ある関数の変数を別の関数で使用することはできません。

openExcel関数では変数が宣言されていますので、別の関数で使用する場合は2番目の関数で再度宣言する必要があります。

Microsoft.Office.Interop.Excel.Worksheet ws = wb.Worksheets[frm2.month.Text]; 
var cellValue = ws.Range["A10"].Value2; 

それとも、クラス内ではなく機能の外に、グローバル変数としてwsをdecalreことができ、それがアクセス可能で、このクラスの全機能に認識されます。

+0

これをクリアしていただきありがとうございます。あなたが気にしなければ質問があります。私は5つの異なる方法(ユーザーがWindowsフォームの異なるボタンをクリックしたときに基づいています)と同じ方法でExcelを開きたいが、それぞれ異なる方法を選択する方法のそれぞれがあります。 5回書き直す以外にこれを行う方法はありますか? – Michael

+1

@Michaelはい、メソッドを作成し、その中に共通ロジックを配置します。次に、5つのメソッドで呼び出すと、範囲 'ws'を返します。' public void'の代わりに 'public Range'か型が何であれ使用してください。 – user3185569

+0

誰かにグローバル変数を使うことを奨励するのは良い考えではないと思います... – khlr

関連する問題