Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Range и другой лист - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Range и другой лист (Макросы/Sub)
Range и другой лист
irozanov Дата: Вторник, 21.04.2015, 13:40 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 2
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Всем привет. Не профессионал, есть проблема.
Пытаюсь определить функцию, которая проверяет соседние ячейки произвольного прямоугольного диапазона на пустоту. Проблема возникает если диапазон указываетс на другом листе книги. Такие параметры, как номер первой ячейки диапазона и количество строк и столбцов диапазона определяются корректно. А вот работа с диапазонами соседних ячеек (a,b,c,d as Range в теле функции) происходит на первом листе. edge.Select в конце кола поставлен для проверки. Активация нужного листа в теле функции не спасает и edge.Select, соответственно, выдает ошибку.

[vba]
Код
Function CheckBorder(ByRef vessel As Range) As Boolean
Dim a, b, c, d As Range

CheckBorder = True

ccount = vessel.Columns.Count
rcount = vessel.Rows.Count
stcol = vessel.Column
strow = vessel.Row

         Set a = Range(Cells(strow - 1, stcol - 1), Cells(strow - 1, stcol + ccount))
         Set b = Range(Cells(strow + rcount, stcol - 1), Cells(strow + rcount, stcol + ccount))
         Set c = Range(Cells(strow - 1, stcol - 1), Cells(strow + 1, stcol - 1))
         Set d = Range(Cells(strow - 1, stcol + ccount), Cells(strow + 1, stcol + ccount))
              
Set edge = Union(a, b, c, d)

For Each e In edge
         If e.Value <> "" Then
             CheckBorder = False
             Exit For
         End If
Next
edge.Select
End Function
[/vba]
[moder]кнопка тега для кода макроса не fx, а #.
Поправил
Спасибо


Сообщение отредактировал irozanov - Вторник, 21.04.2015, 13:49
 
Ответить
СообщениеВсем привет. Не профессионал, есть проблема.
Пытаюсь определить функцию, которая проверяет соседние ячейки произвольного прямоугольного диапазона на пустоту. Проблема возникает если диапазон указываетс на другом листе книги. Такие параметры, как номер первой ячейки диапазона и количество строк и столбцов диапазона определяются корректно. А вот работа с диапазонами соседних ячеек (a,b,c,d as Range в теле функции) происходит на первом листе. edge.Select в конце кола поставлен для проверки. Активация нужного листа в теле функции не спасает и edge.Select, соответственно, выдает ошибку.

[vba]
Код
Function CheckBorder(ByRef vessel As Range) As Boolean
Dim a, b, c, d As Range

CheckBorder = True

ccount = vessel.Columns.Count
rcount = vessel.Rows.Count
stcol = vessel.Column
strow = vessel.Row

         Set a = Range(Cells(strow - 1, stcol - 1), Cells(strow - 1, stcol + ccount))
         Set b = Range(Cells(strow + rcount, stcol - 1), Cells(strow + rcount, stcol + ccount))
         Set c = Range(Cells(strow - 1, stcol - 1), Cells(strow + 1, stcol - 1))
         Set d = Range(Cells(strow - 1, stcol + ccount), Cells(strow + 1, stcol + ccount))
              
Set edge = Union(a, b, c, d)

For Each e In edge
         If e.Value <> "" Then
             CheckBorder = False
             Exit For
         End If
Next
edge.Select
End Function
[/vba]
[moder]кнопка тега для кода макроса не fx, а #.
Поправил
Спасибо

Автор - irozanov
Дата добавления - 21.04.2015 в 13:40
_Boroda_ Дата: Вторник, 21.04.2015, 14:04 | Сообщение № 2
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Так нужно? Логику не переделывал, только добавил ссылку на лист и некоторые косяки поправил
[vba]
Код
Function CheckBorder(ByRef vessel As Range) As Boolean
      Dim a As Range, b As Range, c As Range, d As Range, sn_
        
      CheckBorder = True
        
      ccount = vessel.Columns.Count
      rcount = vessel.Rows.Count
      stcol = vessel.Column
      strow = vessel.Row
      sn_ = vessel.Worksheet.Name
      With Sheets(sn_)
        
          Set a = .Range(.Cells(strow - 1, stcol - 1), .Cells(strow - 1, stcol + ccount))
          Set b = .Range(.Cells(strow + rcount, stcol - 1), .Cells(strow + rcount, stcol + ccount))
          Set c = .Range(.Cells(strow - 1, stcol - 1), .Cells(strow + 1, stcol - 1))
          Set d = .Range(.Cells(strow - 1, stcol + ccount), .Cells(strow + 1, stcol + ccount))
                        
          Set edge = Union(a, b, c, d)
            
          For Each e In edge
              If e.Value <> "" Then
                  CheckBorder = False
                  Exit For
              End If
          Next
      End With
End Function
[/vba]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеТак нужно? Логику не переделывал, только добавил ссылку на лист и некоторые косяки поправил
[vba]
Код
Function CheckBorder(ByRef vessel As Range) As Boolean
      Dim a As Range, b As Range, c As Range, d As Range, sn_
        
      CheckBorder = True
        
      ccount = vessel.Columns.Count
      rcount = vessel.Rows.Count
      stcol = vessel.Column
      strow = vessel.Row
      sn_ = vessel.Worksheet.Name
      With Sheets(sn_)
        
          Set a = .Range(.Cells(strow - 1, stcol - 1), .Cells(strow - 1, stcol + ccount))
          Set b = .Range(.Cells(strow + rcount, stcol - 1), .Cells(strow + rcount, stcol + ccount))
          Set c = .Range(.Cells(strow - 1, stcol - 1), .Cells(strow + 1, stcol - 1))
          Set d = .Range(.Cells(strow - 1, stcol + ccount), .Cells(strow + 1, stcol + ccount))
                        
          Set edge = Union(a, b, c, d)
            
          For Each e In edge
              If e.Value <> "" Then
                  CheckBorder = False
                  Exit For
              End If
          Next
      End With
End Function
[/vba]

Автор - _Boroda_
Дата добавления - 21.04.2015 в 14:04
irozanov Дата: Вторник, 21.04.2015, 15:50 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 2
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Да, так. Спасибо большое.
 
Ответить
СообщениеДа, так. Спасибо большое.

Автор - irozanov
Дата добавления - 21.04.2015 в 15:50
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Range и другой лист (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!