Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.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

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
Excel 清除有错误的命名范围地址(例如#REF!)_Excel_Vba_Named Ranges - Fatal编程技术网

Excel 清除有错误的命名范围地址(例如#REF!)

Excel 清除有错误的命名范围地址(例如#REF!),excel,vba,named-ranges,Excel,Vba,Named Ranges,我建立了一个命名范围,我们叫他RngIn。 他有3个牢房,他的地址是A1:A3 接下来,我删除第2行 我的RngIn现在显示为#REF!其refresto属性中存在错误(正确): =A1,第1页!参考!A2 这意味着我无法使用VBA操作该命名范围的其余部分,因为全局对象错误的方法“range” 该范围是在进程中创建的,如果用户随后出于任何原因需要删除一行,我未来的代码将失败,因为它需要知道其余命名范围数据的位置 我尝试了许多方法来访问VBA中此范围的剩余地址信息,但迄今为止失败,例如 Dim R

我建立了一个命名范围,我们叫他RngIn。 他有3个牢房,他的地址是A1:A3

接下来,我删除第2行

我的RngIn现在显示为#REF!其refresto属性中存在错误(正确): =A1,第1页!参考!A2

这意味着我无法使用VBA操作该命名范围的其余部分,因为全局对象错误的方法“range”

该范围是在进程中创建的,如果用户随后出于任何原因需要删除一行,我未来的代码将失败,因为它需要知道其余命名范围数据的位置

我尝试了许多方法来访问VBA中此范围的剩余地址信息,但迄今为止失败,例如

Dim RngAddress As String
Dim RngIn As Range

Set RngIn = Range("A1:A3")
RngAddress = RngIn.Address
RngAddress = RngIn.RefersToRange.Address
RngAddress = RngIn.RefersTo
RngAddress = Replace(RngIn.Address, "Sheet1!#REF!", "")
理想情况下,我希望在文本字符串中看到RngIn的结果是: =A1,A2
因为A2现在是A3中原始数据的位置。

在这种情况下,我将命名区域的起点和终点设置为用户可以删除的区域上方和下方的单元格,然后使用偏移或索引功能调整该区域的大小,以排除我的书签。或者我使用Excel表格,它可以在不返回#REF错误的情况下处理行删除。

在这种情况下,我将命名区域的起点和终点设置为用户可以删除的区域上方的单元格和下方的单元格,然后使用偏移或索引功能调整该区域的大小,以排除我的书签。或者我使用Excel表格,它可以在不返回#REF错误的情况下处理行删除。

我不太清楚这一点:示例代码没有使用定义的名称(也称为命名范围)。 假设您创建一个名为RangeIn的名称,该名称引用A1、A3、A5,然后删除第3行

RangeIn的引用现在是
=Sheet1$一美元一张#裁判!,第一张$A$4

Option Explicit
Option Compare Text
Sub ChangeRef()
Dim strAd As String
strAd = ThisWorkbook.Names("RangeIn").RefersTo
strAd = Replace(strAd, "Sheet1!#REF!,", "")
ThisWorkbook.Names("RangeIn").RefersTo = strAd
End Sub
此代码删除Sheet1#裁判!,将名称范围保留在参考
=Sheet1$一美元一张$A$4

Option Explicit
Option Compare Text
Sub ChangeRef()
Dim strAd As String
strAd = ThisWorkbook.Names("RangeIn").RefersTo
strAd = Replace(strAd, "Sheet1!#REF!,", "")
ThisWorkbook.Names("RangeIn").RefersTo = strAd
End Sub

我不太清楚:您的示例代码没有使用定义的名称(也称为命名范围)。 假设您创建一个名为RangeIn的名称,该名称引用A1、A3、A5,然后删除第3行

RangeIn的引用现在是
=Sheet1$一美元一张#裁判!,第一张$A$4

Option Explicit
Option Compare Text
Sub ChangeRef()
Dim strAd As String
strAd = ThisWorkbook.Names("RangeIn").RefersTo
strAd = Replace(strAd, "Sheet1!#REF!,", "")
ThisWorkbook.Names("RangeIn").RefersTo = strAd
End Sub
此代码删除Sheet1#裁判!,将名称范围保留在参考
=Sheet1$一美元一张$A$4

Option Explicit
Option Compare Text
Sub ChangeRef()
Dim strAd As String
strAd = ThisWorkbook.Names("RangeIn").RefersTo
strAd = Replace(strAd, "Sheet1!#REF!,", "")
ThisWorkbook.Names("RangeIn").RefersTo = strAd
End Sub

A3以下是否有更多的数据行?您可以重新定义命名范围。我使用一个工作表更改事件来检测更改,获取新的最后一行并重新创建nam。类似于thisworkbook.names(“my name”).refrestorange=mysheet.cells(1,1)、resize(lastrow,1)嘿,谢谢你的建议,但这行不通。我的范围不是连续的(单元格不是真正的A1、A2、A3,而是更像A70、A104、A106等)。我应该在问题中说得更清楚!A3以下是否有更多的数据行?您可以重新定义命名范围。我使用一个工作表更改事件来检测更改,获取新的最后一行并重新创建nam。类似于thisworkbook.names(“my name”).refrestorange=mysheet.cells(1,1)、resize(lastrow,1)嘿,谢谢你的建议,但这行不通。我的范围不是连续的(单元格不是真正的A1、A2、A3,而是更像A70、A104、A106等)。我应该在问题中说得更清楚!