2011-08-08 13 views
0

私は:これらのVB.Netスニペットを1行に減らすことはできますか?

  • スニペット1:

    For Each sheet In WB.Sheets 
        wbSheetNames.Add(sheet.Name) 
    Next sheet 
    
  • スニペット2:

    For i = 0 To sheetNames.Count - 1 
        wb.Sheets(i + 2).Name = sheetNames(i).Replace(currMonth, nextMonth) 
    Next 
    
  • スニペット3:

    For Each cell In row 
         If cell.Formula.Contains(nameString) Then 
          downRange(sheet, cell.Address()).Value = downRange(sheet, cell.Address()).Value 
         End If 
    Next cell 
    
  • スニペット4:

    For Each sheet In sheetsToDelete 
        sheet.Activate() 
        sheet.Delete() 
    Next sheet 
    

は1行でこれらを行うことができますいくつかの構築物または方法はありますか?

注:
すべてのスニペットは異なるので、クラブに入れないでください。これらは、これらの単純な作業をよりスマートに行う方法があると思う状況です。

+1

すべての文を ':'で区切って1行に入れます。 –

+0

それは良いヒントですが、これは私が意味するものではありません! –

答えて

0

したがって、テンプレートを減らす方法はありませんでした。

一部の場所では:トリックを使用しました。

0

ForEach拡張メソッドを使用できます。

+0

はいくつかのコードを示しています。私はこれを行うことができるいくつかの既存の構造があることを知っていますが、それらを使用する方法がわかりません。 –

1

いくつかのLINQを使用すると、それらのうちのいくつかを使用する可能性がありますが、そのほとんどはあまり読みにくくありません。仕事を終わらせるだけでなく、保守性のためのコードを書くべきです。パフォーマンスについて考えているなら、できるだけ少ない行を使うことは、最適化のための良い指標ではありません。単独で

スニペット1はwbSheetNamesを仮定して、単一の行に減らすことができた文字列のリストである:

wbSheetNames.AddRange(WB.Sheets.Select(Function(x) x.Name)) 

改善?あんまり。あなたは、のようなものを使用することにより、スニペットの一部ではないリストの割り当てを削除することができます:

wbSheetNames = WB.Sheets.Select(Function(x) x.Name).ToList() 

これは間違いなく、オリジナルを超えるわずかな改善です。

つまり、スニペット1と2を組み合わせて一時的なリストの割り当てを保存できるようです。しかし、コードの正確な意図は私には分かりません。途中で2枚追加していますか?そうでなければ、私はwb.Sheets(i + 2)が範囲外に出ると思います。

+0

いいえ、すべてのスニペットが異なり、組み合わせることはできません。 –

+0

私は、プロがやるような、よりスマートな方法で、これらの単純な明白なタスクを実行したいと思います。 –

+0

vb.netには、これらの明白な作業をより直接的に行うことができる構造が必要であると私は感じています。 –

関連する問題