Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么vb.net中更改单元格颜色的代码与vba不同?_Vb.net_Excel_Vba - Fatal编程技术网

为什么vb.net中更改单元格颜色的代码与vba不同?

为什么vb.net中更改单元格颜色的代码与vba不同?,vb.net,excel,vba,Vb.net,Excel,Vba,这听起来可能很愚蠢,但有人能解释一下为什么我需要在vb.net中包含在VBA中更改单元格颜色时不需要的额外代码吗。 我编写了一个程序,使用microsoft.office.interop引用创建并保存excel文件。这是我的密码: Public Class Export_Excel_Class Public excelapp As Microsoft.Office.Interop.Excel.Application Public excelbook As Microsoft.Office.Int

这听起来可能很愚蠢,但有人能解释一下为什么我需要在vb.net中包含在VBA中更改单元格颜色时不需要的额外代码吗。 我编写了一个程序,使用microsoft.office.interop引用创建并保存excel文件。这是我的密码:

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
在设置颜色的行上,我最初尝试了
excelsheet.Range(“a1:B10”).Interior.color=
并尝试设置颜色,但颜色属性为只读。我在网上找到了解决方案,但没有解释。有人能告诉我这段代码是什么意思吗?为什么它可以设置th范围的颜色值

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

VB.NET存储的颜色与VBA不同。
ToOle
函数将VB.NET颜色转换为等效的VBA版本。这是一个例子


(如果您感兴趣,“ToOle”中的“OLE”代表“对象链接和嵌入”,这是windows程序相互通信的一种较旧方式)

在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
的颜色一无所知,因此需要一个转换函数。

显然
Color
属性不是只读的,因为您在发布的代码中设置了它。最初的问题可能是您试图将
System.Drawing.Color
值分配给非该类型的属性。该“额外代码”正在创建一个适当类型的值,即表示所需的
System.Drawing.Color