移动带偏移的范围

时间:2018-04-11 23:13:37

标签: excel vba excel-vba

我通过移动偏移的指定行来解决问题。

它抛出了需要一个Object的Error 424。 我使用所选范围设置了rng2,但是当我尝试将其向上移动时,错误就会进入。

我基本上需要当87行中的区域找到一个空单元格时将其删除,以便带有该信息的标签可以上升。

只是

this

this

谢谢你的时间!

app080

3 个答案:

答案 0 :(得分:0)

您不能With rng For i = .Rows.Count To 1 Step -1 If .Item(i) = "" Then set tmp=rng2 tmp.Delete Shift:=xlUp End If Set rng2 = rng2.Offset(-1) Next i End With 之前已删除的范围。试试这个(未经测试,我正在智能手机上回答):

rng2.offset(-1)

.select(第二个参数,0,是可选的)不应该在if子句中。

在删除范围之前,也不需要Sub rowOffset() Dim rng As Range, row As Range, i% Set rng = [c37:n85] For i = rng.Rows.Count To 1 Step -1 Set row = rng.Rows.Item(i) If row.Range("a1") = "" Then row.Delete shift:=xlUp Next i End Sub 范围。实际上,将此步骤保留可以提高脚本的性能。

修改
好吧,正如@Matto非常正确地指出的那样,我以前的解决方案仍然无效。所以我再看看它并修改整个子,如下所示:

Option Explicit    'Generic Module

Public Const WS1_MEM_RNG = "C5,J5,R5"    'Sheet1 memory cells

Public prevWs1Vals As Object

Public Sub SetPreviousWS1Vals()
    Dim c As Range

    For Each c In Sheet1.Range(WS1_MEM_RNG).Cells
        If Len(c.Value2) > 0 Then prevWs1Vals(c.Address) = c.Value2
    Next
End Sub

我认为无论如何这都是短的......并且它的工作原理(已测试)。

答案 1 :(得分:0)

您的代码错误的原因是因为rng2.Delete ... rng2不再指向有效范围(因为您刚删除它)。

那说更好的方法是首先确定要删除的范围,然后一次删除它。

这样的事情(假设你的第一个数据在B栏)

Sub Demo()
    Dim r1 As Range, r2 As Range

    With ThisWorkbook.ActiveSheet
        ' Find Total row
        '  assumes there is no other data below the table in Column B
        Set r2 = .Cells(.Rows.Count, 2).End(xlUp).Offset(-2, 0)
        If IsEmpty(r2) Then
            ' Find the last row of data
            Set r1 = r2.End(xlUp).Offset(1, 0)
            .Range(r1, r2).EntireRow.Delete
        End If
    End With
End Sub

答案 2 :(得分:0)

    Pembelian
        .find({})
        .populate('dp')
        .populate('pelunasan')
        .populate('supplier')
        .populate('produk')
        .populate('komisi')
        .exec((err, dataPembelian) => {

          function filter() {
            let result = []
            for (pembelian of dataPembelian) {
              result.push(pembelian.produk.map(
                o => Object.assign(
                  o, {
                    "transaksi": o["transaksi"].filter(o => {
                      console.log(o)
                      console.log('\nSEPARATOR\n')
                      console.log("THIS PEMBELIAN ID: " + o.pembelian)
                      console.log("LOOPING ID: " + pembelian._id)
                      console.log("THE CONDITION")
                      console.log(pembelian._id.toString() == o["pembelian"])
                      return pembelian._id.toString() == o["pembelian"]
                    })
                  }
                )
              ))
            }
            return result
          }
          res.json(filter())
       })

将为您提供要删除的第一行中的第一个单元格。

然后

Range(“C35”).End(xlDown).Offset(1,0) 

将在您要删除的区域中为您提供右下角的单元格。

因此,将这两个单元格设置为变量(例如cell1和cell2)。 然后:

Range(“C35”).End(xlToRight).End(xlDown).End(xlDown).Offset(-2,0)

会让你知道结果。