Установка значения по умолчанию на основе соседней ячейки в VBA - PullRequest
0 голосов
/ 30 января 2020
Sub Print_New()
'
' Print_New Macro
'

'
    ActiveSheet.Unprotect
    ActiveSheet.Range("$B$7:$G$24").AutoFilter Field:=1, Criteria1:="<>"
    ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
        IgnorePrintAreas:=False
    ActiveSheet.Range("$B$7:$G$24").AutoFilter Field:=1
    ActiveSheet.Protect
    Sheets("Bill (1)").Copy Before:=Sheets(5)
    ActiveSheet.Unprotect

    Range("C8:C17,D20,E20:F20").Select
    Range("E20").Activate
    Selection.ClearContents
    Range("G20").Select
    ActiveCell.FormulaR1C1 = "=IF(RC[-2]="""","""",5%)"
    Range("F8").Select
    Range("F8").Select
    ActiveCell.FormulaR1C1 = "=IF(RC[-3]>0,1,"""")"
    Range("F9").Select
    ActiveCell.FormulaR1C1 = "=IF(RC[-3]>0,1,"""")"
    Range("F10").Select
    ActiveCell.FormulaR1C1 = "=IF(RC[-3]>0,1,"""")"
    Range("F11").Select
    ActiveCell.FormulaR1C1 = "=IF(RC[-3]>0,1,"""")"
    Range("F12").Select
    ActiveCell.FormulaR1C1 = "=IF(RC[-3]>0,1,"""")"
    Range("F13").Select
    ActiveCell.FormulaR1C1 = "=IF(RC[-3]>0,1,"""")"
    Range("F14").Select
    ActiveCell.FormulaR1C1 = "=IF(RC[-3]>0,1,"""")"
    Range("F15").Select
    ActiveCell.FormulaR1C1 = "=IF(RC[-3]>0,1,"""")"
    Range("F16").Select
    ActiveCell.FormulaR1C1 = "=IF(RC[-3]>0,1,"""")"
    Range("F17").Select
    ActiveCell.FormulaR1C1 = "=IF(RC[-3]>0,1,"""")"
    Range("C8").Select
    ActiveSheet.Protect
    ActiveWorkbook.Save
End Sub

Нужен правильный код вместо любой формулы "IF". Когда я записываю что-либо в любую ячейку в диапазоне C8: C17, значение по умолчанию 1 должно быть равно той же ячейке в диапазоне F8: F17. Который можно изменить. И когда C8: C17 пуст, тогда F8: F17 также должен быть пустым.

1 Ответ

0 голосов
/ 31 января 2020

Пожалуйста, не используйте константы Select и ActiveCell: вы можете заменить:

Range("G20").Select
    ActiveCell.FormulaR1C1 = "=IF(RC[-2]="""","""",5%)"

на:

Range("G20").FormulaR1C1 = "=IF(RC[-2]="""","""",5%)"

И вместо использования RC , вы можете сделать следующее:

Range("G20").Formula = "=IF(Offset(-2;0)="""","""",5%)"

Кроме того, вы можете использовать весь диапазон F8:F17:

Range("F8:F17").Formula = "IF(Offset(-3;0)>0,1,"""")"

Это уже значительное уменьшение устаревшего кода .

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