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