首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Excel重置"UsedRange“

Excel重置"UsedRange“
EN

Stack Overflow用户
提问于 2016-03-02 15:41:01
回答 14查看 62.6K关注 0票数 9

不知道我错过了什么,但我看到张贴的例子似乎不起作用。

我从web查询中导入数据。在重新查询时,我将查询设置为清除未使用的单元格。

我使用这些导入的数据来生成一个可变长度的报告。

但是,如果用户(在我的情况下需要这样做)插入行,那么ActiveSheet.UsedRange将被展开。这意味着,当执行新的查询时,我再也不能只执行"Ctrl-End“来查找数据集中的最后一行。

我可以使用ActiveSheet.UsedRange.Clear轻松清除任何数据。但是,如果前面的查询生成了2或3页的报告,那么即使数据较少,后续的任何查询也会很长,因为"UsedRange“仍然指向最后一行。

下面的例子如下

代码语言:javascript
运行
复制
ActiveSheet.UsedRange
ActiveSheet.UsedRange.Clear
a = ActiveSheet.UsedRange.Rows.Count

不要重置范围。

MS将UsedRange定义为readOnly属性。

它似乎需要发生的是一个“文件保存”,以完成操作。

代码语言:javascript
运行
复制
ActiveWorkbook.Save

有一篇文章指出,在较早版本的Excel中,您还必须关闭工作簿并重新打开它才能完成操作。

我想知道1.这个行为改变的版本截止点是什么? 2.是否有其他方法使用VBA宏来重置范围?

EN

回答 14

Stack Overflow用户

回答已采纳

发布于 2016-03-10 12:17:59

我反复检查以确保所有的最新补丁和服务包已经安装完毕,而且它们已经安装完毕。

我正在运行Windows 10和Excel 2016版本16.0.6568.2034

我发现范围只会用

代码语言:javascript
运行
复制
ActiveSheet.UsedRange.Clear

最重要的是

代码语言:javascript
运行
复制
ActiveWorkbook.Save

如果没有保存命令,范围就不会重置。

票数 -4
EN

Stack Overflow用户

发布于 2019-02-21 14:02:40

我只需要在删除行后使用Worksheets("Sheet1").UsedRange.Calculate来重置范围。

票数 7
EN

Stack Overflow用户

发布于 2018-02-16 13:52:14

为我工作的最佳代码:

代码语言:javascript
运行
复制
Sub DeleteUnused()
Dim myLastRow As Long
Dim myLastCol As Long
Dim dummyRng As Range
Dim AnyMerged As Variant
'http://www.contextures.on.ca/xlfaqApp.html#Unused
'Helps to reset the usedrange by deleting rows and columns AFTER your true used range

    'Check for merged cells
    AnyMerged = ActiveSheet.UsedRange.MergeCells
    If AnyMerged = True Or IsNull(AnyMerged) Then
        MsgBox "There are merged cells on this sheet." & vbCrLf & _
               "The macro will not work with merged cells.", vbOKOnly + vbCritical, "Macro will be Stopped"
        Exit Sub
    End If

    With ActiveSheet
        myLastRow = 0
        myLastCol = 0
        Set dummyRng = .UsedRange
        On Error Resume Next
        myLastRow = _
        .Cells.Find("*", after:=.Cells(1), _
                    LookIn:=xlFormulas, lookat:=xlWhole, _
                    searchdirection:=xlPrevious, _
                    searchorder:=xlByRows).Row
        myLastCol = _
        .Cells.Find("*", after:=.Cells(1), _
                    LookIn:=xlFormulas, lookat:=xlWhole, _
                    searchdirection:=xlPrevious, _
                    searchorder:=xlByColumns).Column
        On Error GoTo 0

        If myLastRow * myLastCol = 0 Then
            .Columns.Delete
        Else
            .Range(.Cells(myLastRow + 1, 1), _
                   .Cells(.Rows.Count, 1)).EntireRow.Delete
            .Range(.Cells(1, myLastCol + 1), _
                   .Cells(1, .Columns.Count)).EntireColumn.Delete
        End If
    End With

End Sub
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35751754

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档