【问题标题】:Excel - delete columns but keep named rangeExcel - 删除列但保留命名范围
【发布时间】:2011-12-30 00:36:17
【问题描述】:

我的目标是有一个宏,它需要一周的数据,将摘要/总计粘贴到另一个工作表中,然后隐藏/删除我刚刚复制的那一周(或将其移动到不同的工作表,我不关心)。 到年底,你基本上应该每周都从Sheet1复制到Sheet2

目前我已将捕获周一至周五的单元命名为 - 我希望在宏运行后将其移动。

到目前为止我所拥有的......

Worksheets("Paste Stuff Here").Range("A1").Value = Worksheets("YearlyDaily").Range("oneweek incl total column").Value

Worksheets("YearlyDaily").Range("Mon-Fri").Select Selection.Delete Shift:=xlToLeft

【问题讨论】:

    标签: excel vba named-ranges


    【解决方案1】:

    您可以像定义它们一样更改命名范围

    Option Explicit 
    
    Sub NamedRange() 
    
        Dim Rng1            As Range 
    
         'Change the range of cells (A1:B15) to be the range of cells you want to define
        Set Rng1 = Sheets("Sheet1").Range("A1:B15") 
        ActiveWorkbook.Names.Add Name:="MyRange", RefersTo:=Rng1 
    
    End Sub 
    

    [Source]

    然而,正如其他答案所指出的,可能有其他(更好的)方法来处理这个问题。请告诉我们更多信息或提出一个包含更多信息的新问题,以便我们为您提供帮助。

    【讨论】:

      【解决方案2】:

      我知道这是一种很好的做法,但您是否有理由在周一至周五使用命名范围?如果您使用单元格引用,它们将始终指向同一区域,即使在删除之后也是如此。除非我错过了什么。不看你的专栏就很难看。

      【讨论】:

        【解决方案3】:

        我在这里假设您所说的“我希望在宏运行后移动它”的意思。是您希望命名范围移动。

        我有一个按周跟踪时间的电子表格,“第一个”工作表是活动工作表。一周结束后,我将整个活动表复制到新表中。我想要从前一周结转的总数,所以我保留了这些数据。我通过 3 列来做到这一点:当前周总计、旧(前几周)总计、新总计。我将值从新总计粘贴到旧总计。然后我清除用于输入的单元格。

        我的每一个本能都是(是)使用命名单元格,但在这种情况下,我认为这不是正确的做法。我只是使用了单元格范围(A1、K2:K0 等)。问题是名称不是每个工作表的本地名称,因此您必须将名称从旧工作表移动到新工作表,而这不是值得努力。此外,在这种情况下,创建每个工作表唯一的相似名称(例如,Mon-FriWeek1、Mon-FriWeek2 等)的替代方法不会让您在 Week1!A1:A10 等上获得任何实用的东西。-除了你使用“应该”的名字的自我满足感。反正这是我的看法!

        也许这可能会有所帮助:在我的电子表格中,可以从一周到下一周添加/删除行。为了允许这样做并且仍然避免命名范围,我模拟转到每行中都有一个公式的列,然后按 Shift + End 然后按向下箭头。选择将在最后一个输入内容的单元格处停止。这是代码(第一行是标题/标签):

            'Copy New Total Hours as PasteValues to Old Total
            Dim lastRow As Long
            Range("K1").Select
            Range(Selection, Selection.End(xlDown)).Select
            lastRow = Selection.Rows(Selection.Rows.Count).Row + 1
            Range("K2:K" & CStr(lastRow)).Select
            Selection.Copy
            Range("J2").Select
            Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
        

        您确实需要在其中保留至少一排,否则它(在我的情况下还有很多其他事情)不起作用。但这很适合我的需要。

        我希望这会有所帮助。

        【讨论】:

        • 请不要使用Select,除非它真的有必要(几乎从来没有)
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-07
        • 1970-01-01
        • 1970-01-01
        • 2020-10-16
        • 1970-01-01
        • 2019-12-05
        相关资源
        最近更新 更多