为什么我的子要删除另一张工作表中的一行数据-VBA

时间:2019-01-09 13:43:59

标签: excel vba

我有2张纸“ Ark1”和“ Ark2”。我从“ Ark2”中获取数据,并将其放入“ Ark1”中。我的“ Sub X”功能应将数据与日期从水平方向转换为垂直方向。但是,当我运行“ sub x”时,它正在删除“ Ark2”中的一行数据,在那里我得到了数据。我将所有代码都放在一个模块中。

    Sub x()

Dim lngDataColumns As Long
Dim lngDataRows As Long

lngDataColumns = 3
lngDataRows = 50


For t = 1 To lngDataRows

Range("l2").Offset(((t - 1) * lngDataColumns) - 1, 0).Resize(lngDataColumns, 1).Value = _
        Application.Transpose(Range("f1:h1").Value)

Range("M2").Offset(((t - 1) * lngDataColumns) - 1, 0).Resize(lngDataColumns, 1).Value = _
        Application.Transpose(Range("f1:h1").Offset(t).Value)

Next t

End Sub

这是已删除数据的图示。

deleted data

这是我在用彩色涂色的“ Ark1”中要做什么的图片。

我希望你能帮忙

enter image description here

2 个答案:

答案 0 :(得分:1)

为避免此类问题,请始终完全限定您的对象。 在写Range("A1")的地方,应该写:

ThisWorkbook.Sheets("Your sheet").Range("A1")

位置:

  • ThisWorkbook限定运行代码的工作簿中的对象(相反,默认值为ActiveWorkbook,在代码运行时可能是其他东西)。
  • Sheets("Your sheet")确保运行良好的工作表。

这当然可以在您只说Range("something")的地方进行。

提示:如果您认为这样做会增加代码的负担,则可以在代码之上定义范围,并按名称最近使用它,例如:

Dim myRng1 As Range: Set myRng1 = ThisWorkbook.Sheets("Your sheet").Range("your range")
...
...
myRng1.DoSomething()
myRng1.DoSomethingElse()

答案 1 :(得分:0)

您可以使用:

Option Explicit

Sub Test()

    With ws1
        .Range("A1").Select
    End With

End Sub

如果在方括号之外使用该名称:

enter image description here

Option Explicit

Sub Test()

    With ThisWorkbook.Worksheets("Sheet1")
        .Range("A1").Select
    End With

End Sub

您在方括号中使用该名称:

enter image description here