2017-03-08 4 views
0

これはダムに聞こえるかもしれませんが、私はvb.netにこの余分なコードを含める必要がある理由を説明することができます。これは、セルの色を変更するときにVBAでは不要です。 私は、microsoft.office.interopリファレンスを使用してExcelファイルを作成して保存するプログラムを作成しました。ここに私のコードは次のとおりです。私はもともとexcelsheet.Range("a1:B10").Interior.Color = を試してみましたが、色を設定しようとしたが、カラーpropteryが読み取り専用である持っていた色を設定する行でなぜvb.netとは異なるvb.netのセルの色を変更するコードですか?

Public Class Export_Excel_Class 
Public excelapp As Microsoft.Office.Interop.Excel.Application 
Public excelbook As Microsoft.Office.Interop.Excel.Workbook 
Public excelsheet As Microsoft.Office.Interop.Excel.Worksheet 

Public Sub newExcel() 

    excelapp = New Microsoft.Office.Interop.Excel.Application 
    excelbook = excelapp.Workbooks.Add() 
    excelsheet = excelbook.Sheets("sheet1") 
    excelsheet.Range("A1").Select() 
    excelsheet.Range("a1").AddComment("hello") 
    excelsheet.Range("a1:B10").Interior.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Yellow) 
    excelbook.SaveAs("C:\Users\DatOneBull\Desktop\Excel_Test") 
    excelapp.Quit() 

End Sub 

。私は解決策をオンラインで見つけましたが、説明はありませんでした。誰かがこのコードセクションが何を意味しているのか、それがなぜth範囲のカラー値を設定できるのか教えていただけますか?

System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Yellow) 
+0

明らかに、 'Color'プロパティはあなたが投稿したコードに設定しているので、読み取り専用ではありません。元の問題はおそらく、あなたが 'System.Drawing.Color'値をその型でないプロパティに代入しようとしていたことでしょう。その "余分なコード"は、適切な型の値、すなわち 'System.Drawing.Color'を表す' Integer'を作成しています。 – jmcilhinney

答えて

0

VB.NETは、VBAとは色が異なります。 ToOle関数は、VB.NETの色を同等のVBAバージョンに変換します。これはmarshallingの例です。

(興味のある方は、「トゥール」の「OLE」は、Windowsのプログラムが相互に通信するための古い方法である「オブジェクトのリンクと埋め込み」の略)

0

VBAで、あなたが設定します

Range("A1").Interior.Color = Excel.XlRgbColor.rgbYellow 
' Or 
Range("A2").Interior.Color = VBA.RGB(255, 255, 0) 

私は意図的にVBAコードを完全修飾しています。これは有効なVBAコードですが、めったに見られないスタイルです。

VB.Netではあなたはそれが好き行うことができます。

ws.Range("A1").Interior.Color = Excel.XlRgbColor.rgbYellow 
ws.Range("A2").Interior.Color = Microsoft.VisualBasic.Information.RGB(255, 255, 0) 

本質的に同じコードを。あるいは、あなたが現在やっているようにそれをすることができます。

ネットの効果は同じです。色を表す整数値がInterior.Colorプロパティに割り当てられています。関数を使用してその値を計算するか、定数を使用します。さまざまな.Net関数はVBA.RGB関数と同等です。 VBAはSystem.Drawing.Colorとして定義された色について何も知らないので、変換関数が必要です。

関連する問題