Использование Cell.Address для определения диапазона - VBA - PullRequest
1 голос
/ 10 октября 2019

Я пытаюсь скопировать диапазон, который различается по размеру, определяемому значениями моей первой и последней ячеек в массиве.

Я выяснил Cell.Address, который ограничивает диапазон,однако, когда я пытаюсь ввести их в свой Range (Cell1, Cell2), я получаю ошибки.

Мой Cell1 задается как:

Cells.Find("ID").Offset(1,0).Address

А мой Cell2 определяется как:

Cells.Find("Description of initiative").offset(1,0).end(xldown).Offset(0,cells.Find("ID").Column-cells.Find("Description of initiative").Column).address

Я пытался просто вырезать и вставить их в Range (Cell1, Cell2), но я получаю ошибки. Я попытался создать и определить переменные, но безуспешно. Если бы кто-то мог помочь мне здесь, я был бы очень признателен.

Спасибо


Я благодарен за ответы - вот полный код:

Sub Refresh()

Dim wB As Workbook

Application.ScreenUpdating = False
Application.DisplayAlerts = False

For Each Worksheet In Worksheets
    Select Case Worksheet.Name
        Case "Inputs", "Instructions"
        Case "Project Dashboard"
            Range("B29:B1000").ClearContents
        Case Else
            Worksheet.Delete
        End Select
    Next Worksheet

ufProgress.LabelProgress.Width = 0
ufProgress.Show
Dim i As Integer
For i = 10 To 17
    pctdone = (i - 9) / 8
    With ufProgress
        .LabelCaption.Caption = "Processing Dashboard " & i - 9 & " of 8"
        .LabelProgress.Width = pctdone * (.FrameProgress.Width)
    End With
    DoEvents
    Set wB = Workbooks.Open(Range("G" & i), False, True)
        wB.Sheets(Workbooks(ThisWorkbook.Name).Worksheets("Inputs").Range("F" & i).Value).Copy After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
        wB.Close False
        With Worksheets(Workbooks(ThisWorkbook.Name).Worksheets("Inputs").Range("F" & i).Value)
            .Tab.ColorIndex = 15
            .Name = Range("C" & i)
            .Cells.UnMerge
            .Range("B31:B" & .Cells(.Rows.Count, "C").End(xlUp).Row).Copy
            End With

        Worksheets("Project Dashboard").Range("B10000").End(xlUp).Offset(1, 0).PasteSpecial xlValues


    If i = 17 Then Unload ufProgress
    Next

Application.DisplayAlerts = True

End Sub

Вот строка, которую я пытаюсь сделать динамической: (и замените ее длинными формулами Cell вверху)

.Range("B31:B" & .Cells(.Rows.Count, "C").End(xlUp).Row).Copy

Я проверил результаты обеих формул Cell.Address, и они возвращают правильные результаты. (Я считаю, что это были $ B $ 31 и $ B $ 48 соответственно). По сути, эти ячейки не являются статичными, но они всегда будут лежать ниже ячеек, содержащих «ID» и «Описание инициативы». Я пытаюсь сделать первую ячейку ниже идентификатора и последнюю ячейку описания инициативы (смещенной обратно на столбец идентификатора) в качестве диапазона копируемых ячеек.

Имеет ли это больше смысла?

Я ценю помощь!


Мой основной вопрос заключается в следующем:

Как выписать диапазон, в котором значения ячеек являются пределами диапазона? Например (смиритесь со мной), скажем, ячейка X100 имеет значение «A1», а ячейка Y200 имеет значение «B5». Есть ли способ написать Range ( Cell X100 Value , Cell Y200 Value )?

В этой ситуации я хотел бы закончить Range ("A1: B5" ).

Мне нужно, чтобы Range смотрел на значение в разных ячейках, чтобы определить его начальную и конечную точки. Это имеет больше смысла?

Спасибо!

...