Присвоение именованного значения Range переменной (Excel VBA) - Новичок - PullRequest
0 голосов
/ 28 апреля 2020

У меня около 10 дней опыта работы с VBA Excel, поэтому прошу прощения за мои ошибки / невежество. Кроме того, я, вероятно, не могу найти решение, так как я не знаю язык, поэтому мои вопросы не имеют смысла. мои запросы возвращают в основном «как назвать диапазон, используя VBA в Excel».

Я создаю рабочую книгу, в которой содержатся результаты испытаний контрольных деталей, которые компания, для которой я работаю, производит. Есть 28 частей с 6 критериями производительности каждая.

Я пытаюсь «захватить» значение для каждой части и параметра, которые будут использоваться в формуле условного форматирования: '= rnSource +/- (rnSource * Tolerance)' ,

Каждый номер детали имеет результаты SN и 6 контрольных точек (TP). Я назвал диапазоны (отдельные ячейки) как SN_TPx (x, будучи 1, 2, 3, ... 6). Эти именованные ячейки находятся в другом листе, чем целевые листы условного форматирования (28 из них 1 / SN). Отдельный лист содержит результаты текущего прогона (листы названы с использованием SN). Приведенный ниже код работал нормально, когда я использовал SN_TPx вместо rnSource.

Причина: я могу повторно использовать код с модификацией одного "тусклого", а не копировать / вставлять код 168 раз и изменять ссылки на ячейки по код (8 вхождений). У меня также есть 7 других продуктовых линеек, к которым мне нужно будет применить это.

В своем коде я попытался: Dim rnSource As Range, затем присвоить SN_TPx to rnSource, используя Set rnSource = SN_TPx. Это приводит к: «Ошибка времени выполнения« 424 »: требуется объект»

За последние 12 часов я пытался найти решение в сети безрезультатно.

Я пытался использовать rnSource =: SN_TPx.Value - ошибка «424»

Range(SN_TPx).Value - ошибка времени выполнения «1004»: сбой метода «Диапазон» объекта «_Global»

Range("SN_TPx").Value - код работает, но ... моя формула условного форматирования приводит к следующему: "Значение ячейки

Worksheet("Sheet3").Range(SN_TPx) - Ошибка компиляции: Sub или функция не определена (рабочая таблица)

Worksheets("Sheet3").Range("SN_TPx") - Ошибка времени выполнения '9': индекс вне диапазона

Я пробовал другой фрагменты кода, которые я больше не помню, но я уверен, что есть простое решение, если кто-то знаком с VBA, которого мне не хватает.

Код ниже:

Sub TP1_CondFormat_AV()
'***   Attempt to handle ranges (source and target) of CondFormat by setting dims and ranges upfront_
' then execute CondFormat routine for each set of dims and ranges


With ActiveSheet

'** par - define needed variables
Dim r1 As Range
Dim r2 As Range
Dim TP1_Range As Range
Dim TP2_Range As Range

'Dim rnSource As Variant ' fail
'Dim rnSource As Integer ' fail
Dim rnSource As Range
Dim rnTarget As Range
Dim wsSource As Worksheet
Dim wsTarget As Worksheet

'*** par - create a range called "rnTarget" which consists of r1 and r2 ranges
Set r1 = Range("L2:L4")
Set r2 = Range("L7:L1048576")
Set rnTarget = Union(r1, r2)
rnTarget.Name = "TP1"    'Name the rnTarget as "TP1"

Set rnSource = Range(SN_TP1).Value  '== troubleshooting, unable to point rnSource to "SN_TP1" value

End With

rnTarget.FormatConditions.Add Type:=xlCellValue, Operator:=xlLess, _
        Formula1:="=rnSource-(rnSource*Tolerance)"
rnTarget.FormatConditions(rnTarget.FormatConditions.Count).SetFirstPriority
    With rnTarget.FormatConditions(1).Font
        .Bold = True
        .Color = -4165632
        .TintAndShade = 0
    End With
    rnTarget.FormatConditions(1).StopIfTrue = False
    rnTarget.FormatConditions.Add Type:=xlCellValue, Operator:=xlGreater, _
        Formula1:="=rnSource+(rnSource*Tolerance)"
    rnTarget.FormatConditions(rnTarget.FormatConditions.Count).SetFirstPriority
    With rnTarget.FormatConditions(1).Font
        .Bold = True
        .Color = -16776961
        .TintAndShade = 0
    End With
    rnTarget.FormatConditions(1).StopIfTrue = False

    End Sub

Спасибо, что уделили мне драгоценное время,

Павел

Ответы [ 2 ]

0 голосов
/ 28 апреля 2020

Спасибо за ваш вклад @urdearboy и @Scott Holtzman. Ваши ответы были правильными и помогли мне понять, почему мой предложенный метод не будет работать.

Когда я Set rnSource = .Range("SN_TPx") назначает SN_TPx значение для rnSource (Debug.Print подтверждает это), но ... лист не распознает rnSource имя. Таким образом, формула условного формата не будет работать, так как она содержит Cell < =rnSource-(rnSource*Tolerance)

[CondFormatFail.jpg][1]

Это означает, что, несмотря на изменение значения rnSource путем изменения SN_TPx, в конце концов вся моя книга будет иметь тот же rnSource value ... последний назначенный ему.

Пока мне придется жестко кодировать SN_TPx в моем условном форматировании и применять к соответствующим диапазонам. Со временем я упорядочу его и сделаю его более эффективным.

Еще раз спасибо!

0 голосов
/ 28 апреля 2020

Если вы просто пытаетесь создать переменную диапазона VBA для именованного диапазона Excel, вам просто нужно добавить кавычки. Обратите внимание, что вы должны удалить .Value, который у вас есть в данный момент, поскольку он является свойством диапазона ( пример того, как получить доступ к значению вашей переменной ниже )


Set rnSource = Range("SN_TP1")
'Debug.Print rnSource.Value
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...