需要帮助了解不合格的范围

时间:2017-03-17 18:06:00

标签: excel vba excel-vba

有人可以帮助我理解为什么会有效:

Sub CommandButton1_Click()
    Sheets("Inventory Data").Range("A1:G1").Copy
    Sheets("Desig From Inv").Range("A1").PasteSpecial xlPasteValues
End Sub

但是,这不是吗?

Sub CommandButton1_Click()
    Sheets("Inventory Data").Range(Cells(1, 1), Cells(1, 7)).Copy
    Sheets("Desig From Inv").Range("A1").PasteSpecial xlPasteValues
End Sub

我真的希望列号最后成为一个变量。像这样:

Sub CommandButton1_Click()
    Sheets("Inventory Data").Range(Cells(1, 1), Cells(1, i)).Copy
    Sheets("Desig From Inv").Range("A1").PasteSpecial xlPasteValues
End Sub

我尝试了许多形式的获取"细胞"进入"范围"。

谢谢!

2 个答案:

答案 0 :(得分:7)

本声明:

Sheets("Inventory Data").Range(Cells(1, 1), Cells(1, i)).Copy

真的这样做了:

ActiveWorkbook.Sheets("Inventory Data") _
              .Range(ActiveSheet.Cells(1, 1), ActiveSheet.Cells(1, i)) _
              .Copy

除非ActiveWorkbook.Sheets("Inventory Data")ActiveSheet,否则该声明会爆炸,因为您正在另一张上使用范围来获取ActiveWorkbook.Sheets("Inventory Data")的范围{1}}。

对所有事情进行鉴定!

... With块使这更容易:

With Worksheets("Inventory Data")
    .Range(.Cells(1, 1), .Cells(1, i)).Copy
End With

我允许自己插上一点点;我正在开发一个(免费和开源)VBE加载项,可以轻松找到这些错误 - 粘贴代码here(它可以更快地运行很多实际的VBE虽然看到了你的代码中可以找到的所有东西 - 它还不完美(但是),但它比没有任何东西更好:

Rubberduck inspection results

答案 1 :(得分:1)

其他一些方式:

    Sheets("Inventory Data").Cells(1, 1).Resize(,i).Copy
    Sheets("Desig From Inv").Range("A1").PasteSpecial xlPasteValues

    Sheets("Inventory Data").Range("A1").Resize(,i).Copy
    Sheets("Desig From Inv").Range("A1").PasteSpecial xlPasteValues

    Sheets("Desig From Inv").Range("A1").Resize(,i).Value = Sheets("Inventory Data").Range("A1").Resize(,i).Value

    With Sheets("Inventory Data").Range("A1").Resize(,i)
        Sheets("Desig From Inv").Range("A1").Resize(,i).Value = .Value
    End With