Слишком длинная линия пересечения для нескольких диапазонов - PullRequest
0 голосов
/ 22 марта 2019

Приведенный ниже код не будет работать, поскольку строка Set isect слишком длинная, и я не могу понять, как сделать ее многострочным кодом.Я пробовал пробел (_) и ввод.

Если я сделаю строку из нескольких строк, начиная с Set isect = Application.Intersect (Target, Range ()), она будет работать только на последней строке кода.

Цель листа Excel - создать всплывающее окно, требующее ввода данных, если в выбранной ячейке нет ответа.Требуемые замечания будут помещены в ячейку справа.

Как разделить строку Set isect на несколько строк?

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Rows.Count > 1 Or Target.Columns.Count > 1 Then
    Exit Sub
End If

Dim com As String
Dim comm1 As String
Set isect = Application.Intersect(Target, Range("C10:C14, C21:C47, F10:F14, F21:F47, I10:I14, I21:I47, L10:L14, L21:L47, O10:O14, O21:O47, r10:R14, r21:R47, U10:U14, U21:U47, X10:X14, X21:X47, AA10:AA14, AA21:AA47, AD10:AD14, AD21:AD47, AG10:AG14, AG21:AG47, AJ10:AJ14, AJ21:AJ47, AM10:AM14, AM21:AM47, AP10:AP14, AP21:AP47, AS10:AS14, AS21:AS47, AV10:AV14, AV21:AV47, AY10:AY14, AY21:AY47, BB10:BB14, BB21:BB47, BE10:BE14, BE21:BE47, BH10:BH14, BH21:BH47, BK10:BK14, BK21:BK47, BN10:BN14, BN21:BN47, BQ10:BQ14, BQ21:BQ47, BT10:BT14, BT21:BT47, BW10:BW14, BW21:BW47, BZ10:BZ14, BZ21:BZ47, CC10:CC14, CC21:CC47, CF10:CF14, CF21:CF47, CI10:CI14, CI21:CI47, CL10:CL14, CL21:CL47, CO10:CO14, CO21:CO47, CR10:CR14, CR21:CR47, CU10:CU14, CU21:CU47, CX10:CX14, CX21:CX47, DA10:DA14, DA21:DA47, DA10:DA14, DA21:DA47, DD10:DD14, DD21:DD47, DG10:DG14, DG21:DG47, DJ10:DJ14, DJ21:DJ47, DM10:DM14, DM21:DM47, DP10:DP14, DP21:DP47, DS10:DS14, DS21:DS47, DV10:DV14, DV21:DV47, DY10:DY14, DY21:DY47, EB10:EB14, EB21:EB47, EE10:EE14, EE21:
EE47 , EH10: EH14 , EH21: EH47 , EK10: EK14 , EK21: EK47 , EN10: EN14 , EN21: EN47 , EQ10: EQ14 , EQ21: EQ47 , ET10: ET14 , ET21: ET47 "))"
If isect Is Nothing Then

Else

 If Target.Value = "No" Then
     com = "Enter comment in " & Target.Offset(0, 1).Address(RowAbsolute:=False, columnabsolute:=False)

     Do While comm1 = ""
        comm1 = Application.InputBox(prompt:=com, Type:=2)
        On Error GoTo myloop
        If comm1 = False Then
            comm1 = ""
        End If
myloop:
     On Error GoTo -1
     Loop
     Target.Offset(0, 1).Value = comm1

 Else
    Target.Offset(0, 1).Value = ""
 End If

End If
End Sub 

1 Ответ

0 голосов
/ 23 марта 2019

Есть несколько способов снять шкуру с этой кошки.

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

Dim strRange As String

strRange = "C10:C14, C21:C47, F10:F14, F21:F47, I10:I14, I21:I47, L10:L14, L21:L47, O10:O14, O21:O47, r10:R14, r21:R47, U10:U14, U21:U47, X10:X14"
strRange = strRange & ", X21:X47, AA10:AA14, AA21:AA47, AD10:AD14, AD21:AD47, AG10:AG14, AG21:AG47, AJ10:AJ14, AJ21:AJ47, AM10:AM14, AM21:AM47, AP10:AP14"
strRange = strRange & ", AP21:AP47, AS10:AS14, AS21:AS47, AV10:AV14, AV21:AV47, AY10:AY14, AY21:AY47, BB10:BB14, BB21:BB47, BE10:BE14, BE21:BE47"
strRange= strRange & ... etc.

set isect = Application.Intersect(Target, Range(strRange))

... или вы можете создать именованный диапазон в вашей рабочей книге со всеми этими ячейками, содержащимися в ней, а затем просто сослаться на это в вашем коде.

Он поддерживает ведение диапазона и кода отдельно, можетхотя не для вас.

set isect = Application.Intersect(Target, Range("ValidateRange"))

Другой способ, глядя на ваши ячейки, состоит в том, чтобы создать массив и цикл (который может быть улучшен, чтобы быть еще лучше), чтобы он строил строку с помощьюэлемент динамичности.

Dim strRange As String, arrColumns(), i As Long, strCol As String

arrColumns = Array("C", "F", "I", "L", etc ...)

For i = 0 To UBound(arrColumns)
    If i > 0 Then strRange = strRange & ","

    strCol = arrColumns(i)

    strRange = strRange & strCol & "10:" & strCol & "14," & strCol & "21:" & strCol & "47"
Next

Set isect = Application.Intersect(Target, Range(strRange))

Как я уже сказал, есть несколько способов сделать то, что вы хотите сделать.Если вам не нужно что-то слишком сложное, тогда выберите первое решение.

Надеюсь, это поможет.

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