#excel #vba
#excel #vba
Вопрос:
приведенный ниже макрос принимает два значения ячейки (из первого и второго столбца) и отображает столбец и содержимое ячейки во всплывающей форме
Я пытаюсь добавить условие, при котором отображается только значение столбца и ячейки, если ячейка содержит значение.
что-то вроде этого =IF(A1<>"",result,"")
но я не знаю, как реализовать это для всех ячеек, а не только для конкретной.
Option Explicit
Const rangeForSearch = "G2"
Const rowTitles = 4
Dim arrTmp
Dim lastRow As Long, lastColumn As Long
Dim textForSearch As String, textForSearch_withoutSpaces As String
Dim strTmp As String
Dim i As Long, j As Long
Sub searchPerson()
Application.ScreenUpdating = False
With ActiveSheet
textForSearch = .Range(rangeForSearch)
If textForSearch = "" Then
MsgBox "Input text in cell """ amp; rangeForSearch amp; """ and try again!", vbCritical
Application.ScreenUpdating = True
Exit Sub
End If
lastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
lastColumn = .Cells(rowTitles, .Columns.Count).End(xlToLeft).Column
If lastRow <= rowTitles Or lastColumn <= 2 Then
MsgBox "Dataset is wrong! Check it and try again!", vbCritical
Application.ScreenUpdating = True
Exit Sub
End If
arrTmp = .Range(.Cells(rowTitles, "A"), .Cells(lastRow, lastColumn))
End With
'---------------------------------------
textForSearch_withoutSpaces = Replace(textForSearch, " ", "")
For i = LBound(arrTmp, 1) 1 To UBound(arrTmp, 1)
strTmp = Replace(arrTmp(i, 1) amp; arrTmp(i, 2), " ", "")
If StrComp(textForSearch_withoutSpaces, strTmp, vbTextCompare) = 0 Then Exit For
Next i
If i = UBound(arrTmp, 1) 1 Then
strTmp = textForSearch amp; vbCrLf amp; vbCrLf amp; "No dataset!"
Else
strTmp = textForSearch
For j = 3 To lastColumn
strTmp = strTmp amp; vbCrLf amp; vbCrLf amp; arrTmp(1, j) amp; ": " amp; arrTmp(i, j)
Next j
End If
Application.ScreenUpdating = True
MsgBox strTmp, , "Result"
End Sub
Ответ №1:
может быть
For j = 3 To lastColumn
If Not IsEmpty(arrTmp(i, j)) Then strTmp = strTmp amp; vbCrLf amp; vbCrLf amp; arrTmp(1, j) amp; ": " amp; arrTmp(i, j)
Next j
Комментарии:
1. неясно, в какую часть кода вставить ваше условие, вставив его после
textForSearch
части вверху, я получаюruntime error, Index out of range
2. это для замены того же
For j = 3 To lastColumn
самого …Next j
из вашего исходного кода