用到的属性
Range.MergeArea,返回 Range 对象,代表包含指定单元格的合并的范围。如果指定的单元格不在合并的范围内,则该属性返回指定的单元格。只读。Variant类型。
Range.Address,以宏语言返回区域引用。String 类型,只读。如::$A$3:$A$10
o_xls.Visible = TRUE
o_xls.WindowState = -4140 //最小化
o_WorkBook = o_xls.Workbooks.Open(ls_FileName)
o_sheet = o_WorkBook.Sheets(4) //应付账款表
ll_RowCount = o_sheet.UsedRange.Rows.Count
//ls_Msg = ""
//ls_dyg = "A3"
//
//o_Range = o_sheet.Range(ls_dyg).MergeArea
//
//ls_AddRess = o_Range.Address //返回区域的范围:$A$3:$A$10
//
//wf_Get_Range_AddRess(ls_AddRess,ll_StartRow,ll_EndRow) //解析起始行号、结束行号的字符串
//
////获取起始行
//ls_Msg = ls_Msg + "起始行:" + String(ll_StartRow) + " ; "
//
//ls_Msg = ls_Msg + "结束行:" + String(ll_EndRow) + "~r~n"
//
//IF o_sheet.Range("A3").MergeCells = TRUE THEN
// MessageBox("A3","合并单据元格")
//ELSE
// MessageBox("A3","不是")
//END IF
FOR ll_Row = 3 TO ll_RowCount
ls_dyg = "A" + String(ll_Row)
IF o_sheet.Range(ls_dyg).MergeCells = TRUE THEN
ls_AddRess = o_Sheet.Range(ls_dyg).MergeArea.Address //获取合并单元格的范围,$A$3:$A$10
wf_Get_Range_AddRess(ls_AddRess,ll_StartRow,ll_EndRow) //解析地址范围,获取起始行号、结束行号
ls_gznr = o_Sheet.Range(ls_dyg).Value
ls_Msg = ls_Msg + "合并单元格【" + ls_dyg + " : " + ls_AddRess + "】:" + "起始行:" + String(ll_StartRow) + " ; 结束行:" + String(ll_EndRow) + " ; 挂账内容:" + ls_gznr + "~r~n"
ll_Row = ll_EndRow
ELSE
//非合并单元格
ls_gznr = o_Sheet.Range(ls_dyg).Value
ls_Msg = ls_Msg + "非合并单元格【" + ls_dyg + "】:"
ls_Msg = ls_Msg + "行:" + String(ll_Row) + " ; 挂账内容:" + ls_gznr + "~r~n"
END IF
NEXT
//关闭
o_WorkBook.Close(FALSE)
o_xls.WorkBooks.close()
o_xls.quit
destroy o_sheet
destroy o_workbook
destroy o_xls
fu_error(ls_Msg)
MessageBox("提示","测试结束")
解析区域范围字符串的函数
/*====================================================================
> Function: w_pzdr_yfzk.wf_get_range_address
>--------------------------------------------------------------------
> 描述: 获取区域的起始行和结束行,解析字符串:$A$3:$A$10
>--------------------------------------------------------------------
> 参数:
String ls_AddRess 区域范围的字符串,$A$3:$A$10
> ref long ll_startrow 引用方式,起始行号
> ref long ll_endrow 引用方式,结束行号
>--------------------------------------------------------------------
> 返回: (none)
>
====================================================================*/
long ll_IndexStart,ll_IndexEnd,ll_Len
String ls_StartRow,ls_EndRow
//第一个$的位置
ll_IndexStart = Pos( ls_AddRess,"$")
//第二个$的位置
ll_IndexStart = Pos( ls_AddRess,"$" , ll_IndexStart + 1 )
//":"的位置
ll_IndexEnd = Pos ( ls_AddRess,":", ll_IndexStart + 1 )
//起始行
ll_Len = ll_IndexEnd - ll_IndexStart - 1
ls_StartRow = Mid(ls_AddRess,ll_IndexStart + 1 ,ll_Len)
//第三个$的位置
ll_IndexStart = Pos ( ls_AddRess,"$",ll_IndexStart + 1 )
//第四个$的位置
ll_IndexStart = Pos ( ls_AddRess,"$",ll_IndexStart + 1 )
//结束行
ls_EndRow = Mid(ls_AddRess,ll_IndexStart + 1 )
//fu_error("【wf_Get_Range_AddRess : " + ls_AddRess + "】起始行号:" + ls_StartRow + " ; 结束行号:" + ls_EndRow )
ll_StartRow = long(ls_StartRow)
ll_EndRow = long(ls_EndRow)
本文介绍如何利用VBA的Range.MergeArea属性获取Excel单元格所在合并区域的起始行和结束行。通过Range.Address属性可以得到区域的宏语言表示,进一步解析此字符串以确定范围细节。
7081

被折叠的 条评论
为什么被折叠?



