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

Вход

Регистрация

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

 

= Мир MS Excel/UDF - ссылки на ячейки для всех макросов проекта - Мир MS Excel

  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_, DrMini  
UDF - ссылки на ячейки для всех макросов проекта
ddp1481ne Дата: Вторник, 30.12.2025, 19:39 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 11
Репутация: 3 ±
Замечаний: 0% ±

2013
Добрый день!

При написании большого проекта задался вопросом - как назначить переменные часто используемым ячейкам/диапазонам ячеек и при изменении адреса изменять его в одном месте, а не вылавливать в модулях, листах и формах?
Искал (возможно плохо) по форумам и ничего простого не нашёл. Были варианты с глобальными переменными и макросом их обновляющим. Попробовал сам воспользоваться пользовательским типом данных в виде массива содержащего ключ, имя листа и координаты - получилось, но слишком громоздко и неудобно. Итогом поисков и размышлений стало вот это:

[vba]
Код
Function rwCell(ByRef xRange, ByRef func, Optional ByVal xData) 'read/write
    
    Select Case xRange
        Case "L1c1":    Set xList = Лист1.Cells(9, 3)
        Case "L1c2":    Set xList = Лист1.Cells(9, 6)
        Case "L1c3":    Set xList = Лист1.Cells(9, 12)
        Case "L1c4":    Set xList = Лист1.Cells(11, 6)
        Case "L1cArr":  Set xList = Лист1.Range(Лист1.Cells(9, 9), Лист1.Cells(11, 10))
        
        Case Else: Exit Function
    End Select
    
    With xList
        If IsMissing(xData) Then
            Select Case func
                Case "v2":  rwCell = .Value2
                Case "ic":  rwCell = .Interior.Color
                Case "fs":  rwCell = .Font.Size
            End Select
        Else
            Select Case func
                Case "v2":  .Value2 = xData
                Case "ic":  .Interior.Color = xData
                Case "fs":  .Font.Size = xData
            End Select
        End If
    End With
    
End Function
[/vba]

Пока это скорее черновик функции.

Для примера сделал чтение/запись значения ячеек, их цвета и размера шрифта. Так же проверил чтение/запись массива.

Основными требованиями были:
- простота
- обращение к внутреннему имени листа
- изменение адреса ячейки только в одном месте кода

Главным минусом считаю плохую "читаемость" кода:

[vba]
Код
rwCell "L1c1", "v2", 67890      'Запись

MsgBox rwCell("L1c2", "v2")     ' Чтение
[/vba]

!!! И самое главное - возможно из-за своего низкого уровня знания VBA я изобретаю "велосипед" и есть более простое решение? !!!

Простой пример в файле:
К сообщению приложен файл: udf_rwcell_ddp1481ne.xls (67.0 Kb)
 
Ответить
СообщениеДобрый день!

При написании большого проекта задался вопросом - как назначить переменные часто используемым ячейкам/диапазонам ячеек и при изменении адреса изменять его в одном месте, а не вылавливать в модулях, листах и формах?
Искал (возможно плохо) по форумам и ничего простого не нашёл. Были варианты с глобальными переменными и макросом их обновляющим. Попробовал сам воспользоваться пользовательским типом данных в виде массива содержащего ключ, имя листа и координаты - получилось, но слишком громоздко и неудобно. Итогом поисков и размышлений стало вот это:

[vba]
Код
Function rwCell(ByRef xRange, ByRef func, Optional ByVal xData) 'read/write
    
    Select Case xRange
        Case "L1c1":    Set xList = Лист1.Cells(9, 3)
        Case "L1c2":    Set xList = Лист1.Cells(9, 6)
        Case "L1c3":    Set xList = Лист1.Cells(9, 12)
        Case "L1c4":    Set xList = Лист1.Cells(11, 6)
        Case "L1cArr":  Set xList = Лист1.Range(Лист1.Cells(9, 9), Лист1.Cells(11, 10))
        
        Case Else: Exit Function
    End Select
    
    With xList
        If IsMissing(xData) Then
            Select Case func
                Case "v2":  rwCell = .Value2
                Case "ic":  rwCell = .Interior.Color
                Case "fs":  rwCell = .Font.Size
            End Select
        Else
            Select Case func
                Case "v2":  .Value2 = xData
                Case "ic":  .Interior.Color = xData
                Case "fs":  .Font.Size = xData
            End Select
        End If
    End With
    
End Function
[/vba]

Пока это скорее черновик функции.

Для примера сделал чтение/запись значения ячеек, их цвета и размера шрифта. Так же проверил чтение/запись массива.

Основными требованиями были:
- простота
- обращение к внутреннему имени листа
- изменение адреса ячейки только в одном месте кода

Главным минусом считаю плохую "читаемость" кода:

[vba]
Код
rwCell "L1c1", "v2", 67890      'Запись

MsgBox rwCell("L1c2", "v2")     ' Чтение
[/vba]

!!! И самое главное - возможно из-за своего низкого уровня знания VBA я изобретаю "велосипед" и есть более простое решение? !!!

Простой пример в файле:

Автор - ddp1481ne
Дата добавления - 30.12.2025 в 19:39
  • Страница 1 из 1
  • 1
Поиск:

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