Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.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
Vba 基于偏移单元文本信息设置命名范围_Vba_Excel - Fatal编程技术网

Vba 基于偏移单元文本信息设置命名范围

Vba 基于偏移单元文本信息设置命名范围,vba,excel,Vba,Excel,我有一张名为“销售”的单子。该表有A2:A1500列,列中有项目名称。A2到A1500行中的每一行都在每个项目的相邻列上有销售信息。我有一个Web API,它用新数据(总是覆盖同一行)更新每行和相邻列的商品销售信息 我试图创建一个代码,根据相邻单元格的文本创建命名范围,如果创建了新项目名称,则为添加的新项目创建命名范围 第一。我想为每行的每个项目名称创建命名范围。意味着单元格A2文本将是“ItemName1”范围,A3文本将是“ItemName2”范围。这个函数需要在最后一行遍历整个列 第二。如

我有一张名为“销售”的单子。该表有A2:A1500列,列中有项目名称。A2到A1500行中的每一行都在每个项目的相邻列上有销售信息。我有一个Web API,它用新数据(总是覆盖同一行)更新每行和相邻列的商品销售信息

我试图创建一个代码,根据相邻单元格的文本创建命名范围,如果创建了新项目名称,则为添加的新项目创建命名范围

第一。我想为每行的每个项目名称创建命名范围。意味着单元格A2文本将是“ItemName1”范围,A3文本将是“ItemName2”范围。这个函数需要在最后一行遍历整个列

第二。如果Web API在列a中创建了一个新的Itemname,则API将设置为在列a的最后一行创建新的Itemname

这就是我目前所拥有的。但我想到了添加的新项目的变量,我没有解决方案

Sub NamedRanges()
Dim rngCell As Range
Dim intLstRow As Integer

intLstRow = ActiveSheet.UsedRange.Rows.Count

For Each rngCell In Range("B2:B" & intLstRow)
    ActiveWorkbook.Names.Add Name:=rngCell.Offset(0, -1).Value, RefersTo:=Range("Sales!$B$" & rngCell.Row)
Next
End Sub
我现在得到一份工作

应用程序或对象定义错误


ActiveWorkbook.Names.Add Name:=

我确实在
referesto:=Range(“Sales”!$A$”&rngCell.Row)
上看到了我的第一个单元格名


提前感谢。

请尝试以下操作。它使用正确的语法连接命名区域的名称,并使用不同的方法查找最后一行。您使用UsedRange的方法可能会产生意外的结果。我还将最后一行的名称更改为LstRow,因为您不需要在VBA中使用表示法,也可以使用尽可能长的长度来避免溢出。

Option Explicit

Sub NamedRanges()

Dim rngCell As Range
Dim LstRow As Long

With ActiveSheet

    LstRow = .Cells(.Rows.Count, "A").End(xlUp).Row

End With


For Each rngCell In Range("B2:B" & LstRow)
    ActiveWorkbook.Names.Add Name:=rngCell.Offset(0, -1).Value, RefersTo:=Range("Sales!$B$" & rngCell.Row)
Next

End Sub

尝试以下操作。它使用正确的语法连接命名区域的名称,并使用不同的方法查找最后一行。您使用UsedRange的方法可能会产生意外的结果。我还将最后一行的名称更改为LstRow,因为您不需要在VBA中使用表示法,并且尽可能长以避免溢出

Option Explicit

Sub NamedRanges()

Dim rngCell As Range
Dim LstRow As Long

With ActiveSheet

    LstRow = .Cells(.Rows.Count, "A").End(xlUp).Row

End With


For Each rngCell In Range("B2:B" & LstRow)
    ActiveWorkbook.Names.Add Name:=rngCell.Offset(0, -1).Value, RefersTo:=Range("Sales!$B$" & rngCell.Row)
Next

End Sub


是否正确转义了“”?ActiveWorkbook.Names.Add Name:=rngCell.Offset(0,-3)。Value&rngCell.Offset(0,-2)。Value,RefersTo:=Range(“Sales!$A$”&rngCell.Row),但无法从具有创建名称的值的列中偏移-列?将命名第一行,然后给出“应用程序或对象定义的错误”对于您的问题,列A或B具有相同的项目名称。您是否正确转义了“”?ActiveWorkbook.Names.Add name:=rngCell.Offset(0,-3)。Value和rngCell.Offset(0,-2)。Value,RefersTo:=Range(“Sales!$A$”&rngCell.Row)但是您不能从具有创建名称所依据的值的列中偏移-列?是否命名第一行,然后对您的问题给出“应用程序或对象定义错误”。列A或B具有相同的项目名称。它将遍历第一行的代码,并为第一个项目创建命名范围。在接下来的第二行(第二行),我看到值传递到rngCell.offset和具有正确名称的referesto,但是我得到了“应用程序或对象定义错误”,那么代码中还有其他问题。如果ActHeSee单元A2中有ITEM1,A3中有ITEM2,那么我所发布的代码将循环并在销售表中创建命名范围,以用于β细胞B2和B3。如果您有空单元格,则需要考虑如何跳过这些(例如,如果不是空的(RNGCEL)……),尽管从先前的对话中,我不认为是这样,我发现了我的问题。名称的语法不正确。非常感谢。添加新项时,我需要再次运行代码吗?或者我可以创建一个触发器吗?如果是这样,请指出一种方法,这样我可以做一些尽职调查。您可以有一个工作表,其中测试目标是否为target.column=1,即a列,并让它运行您的子项,但您可能希望找到一种只添加下一项的方法。它将在第一行的代码中运行,并为第一项创建命名范围。在接下来的第二行(第二行),我看到值传递到rngCell.offset和具有正确名称的referesto,但是我得到了“应用程序或对象定义错误”,那么代码中还有其他问题。如果ActHeSee单元A2中有ITEM1,A3中有ITEM2,那么我所发布的代码将循环并在销售表中创建命名范围,以用于β细胞B2和B3。如果您有空单元格,则需要考虑如何跳过这些(例如,如果不是空的(RNGCEL)……),尽管从先前的对话中,我不认为是这样,我发现了我的问题。名称的语法不正确。非常感谢。添加新项时,我需要再次运行代码吗?或者我可以创建一个触发器吗?如果是这样,请指出一种方法,以便我进行一些尽职调查。您可以有一个工作表,其中测试目标是否为target.column=1,即a列,并让其运行您的子项,但您可能希望找到只添加下一项的方法