Excel 使用Multiselect userform从命名范围中删除1行或多行

Excel 使用Multiselect userform从命名范围中删除1行或多行,excel,vba,userform,Excel,Vba,Userform,我对编码不是很熟悉。我在网上找到了这段代码,它可以从我的电子表格中删除我在userform中选择的行,但是它每次都会破坏命名范围,并且不会再次工作。我使用的代码是 Private Sub CommandButton4_Click() Dim sh As Worksheet Dim DelRng As Range Set sh = ThisWorkbook.Worksheets("Sheet1") Dim i As Long For i

我对编码不是很熟悉。我在网上找到了这段代码,它可以从我的电子表格中删除我在userform中选择的行,但是它每次都会破坏命名范围,并且不会再次工作。我使用的代码是

Private Sub CommandButton4_Click()

    Dim sh As Worksheet
    Dim DelRng As Range
    Set sh = ThisWorkbook.Worksheets("Sheet1")
    Dim i As Long
    For i = 0 To Me.ListBox3.ListCount - 1    ' no more need to loop backwards
        If Me.ListBox3.Selected(i) = True Then
            If DelRng Is Nothing Then
                Set DelRng = sh.Range("A" & i + 2 & ":F" & i + 2)
            Else
                Set DelRng = Union(DelRng, sh.Range("A" & i + 2 & ":F" & i + 2))
            End If
        End If
    Next i
    Application.ScreenUpdating = False
    If Not DelRng Is Nothing Then DelRng.Delete    ' delete chosen rows (if any)
    
    ListBox3.ListIndex = ListBox3.ListIndex

    Application.ScreenUpdating = True
    
End Sub
命名范围的公式是
=偏移量(Sheet1!$A$2,,,,COUNTA(Sheet1!$A:$A)-1,2)


有人能帮我编写可以重复工作的代码吗?

我还没有完全理解。 您的代码运行良好
你会犯什么样的错误?您的命名范围是如何被打破的
如果删除命名范围的行,则范围会变小。 也许重新定义这个范围会有所帮助。为此,只需删除它并重新定义它。 如果您不知道命令,makro录音机可能会帮助您

ThisWorkbook.Worksheets("Sheet1").Names("Named_Range").Delete
ThisWorkbook.Worksheets("Sheet1").Names.Add Name:="Named_Range", RefersToR1C1:="=Sheet1!R1C1:R10C3"
这定义了从第1行-第1列到第10行-第3列的范围

请提供更多信息。

致以最诚挚的问候

您需要使用命名范围吗?不一定。我发现一些代码显示使用命名范围填充用户表单中的列表框。我基本上希望能够使用该表单添加、删除和更新excel电子表格中的信息。这是命名范围=偏移量(Sheet1!$A$2,,,COUNTA(Sheet1!$A:$A)-1,6)的公式。在我运行提交的代码以删除一行或多行后,我收到此错误消息运行时错误“380”:无法设置RowSource属性。无效的属性值。当我返回并查看命名范围的公式时,它是=偏移量(Sheet1!#REF!,,,COUNTA(Sheet1!$A:$A)-1,6)