以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  如何判断背景色不为空(有背景色)?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=172834)

--  作者:wcs
--  发布时间:2021/11/2 22:18:00
--  如何判断背景色不为空(有背景色)?
Dim Book As New xls.Book(“c:\\aaa.xlsx”) \' 定义一个XLS对象
Dim Sheet As xls.Sheet = Book.Sheets(0) \'定义一个sheet表
if Sheet(0,0).Style.BackColor.toARGB <> 16777215  then
........

这样的好像不行,有时会出现    “未将对象引用设置到对象的实例”   的错误。

--  作者:有点蓝
--  发布时间:2021/11/2 22:42:00
--  
Dim Sheet As xls.Sheet = Book.Sheets(0) \'定义一个sheet表
if Sheet(0,0).Style is nothing then
msgbox("没有样式")
else
对样式的处理
end if

--  作者:wcs
--  发布时间:2021/11/3 10:47:00
--  
这个没有样式,是只指没有背景色吗?
Style中,还有没有别的元素?比如文字颜色等等?
isnot nothing,可以吧?

--  作者:有点蓝
--  发布时间:2021/11/3 11:09:00
--  
没有样式不是指没有背景色,而是这个单元格没有设置过任何样式,包括颜色,边框等等等

有什么样式设置参考:

图片点击可在新窗口打开查看此主题相关图片如下:1.png
图片点击可在新窗口打开查看


--  作者:wcs
--  发布时间:2021/11/3 12:31:00
--  
知道了
现在我只想抓住是不是有背景色,这该如何判断为好呢?
一碰到没有填充色的单元格,就会现现  “未将对象引用设置到对象的实例” 的错误。
好像是说Sheet(0,0).Style.BackColor.toARGB  的值没有。

我的代码是找SHEET中有背景色的单元格,一找到没有背景色的单元格,上述代码就错了。

--  作者:有点蓝
--  发布时间:2021/11/3 13:42:00
--  
看2楼
--  作者:wcs
--  发布时间:2021/11/3 16:52:00
--  
那我把2楼的修改成这样的了,行吗:
Dim Sheet As xls.Sheet = Book.Sheets(0) \'定义一个sheet表
if Sheet(0,0).Style.BackColor is nothing then
msgbox("没有样式")
else
对样式的处理
end if

--  作者:有点蓝
--  发布时间:2021/11/3 17:28:00
--  
Dim Sheet As xls.Sheet = Book.Sheets(0) \'定义一个sheet表
if Sheet(0,0).Style is nothing then
msgbox("没有样式")
else
if Sheet(0,0).Style.BackColor .toARGB <> 16777215 then
xxxxxxxxxx
endif
end if

--  作者:wcs
--  发布时间:2021/11/3 23:34:00
--  
经测试,对于完全新建立的表,完全空的单元格
Sheet(0,0).Style is nothing     这样的判断仍是无用的,还是报错:“未将对象引用设置到对象的实例” 
是不是不能用is nothing?

如果我用其他的有内容的单元格,格式刷给这个完全空的单元格-保存,就不会在这儿报错了。

--  作者:有点蓝
--  发布时间:2021/11/4 8:48:00
--  
使用vba吧

Dim App As New MSExcel.Application
Dim Wb As MSExcel.WorkBook = App.WorkBooks.Open("D:\\问题\\aa.xlsx")
Dim Ws As MSExcel.WorkSheet = Wb.WorkSheets(1)
Dim Rg As MSExcel.Range = Ws.Cells(1,1)
With Rg.Interior
   Output.Show( .ColorIndex)
if .ColorIndex <> 16777215 then
msgbox(1)
end if
End With
App.quit