Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA将命名单元格从一张图纸复制并粘贴到另一张图纸,保留名称_Excel_Vba - Fatal编程技术网

Excel VBA将命名单元格从一张图纸复制并粘贴到另一张图纸,保留名称

Excel VBA将命名单元格从一张图纸复制并粘贴到另一张图纸,保留名称,excel,vba,Excel,Vba,有没有办法复制一个命名的单元格并将其粘贴到新的工作表中,然后将其名称转移过来?比如说,我有一个5000本书的列表,我想对它进行索引,这样人们就不必滚动浏览4950本书就能到达“Z”部分,他们只需点击一个链接,它就会将他们带到命名的单元格“section_Z” 使用一张工作表很容易,但我在VBA中为每个循环使用一个,从主列表中获取特定项目,并根据一些标准将它们划分为三张单独的工作表。每个单独的工作表都必须有一个与上述用例类似的索引,因此当名为“Section_Z”的单元格复制到Sheet2时,它的

有没有办法复制一个命名的单元格并将其粘贴到新的工作表中,然后将其名称转移过来?比如说,我有一个5000本书的列表,我想对它进行索引,这样人们就不必滚动浏览4950本书就能到达“Z”部分,他们只需点击一个链接,它就会将他们带到命名的单元格“section_Z”

使用一张工作表很容易,但我在VBA中为每个循环使用一个
,从主列表中获取特定项目,并根据一些标准将它们划分为三张单独的工作表。每个单独的工作表都必须有一个与上述用例类似的索引,因此当名为“Section_Z”的单元格复制到Sheet2时,它的名称和相对位置也将被复制以反映Sheet2

这就是我到目前为止所做的:

 'for loop starts going through the master list

    for Each RowCount In Worksheets("Master List").ListObjects("MasterListTable").Range.Rows

    'if statements determine the category that the product should be placed in based on Category column G.

    If Cells(RowCount.Row, 7).Value Like "Retail*" Then
    TotalRowsRetail = TotalRowsRetail + 1

     'copy the row
       RowCount.EntireRow.Copy

       'select the retail sheet and paste the row corresponding with the current iteration (this does not look for the next blank row because this macro is intended to be run occasionally to totally refresh the sheets)

        Worksheets("Retail").Select
        Worksheets("Retail").Range("A" & TotalRowsRetail).Select
        ActiveCell.Offset(1, 0).Select

        ActiveCell.PasteSpecial xlPasteValues





     ElseIf Cells(RowCount.Row, 7).Value Like "Corporate*" Then
    TotalRowsGroup = TotalRowsGroup + 1
       RowCount.EntireRow.Copy

        Worksheets("Corporate").Select
        Worksheets("Corporate").Range("A" & TotalRowsCorporate).Select
        ActiveCell.Offset(1, 0).Select

        ActiveCell.PasteSpecial



        Worksheets("Master List").Select


    Next RowCount

    'after the for each loop runs the tables in the retail and corporate sheets are resized to match the amount of data pasted in

    Worksheets("Retail").Select
     ActiveSheet.ListObjects("RetailTable").Resize Range("$A$10:$G$" & TotalRowsRetail + 1)
     Worksheets("Corporate").Select
     ActiveSheet.ListObjects("CorporatepTable").Resize Range("$A$10:$G$" & TotalCorporateGroup + 1)

上面的宏工作得很好,我发布它只是为了尝试给我正在尝试做的事情提供一些上下文,这实际上不仅仅是复制单元格格式,即'ActiveCell.pasteValues',还可以粘贴任何命名的单元格。

经过大量搜索,我能够拼凑出一个解决方案

    On Error Resume Next
    ActiveWorkbook.Names.Add Name:=Worksheets("Master List").Cells(RowCount.Row,_
     1).Name.Name & "_retail", RefersTo:=RetailSheet & intCount

   intCount = intCount + 1
我们在工作簿中添加了一个新名称
ActiveWorkbook.Names.Add
该名称来自另一张工作表上的现有名称
name:=工作表(“主列表”)。单元格(RowCount.Row,1)。name.name&“\u retail”
和“\u retail
确保新名称不会覆盖旧名称,因为我希望它在同一张工作表上

referesto:=RetailSheet&intCount
设置新单元格的地址(
RetailSheet
只是一个字符串
=Retail!$a$
intCount
确保行与零售工作表上的行相对,而不是与主工作表相对


出错时继续下一步
如果单元格未命名(大多数单元格未命名),则只移动到下一行。

仅描述很难理解,听起来很模糊。能否提供包含前后结果的示例数据?可以对整列使用命名范围(例如“a:a”)并使宏只查找最后一个填充的单元格,或者您可以仅对标题使用命名范围,并使用偏移量获取以下值,直到找到一个空单元格。感谢您的回答,基于反馈,我已对问题进行了彻底编辑,因为我不认为原始措辞完全传达了我的意图。Named单元格表示命名范围。这与样本代码有什么关系?
Range(“Section_Z”)。剪切Sheet1.Range(“A10”)
将命名范围
Section_Z
移动到
Sheet1.Range(“A10”)
并保留其名称。您可以命名一个包含多个单元格的区域,但也可以命名一个特定单元格,如果您想导航到文档中的特定位置,这非常有用。命名单元格可以有效地将超链接目标插入到文档中。从代码中,我没有剪切单元格,而是复制,因此我不知道结果如何切割一个单元格可能会很困难,但只要进行复制,该单元格在复制时就不会保留其名称。