使用单元格的范围显示错误

时间:2017-06-25 05:46:14

标签: excel excel-vba vba

我想将数据从一个工作表复制到另一个工作表(取决于可用的工作表数量),列数是动态的。

如果我使用下面的代码,它会显示一个Application对象错误:

      function resize() {
        const rChildren = rec.children;
        let numW = 0;

        [...rChildren].forEach(item => {
          item.outHTML = '';
          tele.appendChild(item);
        })  

        const teleW = tele.offsetWidth,
          tChildren = tele.children;

        [...tChildren].forEach(item => {
          numW += item.offsetWidth;

          if (numW > teleW) {
            item.outHTML = '';
            rec.appendChild(item);
          }
        });
      }

如果我使用它:

Worksheets(1).Range(Cells(m, 2), Cells(m, 7)).Value = ThisWorkbook.Worksheets(i).Range(Cells(3, 2), Cells(3, 7)).Value

它工作正常,但我不能使我的列动态。

1 个答案:

答案 0 :(得分:2)

如果您不符合Cells引用的资格,则默认为ActiveSheet.Cells。因此你的代码

Worksheets(1).Range(Cells(m, 2), Cells(m, 7)).Value = _
     ThisWorkbook.Worksheets(i).Range(Cells(3, 2), Cells(3, 7)).Value

相当于

Worksheets(1).Range(ActiveSheet.Cells(m, 2), ActiveSheet.Cells(m, 7)).Value =  _
     ThisWorkbook.Worksheets(i).Range(ActiveSheet.Cells(3, 2), ActiveSheet.Cells(3, 7)).Value

这显然毫无意义。

你应该使用

Worksheets(1).Range(Worksheets(1).Cells(m, 2), Worksheets(1).Cells(m, 7)).Value = _
     ThisWorkbook.Worksheets(i).Range(ThisWorkbook.Worksheets(i).Cells(3, 2), ThisWorkbook.Worksheets(i).Cells(3, 7)).Value

如果设置了一些Worksheet个对象

,这将更容易阅读
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Set ws1 = ActiveWorkbook.Worksheets(1)
Set ws2 = ThisWorkbook.Worksheets(i)

ws1.Range(ws1.Cells(m, 2), ws1.Cells(m, 7)).Value = _
     ws2.Range(ws2.Cells(3, 2), ws2.Cells(3, 7)).Value