Не удалось получить 'Range' объекта '_Global' (Ошибка выполнения 1004) при запуске макроса Excel - PullRequest
0 голосов
/ 03 ноября 2018

Вот шаги макроса:

  1. Предполагается, что этот макрос выберет А1 и введет его в качестве пробела для повторения случайных величин в таблице Excel.

  2. Выберите выход из случайных входов и скопируйте его.

  3. Выберите место для вывода скопированной даты, в данном случае «Строка 200, Столбец (n)», а затем вставьте каждый набор результатов в новый столбец при повторении n.

Я получаю ошибку диапазона 1004, и я не уверен, как ее исправить. Чего мне не хватает?

Sub newloop()
'
' newloop Macro
'

Dim n As Integer

n = 1
Do Until n = 5
Range("A1").Select
ActiveCell.FormulaR1C1 = ""
Range("AA25,AA47,AA69,AA91,AA113,AA135,AA157,AA179,AA201,AA223,AA245,AA267,AA289").Select
Selection.Copy
Range("R200C" & n).Select
ActiveSheet.Paste
n = n + 1
Loop

End Sub

Ответы [ 3 ]

0 голосов
/ 03 ноября 2018

Решение

Хорошей привычкой является использование констант в начале кода, так что вы можете быстро что-то изменить и наблюдать за поведением кода, например Вы хотите вставить данные в 500-ю строку, или вы хотите, чтобы результаты в 10 раз превышали 5, или вы хотите добавить другой диапазон ячеек ...

Sub NewLoop()

  Const cStrRange As String = "AA25,AA47,AA69,AA91,AA113,AA135,AA157," & _
                              "AA179,AA201,AA223,AA245,AA267,AA289"
  Const cLngRow As Long = 200
  Const cN As Integer = 5

  Dim oRng As Range
  Dim n As Integer

  Set oRng = Range(cStrRange)

  For n = 1 To cN
    Range("A1").FormulaR1C1 = ""
    oRng.Copy Cells(cLngRow, n)
  Next

End Sub

Отсутствует точка

Если вы не внимательно прочитали пожелания ФП:

Образцовый, короткий и короткий

Option Explicit

Sub NewLoopExemplary()

  Const cStrA As String = "A1"
  Const cStrRange As String = "AA25,AA47,AA69,AA91,AA113,AA135,AA157," & _
                              "AA179,AA201,AA223,AA245,AA267,AA289"
  Const cLngRow As Long = 200
  Const cN As Integer = 5

  Dim oRng As Range

  Range(cStrA).FormulaR1C1 = ""
  Set oRng = Range(cStrRange)
  oRng.Copy Cells(cLngRow, 1).Resize(1, cN)

End Sub

Sub NewLoopShort()
  Const n As Integer = 5
  Range("A1").FormulaR1C1 = ""
  Range("AA25,AA47,AA69,AA91,AA113,AA135,AA157,AA179,AA201,AA223,AA245,AA267," _
      & "AA289").Copy Cells(200, 1).Resize(1, n)
End Sub

Sub NewLoopShorter()
  Range("A1").FormulaR1C1 = ""
  Range("AA25,AA47,AA69,AA91,AA113,AA135,AA157,AA179,AA201,AA223,AA245,AA267," _
      & "AA289").Copy Cells(200, 1).Resize(1, 5)
End Sub
0 голосов
/ 03 ноября 2018

кроме исправления синтаксической ошибки диапазона, вы можете избежать изменения ячейки A1 на каждой итерации, поскольку расчет листа будет запускаться при каждой операции копирования / вставки:

Sub newloop()
    Dim n As Integer

    Range("A1").Value = "" ' trigger first sheet calculation
    With Range("AA25,AA47,AA69,AA91,AA113,AA135,AA157,AA179,AA201,AA223,AA245,AA267,AA289") ' reference input range
        For n = 1 To 5
            .Copy Cells(200, n) ' copy referenced range and paste it to current nth column from row 200 downwards
        Next
    End With
End Sub

еще лучше, пусть лист рассчитывается напрямую с помощью Calculate метода:

Sub newloop()
    Dim n As Integer

    ActiveSheet.Calculate
    With Range("AA25,AA47,AA69,AA91,AA113,AA135,AA157,AA179,AA201,AA223,AA245,AA267,AA289")
        For n = 1 To 5
            .Copy Cells(200, n)
        Next
    End With
End Sub
0 голосов
/ 03 ноября 2018

Запись R1C1 не поддерживается в Range() в качестве параметра. Таким образом, изменить:

Range("R200C" & n).Select

с:

Cells(200,n).Select

и ошибка исчезнет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...