【问题标题】:Create a range using named cells使用命名单元格创建范围
【发布时间】:2016-09-02 16:42:03
【问题描述】:

我需要使用 vba 中的命名单元格创建一个范围。

到目前为止,我有以下不起作用;

Dim pasteRange As Range
Set pasteRange = Range(firstRow, 11)

pasteRange.Value(11) = slabTemplateSheet.Range("slabTemp").Value(11)

firstRow 是一个整数。 slabTemplateSheet 是指工作表,slabTemp 是该工作表中的命名范围。

我认为这会相当简单,因为我的粘贴范围只有 1 行和 11 列(即一行 11 个单元格),但我无法让它工作。

在你的回答中,假设有一个,你能否也请给我粘贴多行和多列的能力,例如,如果slabTemp 指的是 A1:F16

编辑:我没有说清楚我要做什么。

我在工作表slabTemplateSheet 中有一个名为slabTemp 的命名范围。在另一张表中,我想复制该范围,包括格式,然后粘贴它。我听说使用复制/粘贴功能很慢,所以我发现上面的属性据说做同样的事情但速度更快(我还没有测试过)。来源,Durgesh 在这里的回答:fast way to copy formatting in excel

在新工作表中,我需要将其粘贴到要创建的范围内(这是我不知道该怎么做的)

所以 Range(firstRow, 11) 是指保存为 firstRow 的整数(行号),11 是列号。但这不起作用。

我想我的问题是,我如何使用名称而不是说 Range("A1:G6") 创建一个范围,而不是 Range(firstRow1:secondRow:6)

再次感谢!

【问题讨论】:

标签: vba excel named-scope


【解决方案1】:

这是一个工作示例。

Public Sub CopyRange()
    'Define the Copy Range
    Dim CopyRange As Range: Set CopyRange = Range("MyCustomRange")
    'Define the range to Paste Value to
    Dim PasteRange As Range: Set PasteRange = Range("MyOtherCustomRange")
    'Move the Copy Range into the Paste Range
    'You don't need to specify the sheet name, the Defined named holds that information
    'Important: The ranges should be the same size, otherwise you may get an error
    PasteRange.Value() = CopyRange.Value()
End Sub

【讨论】:

    【解决方案2】:

    关于如何创建命名范围(工作表范围,不适用于您的代码的工作簿),请使用以下代码。不确定您要在这一行中实现什么目标:

    pasteRange.Value(11) = slabTemplateSheet.Range("slabTemp").Value(11)
    

    无论如何,这是命名范围的代码:

    Sub UseNamedRange()
    
    Dim slabTemplateSheet       As Worksheet
    Dim pasteRange              As Range
    
    Set slabTemplateSheet = Sheets("Sheet1")
    
    ' create the Named Range "slabTemp" (Named Range for Worksheet)
    ' you can manualy (or with variables) modify the Range("A1:F16")
    slabTemplateSheet.Names.Add "slabTemp", Sheets("Sheet1").Range("A1:F16")
    Set pasteRange = slabTemplateSheet.Range("slabTemp")
    
    End Sub
    

    【讨论】:

      【解决方案3】:

      您似乎没有尝试传输单元格的 xlRangeValueXMLSpreadsheet XlRangeValueDataType enumeration;而是听起来你想要连续 11 个单元格。

      with slabTemplateSheet.Range("slabTemp")
          pasteRange.Resize(1, 11) = .Cells.Resize(1, 11).Value
      end with
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-02-03
        • 1970-01-01
        • 1970-01-01
        • 2022-01-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多