почему мой саб, удаляя строку данных на моем другом листе - VBA - PullRequest
0 голосов
/ 09 января 2019

У меня 2 листа "Арк1" и "Арк2". я получаю свои данные из "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 голосов
/ 09 января 2019

Вы можете использовать:

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

0 голосов
/ 09 января 2019

Чтобы избежать подобных проблем, всегда квалифицирует ваши объекты полностью . Где вы пишете 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...