我正在尝试开发一个Excel应用程序,要求我们的4D数据库获取信息。为此,我构建了一个查询构建器,它可以工作。现在我想让它更通用,这样当我调用查询构建器时,我可以传递一个范围,其中存储查询所基于的表和字段。这是一行我调用sub并传递参数:
QueryDatabase Worksheets("TablesAndFields").Range("A2:R20"), Worksheets("TablesAndFields"), Worksheets("Import")
这是sub中的第一行:
Sub QueryDatabase(QuerySpecs As Range, QuerySheet As Worksheet, TargetSheet As Worksheet)
我需要做的一件事就是让VBA找出各列中最后一个字段的行。这是我目前的代码:
LastRowReportTables = QuerySpecs.Offset(0, 3).End(xlDown).Row
LastRowQuery = QuerySpecs.Offset(0, 6).End(xlDown).Row
LastRowSort = QuerySpecs.Offset(0, 14).End(xlDown).Row
这将返回所有3个(范围的第二行)的相同值。无论哪个单元格中包含值,它似乎都会这样做。例如,在上面指定范围的情况下,它将返回3.如果范围是“A22:R40”,则返回23.我真正需要的是它返回相对于它在该范围内的位置的行,但是我如果有必要,可以通过减去比结果小20的最大倍数来伪造。 (我正在格式化我的查询构建器以适应19行+缓冲行。)到目前为止,我甚至无法让它返回LastRow变量的不同结果。
除了上面提到的Offset方法之外,我还尝试将其放入With QuerySpecs ... End With块。我不记得确切的结果,但我也无法做到这一点。
接下来我需要做的是从各种单元格中拉出值:
strStartCell = QuerySpecs.Offset(0, 18).Value
这会抛出运行时错误13:类型不匹配。有没有人对如何实现我的目标有任何建议?感谢您!
答案 0 :(得分:0)
我建议您阅读您尝试使用的资源的文档。
这可以通过在文档中选择要搜索的单词来完成,然后按[F1]键,将您带到Microsoft文档页面(即如果选择Row
并按[ F1]会将您带到页面Range.Row Property (Excel)。
阅读Row
和Offset
的文档将有助于您了解这些Range.Properties
以及您从代码中获得的回报。
要获取一列范围内的最后一个非空行,假设范围内的所有数据都是连续的(即在包含内容的行之间没有空单元格),请使用以下行:
With WorksheetFunction
LastRowReportTables = .CountA(QuerySpecs.Columns(4))
LastRowQuery = .CountA(QuerySpecs.Columns(7))
LastRowSort = .CountA(QuerySpecs.Columns(15))
End With
注意:如果" QuerySpecs" range
是一种数据库,字段中的所有列都应具有相同数量的记录,如果是这样,只应获取一个字段的最后一行。
要获取范围内单元格的值,请使用以下行:
这将返回QuerySpecs column
row
)18,range
13的值
strStartCell = QuerySpecs.Cells(13, 18).Value2
尝试将数组分配给字符串变量时会生成Run-time error 13: Type mismatch
。