因此,我尝试使用VBA将表单中的可填充字段设置为“允许的编辑范围”x1c 0d1x
表单上的大多数字段都是合并的,这样我就可以循环执行get a selection,然后选择/取消选择单元格,直到达到所需的精确集合。
但是,范围定义如下所示$E$24:$G$24,$E$25:$G$25,$E$26:$G$26,$E$27:$G$27,$J$24:$L$24,$J$25:$L$25,$J$26:$L$26,$J$27:$L$27,$O$24:$Q$24,$O$25:$Q$25,$O$26:$Q$26,$O$27:$Q$27
由于我在这个表单上有更多的字段,这成为一个问题,因为“允许的编辑范围”最多只能达到254个字符。
我想要的是这样一个较短范围的定义
E24:G27,J24:L27,O24:Q27
然后我可以将其添加到“允许编辑范围”中
目前,我正在遍历表单中的每个单元格,并联合任何合并的单元格
Sub SelectMergedCells()
Dim scan_range As Range
Dim cell As Range
Dim merge_range As Range
Set scan_range = ActiveSheet.Range("B11:AM69")
For Each cell In scan_range
If cell.MergeCells Then
If merge_range Is Nothing Then
Set merge_range = cell
Else
Set merge_range = Union(merge_range, cell)
End If
End If
Next cell
merge_range.Select
End Sub
是否有更好的方法来选择单元格?是否有方法将选择定义缩短?或者是否必须将定义分解为多个254个字符块并添加多个范围?
短暂性脑缺血发作
1条答案
按热度按时间omvjsjqw1#
如果我理解正确,如果您不介意使用选择......这是对这句话的回答:
我想要的是这样一个较短范围的定义
因此,也许您想看看下面的代码来帮助您入门....
工作表中的合并单元格是这样的(请忽略填充颜色,因为它们用于更容易地查看合并范围)。
预期结果:
F3:H3,H5:J6,F7:G7,A7:C8,I8:J11,E9:G11,A2:C4,F2:G2
所以在我宏记录了我的手动过程之后,我对它做了一些修改,
代码是这样的:
调试打印结果与预期结果相同:
F3:H3,H5:J6,F7:G7,A7:C8,I8:J11,E9:G11,A2:C4,F2:G2
基本上,sub是循环到一个合并为c变量的单元格。
使用与本例类似的合并单元格进行测试:
调试打印结果如下:
A2:C5,F2:H5,K2:M5
由于我在这个表单上有更多的字段,这成为一个问题,因为"允许的编辑范围"最多只能达到254个字符。
刚才我测试了rg为A1:AQ75的代码(乘以已有的合并单元格),虽然
rgU.select
显示了正确的结果,但是很抱歉,debug.print rgU.address
只到了单元格R17。因此,即使这个
$E$24:$G$24,$E$25:$G$25,$E$26:$G$26,$E$27:$G$27
字符串已经像E24:G27
这样缩短,我的代码仍然是无用的,因为我认为如果合并单元格的范围太大(在我的情况下是单元格AQ75,在您的情况下是单元格AM69),它仍然无法显示地址,直到合并单元格的最后一列和最后一行。因此,需要在rgU内循环以获取所有合并单元地址:
for each cell in rgU.areas:debug.print cell.address:next
最后一个循环结果为
$AO$97:$AQ$75
顺便说一句,关于允许的编辑范围,你不能只使用你的
merge_range
变量作为引用而不需要它的地址吗?