paladinlzq
paladinlzq
2019-04-14 22:22

vba判断某单元格是否有边框时,返回错误的结果。

  • 开发语言
  • 小程序
  • microsoft

我不是专业程序员,可能问题比较愚蠢,但百度搜不到,只能求大大帮忙了。
1,描述问题
我有一张从某财务软件中导出的表格,为了操作这张表格,我写了一个sub遍历一系列单元格,返回最后一个拥有边框的单元格的行数。但是最终得到了错误的结果。
然而,我用同样的sub,自建一个测试表格,是可以获得正确的结果的。

会不会是财务软件里导出的表格有什么特殊的地方?

2,代码
'获取没有格式那一行的行数的函数
Function count(ByRef aimSheet As Worksheet) As Integer
Dim i As Integer
i = 7 '从第7行开始遍历,只要i行B列还有边框,行数统计+1,直到遇到没有边框的那一行为止
While aimSheet.Range("b" & i).Borders.LineStyle <> xlNone '
i = i + 1
Wend
count = i '返回最后有边框的行数
End Function

另外还有一个调用这个function的sub
Sub addSign() '增加表尾的功能

'打开文件选择框选择文件,并获取工作簿对象
Dim aimBook As Workbook
With Application.FileDialog(msoFileDialogFilePicker)
.AllowMultiSelect = False '单选择
.Filters.Clear '清除文件过滤器
.Filters.Add "Excel Files", "*.xls;*.xlsx" '设置文件过滤器
If .Show = -1 Then 'FileDialog 对象的 Show 方法显示对话框,并且返回 -1(如果您按 OK)和 0(如果您按 Cancel)。
Set aimBook = Workbooks.Open(.SelectedItems(1))
End If
End With

'定义工作表名字变量
Dim aimSheetName As String
'定义行数统计变量
Dim rowCount As Integer
'遍历所有工作表
For i = 1 To aimBook.Worksheets.count '从sheet1遍历到最后一张工作表
rowCount = count(aimBook.Sheets(i)) '召唤统计行数的Function
aimSheetName = aimBook.Sheets(i).Name
MsgBox aimSheetName & "表最后有边框的一行是第" & rowCount & "行"

If aimSheetName = "报表索引" Then GoTo Line1 '报表索引不需要操作
If aimSheetName = BKJ01 Or BKJ02 Or BKJ03 Then '当sheet名为这3个的时候
aimBook.Sheets(i).Cells(rowCount, 1) = "公司负责人: 主管会计工作负责人: 会计机构负责人: 会计主管: 复核人: 制表人:"
ElseIf aimSheetName = "BKJ1031" Then '这张表比较特殊
aimBook.Sheets(i).Cells(rowCount, 1) = "主管会计工作负责人: 会计机构负责人: 会计主管: 复核人: 制表人:"
ElseIf aimSheetName = "BKJ3001" Then '这张表比较特殊
aimBook.Sheets(i).Cells(rowCount, 1) = "主管会计工作负责人: 会计机构负责人: 会计主管: 复核人: 制表人:"
aimBook.Sheets(i).Range("a" & rowCount + 11, "d" & rowCount + 13) = ""
Else '其余的都这样
aimBook.Sheets(i).Cells(rowCount, 1) = "主管会计工作负责人: 会计机构负责人: 会计主管: 复核人: 制表人:"
aimBook.Sheets(i).Range("a" & rowCount + 1, "z" & rowCount + 10) = ""
End If
Line1: Next i

End Sub

3,报错
某sheet页作为参数传入,从第7行开始,一直到50行都有边框,但是,以上sub的返回值是7。而且所有的sheet页的返回值都是错的。 有的sheet只到几十行就没有边框了,但返回值却是300多。
但只有财务软件里导出的表格会有这样的错误,我自建一个新的表格做测试完全正常。

4,在百度上搜索了,找不到结果。自建新表格测试是正常返回的。

5,截图
这张sheet最后一行有边框的应该是51行,但返回值是错的。
图片说明
但是在另外一张测试表格里,返回值是正确的。
图片说明

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答