我有一个VBA函数:
Private Function getRowIdentifier(ByRef tbl As ListObject, ByVal tableRowIndex As Long, ByVal delimiter As String) As String
Dim rng As Range
Dim rowId As String
Set rng = tbl.ListRows(tableRowIndex).Range
rowId = Join(Array(rng(1, 1).Value, rng(1, 2).Value, rng(1, 3).Value, rng(1, 4).Value, rng(1, 6).Value, rng(1, 7).Value), delimiter)
getRowIdentifier = rowId
End Function该函数使用表格行的单元格1、2、3、4、6、7,其中参数为tbl和tableRowIndex。单元格由参数delimeter (在我的例子中,我使用#;#__)删除,并连接在一个大字符串中,然后返回。这串线在开头和结尾都没有标度。
然后,我将一个表tbl (如下面所示的行)提供给我的函数getRowIdentifier()

我的功能变得狂暴..。
当我在每一行上调试函数时,Join() (链接)函数在字符串中连接的最后一个子字符串总是布尔值,而不是行的列7中列出的字符串.
这是rowId,当我将1行提供给我的函数时:
LU3707-E01#;#Blending_1#;##;##;#Blending#;#True这是rowId,当我将2行提供给我的函数时:
LU3707-E01#;#Screening milling_2#;##;##;#Screening Milling#;#True这是rowId,当我将3行提供给我的函数时:
LU3707-E01#;#Blending_3#;##;##;#Blending#;#True这是什么原因?
ADD:
我发现,如果像这样更改使用Join()函数的行(我添加了表的所有列)
'rowId = Join(Array(rng(1, 1).Value, rng(1, 2).Value, rng(1, 3).Value, rng(1, 4).Value, rng(1, 6).Value, rng(1, 7).Value), delimiter)
rowId = Join(Array(rng(1, 1).Value, rng(1, 2).Value, rng(1, 3).Value, rng(1, 4).Value, rng(1, 5).Value, rng(1, 6).Value, rng(1, 7).Value, rng(1, 8).Value, rng(1, 9).Value), delimiter)然后,rowId for 1行如下所示:
LU3707-E01#;#Blending_1#;##;##;#1#;#Blending#;#True#;##;#然后,rowId for 2行如下所示:
LU3707-E01#;#Screening milling_2#;##;##;#2#;#Screening Milling#;#True#;#LU3707-E01#;#Blending_1然后,rowId for 3行如下所示:
LU3707-E01#;#Blending_3#;##;##;#3#;#Blending#;#True#;#LU3707-E01#;#Screening milling_2因此,看起来表的索引似乎混合了,而rng(1, 7)实际上是针对列“忽略验证”(最后一列)。
这怎麽可能?是否有可能创建了表,然后有人将“忽略验证”列移到表的右侧?这是如何做到的呢?我想知道,因为我想把它搬回来。
发布于 2022-06-07 14:04:31
我找到了答案。问题是列J是隐藏的。后来我发现M列也是隐藏的。问题是,这些隐藏的列在图像中标记了一个几乎不明显的指示符:

https://stackoverflow.com/questions/72530379
复制相似问题