【问题标题】:Deleting non-contiguous cell ranges ( Run-time error 1004 )删除不连续的单元格范围(运行时错误 1004)
【发布时间】:2017-10-06 02:30:42
【问题描述】:

我想删除一系列单元格“D8:I13”的内容,然后是相同的范围,但低 15 行,然后再低 15 行,如此 55 次。 我写了代码但是弹出错误:运行时错误1004(对象'_Global'的方法'Range'失败)

    Sub удалитьссылки()
    Dim book1 As Workbook
    Dim A As String
    Dim B As String

    Set book1 = Workbooks.Open("E:\Super M\Проект ставки\Решение\цифирь.xlsx")
    A = "8+n*15"
    B = "13+n*15"

    'переходим в активную страницу откуда надо скопировать данные
    book1.Worksheets("Лист1").Activate

    n = 0
    Do Until n = 55

    Range("D" + A + ":I" + B + "").Select
    Selection.ClearContents
    n = n + 1
    Loop


    End Sub

【问题讨论】:

    标签: vba excel range runtime-error


    【解决方案1】:

    我发现使用Cells 更容易:

    Sub Test()
    
        Dim book1 As Workbook
        Dim StartRow As Long, EndRow As Long
        Dim LoopNum As Long
    
        Set book1 = Workbooks.Open("E:\Super M\?????? ??????\???????\??????.xlsx")
    
        With book1.Worksheets("????1")
            Do Until LoopNum = 55
                'Cells uses row number & column number.
                '.Range(StartCell, EndCell) creates a range between the two cells.
                .Range(.Cells(8 + (LoopNum * 15), 4), .Cells(13 + (LoopNum * 15), 9)).ClearContents
                LoopNum = LoopNum + 1
            Loop
        End With
    
    End Sub
    

    【讨论】:

    • 修复哭泣的字符 :)
    • 我知道有人会对此发表评论,所以我用谷歌搜索并搜索了 SO。也许我应该提出一个新问题——你如何在一台锁定得比一个,嗯,非常紧的东西更紧的计算机上修复 crylic 字符。
    【解决方案2】:

    除非您更改一些展示位置并进行一些编辑,否则代码将不起作用。

    Sub удалитьссылки()
    'privet!
            Dim book1 As Workbook
            Dim A,B,n As Long
    
    
            Set book1 = Workbooks.Open("E:\Super M\Проект ставки\Решение\цифирь.xlsx") _
           'Or anything like ActiveWorkbook
    
            'переходим в активную страницу откуда надо скопировать данные
    
            n = 0
            Do Until n = 55
    
            A = 8 + (n * 15)
            B = 13 + (n * 15)
    
            book1.Worksheets("Лист1").Range("D" & A & ":I" & B).ClearContents
    
            n = n + 1
            Loop
    
    
        End Sub
    

    首先,当您在示例中将变量定义为 A 和 B 时,如果将它们放在引号之间,例如 A= " 8+n*15 " 那么这将成为字符串而不是数字。您应该将其更改为 A = 8 + n * 15 并且您应该在 Do 循环之后移动它,否则您将只能清除第一个范围。

    那么 ("D" + A + ":I" + B + "") 也是完全错误的。您应该使用 & 符号将变量与实际范围分开。如果您想为变量添加一些值,则可以使用 + 符号。 (例如("D" & A + 1 & ":I" & B - 1 )

    【讨论】:

      【解决方案3】:

      试试下面的代码,在清除工作表的内容之前不需要使用Activate,而只需使用完全限定的Range语法,例如:book1.Worksheets("Лист1").Range("D" & A & ":I" & B).ClearContents。

      代码内解释为cmets。

      代码

      Option Explicit
      
      Sub удалитьссылки()
      
      Dim book1       As Workbook
      Dim n           As Long
      Dim A           As Long ' <-- need to be numeric type, not String
      Dim B           As Long ' <-- need to be numeric type, not String
      
      Set book1 = Workbooks.Open("E:\Super M\Проект ставки\Решение\цифирь.xlsx")
      
      For n = 1 To 55 ' <-- use a simple For loop instead of Do until
          A = 8 + 15 * (n - 1) ' <-- substract 1 since the first range start from row 8
          B = 13 + 15 * (n - 1)  ' <-- substract 1 since the first range start from row 13
      
          book1.Worksheets("Лист1").Range("D" & A & ":I" & B).ClearContents
      Next n
      
      End Sub
      

      【讨论】:

        【解决方案4】:

        好的,我可以在这里看到一些错误:

        • 您的编码不知道n 是什么。尚未定义
        • A 和 B 不是字符串,它们是数字。
        • A 和 B 的公式在循环之外。因此不要像n 那样增加

        试试下面的代码:

        Sub удалитьссылки()
        Dim book1 As Workbook
        Dim A,B,n as Long
        
        Set book1 = Workbooks.Open("E:\Super M\Проект ставки\Решение\цифирь.xlsx")
        
        'переходим в активную страницу откуда надо скопировать данные
        book1.Worksheets("Лист1").Activate
        
        n = 0
        Do Until n = 55
            A = 8+(n*15)
            B = 13+(n*15)
        
            Range("D" & A & ":I" & B).ClearContents
            n = n + 1
        Loop
        
        
        End Sub
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-08-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-07-06
          • 2022-11-24
          • 1970-01-01
          相关资源
          最近更新 更多