定义“最后一行”值(在每周增长的工作表上)并在 Range 对象中使用它

问题描述 投票:0回答:1

大家好,谢谢您的宝贵时间

我正在开发一种工具,旨在对大量原始数据进行大量格式化。数据大约有 86 列宽,固定在适当的位置并且不会增长。然而,行数大约为 176,000 行,并且每周增加数百行。

鉴于我的技术水平极低,我将手动格式化的过程记录为宏,并将其削减到大约 360 行代码。我意识到这可以更好地优化,但我只关心 Range() 对象的一个问题。

我的格式化使用自动填充工具做了很多工作,在录制的代码中它通常会这样读:

Selection.AutoFill Destination:=Range("J2:J176413")

问题是,随着原始数据表每周增长,最终 J 行的数字将大于 176413,并且宏不会自动填充或以其他方式格式化最新行。

为了解决这个问题,我通过在每个实例中手动将此行值增加到 250,000 来强制执行工具的第一个版本,这为我赢得了时间。例如:

Selection.AutoFill Destination:=Range("J2:J250000")

它可以工作,但效率相当低,并且会生成大量空白行,这只会减慢工作表的速度,特别是在应用过滤器后尝试向上滚动时。

我所追求的是在 Sub 开头将最后(最新)数据行定义为变量,然后在 Range 对象的整个宏中使用它,这样 AutoFill 就不会再进一步低于必要的水平。

我的愿望的伪代码说明是这样的:

Dim LastRowValue = Range("A1").SpecialCells(xlLastCell).Row

code code code

Selection.AutoFill Destination:=Range("J2:J**LastRowValue**")

这样它就知道每次自动填充的最后一行是什么,而不必每周手动更新宏,也不必使用任意大的数字来强制它。

我的技能非常有限,所以如果可能的话,我会寻求最短/最容易理解的解决方案 - 我已经对最终用户的宏进行了白痴防护(密码保护,在使用过程中锁定屏幕,很多错误故障保护)他们应该尝试任何愚蠢的事情吗)所以我不需要优雅,只需要简单

请提前感谢您!

以下失败尝试:

我尝试过这样定义最后一行,但似乎无法获得在 Range 对象内部使用它的正确语法

   Dim LastRowChecker As Long
   Dim LastColumnChecker As Long
   LastColumnChecker = Range("A1").SpecialCells(xlLastCell).Column


   Set LastRowChecker = Range("A1").SpecialCells(xlLastCell).Row
   Dim LastRowValue As Range
   Set LastRowValue = Cells(1, 1).Resize(LastRowChecker, LastColumnChecker)
   
   
   MsgBox LastRowValue

我似乎无法让 Range 对象使用 LastRowChecker,并且当我尝试借用设置为 Range 的 Dim 变量 LastRowValue 的值时,它会生成一个错误,可能是关于不匹配的变量类型

excel vba range row autofill
1个回答
0
投票

请尝试一下。

With ActiveSheet ' modify as needed '
    Dim LastRowValue as Long
    LastRowValue = .Cells(.Rows.Count, 1).End(xlUp).Row

    ' code code code

    Selection.AutoFill Destination:=Range("J2:J" & LastRowValue)
End With
© www.soinside.com 2019 - 2024. All rights reserved.