Страницы: 1
RSS
Как отобразить в Msgbox значение ячейки?
 
     Здравствуйте.
    Скажите, пожалуйста, как отобразить в Msgbox значение ячейки?
Пробовал так:
Код
MsgBox "Значение ячейки" & Workbooks(Полный путь к книге).Sheets(1).Range(A1).Value, vbInformation, "Конец"
, но никакого окна со значением ячейки не выскакивает? Скажите, пожалуйста, как правильно?
 
Workbooks(Полный путь к книге)
Workbooks(Имя книги) , где Имя книги: "Имя книги.расширение" / ActiveWorkbook.Name / ThisWorkbook.Name (если она открыта, конечно)
Изменено: vladjuha - 25.06.2021 18:21:21
 
Цитата
Неопытный_Экселист написал:
не выскакивает
а что выскакивает?
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
Неопытный_Экселист написал:
никакого окна со значением ячейки не выскакивает?
значит условие, по которому должно показываться сообщение, не выполняется.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Range(A1).Value - A1 - должно быть в кавычках, т.е. вот так
Range("A1").Value
 
Цитата
Дмитрий(The_Prist) Щербаков написал:
значит условие, по которому должно показываться сообщение, не выполняется
В том-то и дело, что по F8 видно, что все условия выполняются.
 
Цитата
Неопытный_Экселист написал:
все условия выполняются
ага, т.е. до строки с выводом сообщения доходит, но оно не показывается? Так не бывает.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
Неопытный_Экселист написал:
Range(A1).Value
у вас есть переменная А1, что она содержит на момент выполнения строки?
или подразумевалось:
Цитата
New написал:
Range("A1").Value
Неопытный_Экселист,
запоминайте, макрос делает не то, что вы подразумевали (о чем вы мечтали), а строго то, что в нем написано
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
Ігор Гончаренко написал:
а что выскакивает?
и желательно, на уточняющие вопросы, которые вам задают, отвечать
приблизительно так:
"Выскакивает окно с сообщением об ошибке 1004"
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Так ничего не выскакивает.
Короче, вот кусок кода:
Код
For Each Sht In WB.Sheets 'цикл по всем листам в файле
        Set Rng = Sht.Cells.Find(d, , xlFormulas, xlWhole) 'xlWhole - ячейка целиком, xlPart - часть ячейки
        firstAddress = Rng.Address 'запоминаем адрес первой найденной ячейки
        Do
        If Not Rng Is Nothing Then 'если нашли
            'MsgBox "Найдено на листе " & Rng.Parent.Name & " в ячейке " & Rng.Address(0, 0), vbInformation, "Конец"
                     g = Rng.Row
                     h = Rng.Column
                     'MsgBox "Значение ячейки" & Workbooks(f).Sheets(TDSheet).Range(g, h - 3).Value, vbInformation, "Конец"
                     'MsgBox "Найдено на листе " & Rng.Parent.Name & " в ячейке " & Rng.Address(0, 0), vbInformation, "Конец"
                     If Workbooks(p & f).Sheets(1).Range(g, h + 5).Value <> "Да" Or Workbooks(p & f).Sheets(1).Range(g, h + 5).Value <> "ДА" Or Workbooks(p & f).Sheets(1).Range(g, h + 5).Value <> "да" Then
                        For i = 1 To Rng
                            If Workbooks(p & f).Sheets(1).Range(g, h) = Workbooks(p & f).Sheets(1).Range("D" & g) Then
                               MsgBox "Значение ячейки" & Workbooks(p & f).Sheets(1).Range(g, h - 3).Value, vbInformation, "Конец"
                               Workbooks("Поиск.xlsm").Range("B" & i).Value = Workbooks(f).Range(g - 3, h).Value
                               Workbooks("Поиск.xlsm").Range("C" & i).Value = Workbooks(f).Range(g - 1, h).Value
                               Workbooks("Поиск.xlsm").Range("D" & i).Value = Workbooks(f).Range(g + 2, h).Value
                               Workbooks("Поиск.xlsm").Range("E" & i).Value = Workbooks(f).Range(g + 3, h).Value
                            ElseIf Range(g, h) = Range("H", h) Then
                               Workbooks("Поиск.xlsm").Range("B" & i).Value = Workbooks(f).Range(g - 4, h).Value
                               Workbooks("Поиск.xlsm").Range("C" & i).Value = Workbooks(f).Range(g + 1, h).Value
                               Workbooks("Поиск.xlsm").Range("D" & i).Value = Workbooks(f).Range(g + 4, h).Value
                               Workbooks("Поиск.xlsm").Range("E" & i).Value = Workbooks(f).Range(g + 3, h).Value
                            End If
                        Next i
                    End If
        End If
        Set Rng = Sht.Cells.FindNext(Rng) 'ищем следующую ячейку на листе
        Loop Until firstAddress = Rng.Address 'повторяем цикл, пока не вернёмся к первой найденной ячейке
    Next Sht

Если раскомментировать строку
Код
'MsgBox "Найдено на листе " & Rng.Parent.Name & " в ячейке " & Rng.Address(0, 0), vbInformation, "Конец"
, то окошко выскакивает и всё показывает. А если раскомментировать строку
Код
'MsgBox "Значение ячейки" & Workbooks(f).Sheets(TDSheet).Range(g, h - 3).Value, vbInformation, "Конец"
, то никакого окна нет и ошибки тоже нет. Пробовал и вариант
Код
'MsgBox "Значение ячейки" & Workbooks(f).Sheets(1).Range(g, h - 3).Value, vbInformation, "Конец"
, но это ничего не меняет, и окошко не выскакивает. В строке
Код
'MsgBox "Значение ячейки" & Workbooks(f).Sheets(TDSheet).Range(g, h - 3).Value, vbInformation, "Конец"
я хотел, чтобы MsgBox показал мне значение ячейки на 3 столбца меньше того, в котором нашёл. То есть, найтись заданное слово может начиная со столбца D. Мне надо чтобы MsgBox вывел мне значение, например: если заданное слово нашлось в ячейке D5, то MsgBox выводит значение ячейки A5, если заданное слово нашлось в ячейке G5, то MsgBox выводит значение ячейки D5.
   Скажите, пожалуйста, что я сделал не так? и как правильно?
Изменено: vikttur - 29.06.2021 00:24:42
 
Цитата
Неопытный_Экселист написал:
А если раскомментировать строку
а если еще присмотреться и рассказать что хранится в переменных:
Workbooks(f) - переменная f?
Sheets(TDSheet) - переменная TDSheet? Есть подозрение, что надо просто в кавычки заключить, т.к. TDSheet имя листа, а не переменная
Range(g, h - 3) - переменные g и h?

А не показывается потому, что где-то выше явно записана строка On Error Resume Next, которая подавляет показ ошибок.
Изменено: Дмитрий(The_Prist) Щербаков - 28.06.2021 13:31:37
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
в сообщении 1 один код, в сообщении 10 - другой
и вопрос уже совсем другой
если вы нечто нашли в Rng, то левее на 3 ячейки if Rng.column > 3 then msgbox Rng.Offset(0,-3)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
Страницы: 1
Наверх