Как ссылаться на ячейку всегда в одном и том же столбце, но сразу над границей, которая может двигаться вертикально? - PullRequest
0 голосов
/ 11 июля 2019

Я пытаюсь выяснить, как конкретно ссылаться на ячейки чуть выше нижней границы нескольких листов Excel в одной книге, ссылаясь на них в объекте "ThisWorkbook".

Я имею дело с книгой Excel, которая начинается с 3 листов, а затем создает еще 17, извлекая данные из базы данных. Данные различаются, и поэтому количество строк в листах варьируется от пробной к пробной. Ячейки, на которые я пытаюсь ссылаться, находятся внутри этих сгенерированных листов. Единственное, что соответствует ячейкам, на которые я хочу сослаться, это то, что они находятся в одном столбце и всегда будут чуть выше сгенерированной границы.

Код, который я хочу реализовать, выглядит примерно так:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If WorksheetFunction.CountA( _
Worksheets("Sheet1").Range("A1,A2,A3,A5,A5, A6")) < 3 Then MsgBox "Workbook will not be saved unless" & vbCrLf &  "All required signatures have been recorded.", "Missing info" 

Отмена = True End If End Sub

Что я хочу сделать, так это запретить сохранение файла, если во всех местоположениях подписи нет некоторого содержимого. Я действительно понятия не имею о синтаксисе, необходимом для этой работы. Любая помощь будет принята с благодарностью!

Здесь приведены ссылки на несколько изображений ячеек, на которые я пытаюсь ссылаться, и границы вокруг них.

1 Ответ

2 голосов
/ 11 июля 2019

Вы можете сделать цикл вниз по столбцу или снизу вверх, используя проверку на нижней границе ячеек, такую ​​что:

For i = lr to 2 Step -1 'lr is last row
    If Cells(i,1).Borders(xlEdgeBottom).LineStyle <> xlLineStyleNone Then
        TargetRow = i
        Exit for
    End If
Next i
Debug.Print TargetRow

Возможно, вы захотите установить значение weight в зависимости от вашей границы или, если существуют другие границы, которые вы хотите исключить.

Затем вы можете использовать TargetRow для другого кода.


Edit1:

Зацикливание листа:

For each ws in Workbook.Worksheets
    For i = lr to 2 Step -1 'lr is last row
        If Cells(i,1).Borders(xlEdgeBottom).LineStyle <> xlLineStyleNone Then
            TargetRow = i
            Exit for
        End If
    Next i
    Debug.Print TargetRow
    If TargetRow > 0 Then
        'Do something with TargetRow
    End If
    TargetRow = 0 'Reset before next sheet as to not mess anything up
Next ws
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...