Это не сумасшедший, чтобы хотеть использовать объектно-ориентированный язык функции VBA, но использование случае вы даете не , что далеко от встроенных объектов, которые выделяются уже обеспечивает и поэтому ISN» t ясно, сколько вы получите получить от сложности, которую вы будете добавлять, чтобы получить его. Есть яркий кусок энергии, который нужно использовать в excel vba, но это , чтобы играть в сильные стороны, когда можете.
Вы можете так же легко раскрасить отличаясь клетки более эффективно с помощью кода в конце этого поста - явно не делать все, что вы собираетесь, но ясно то, что не требует прибегать к ОО для одного столбцов и строк.
Excel и vba сильно отличаются от того, что программисты используются для получения чего-то вроде python, которые обеспечивают полное наследование классов . С VBA вы застряли, имея только наследование интерфейса , что позволит вам повторно использовать код. Но , если вы не будете осторожны, вы можете очень легко получить много кода-заглушки, который вы должны скопировать из класса в класс, чтобы быть , способным удовлетворить интерфейс, который вы хотите реализовать в своих классах.
Там же еще одна вещь, которую вы определенно должны обернуть вокруг головы, идущий от обычного языка OO и это сколько данных при репликации в ваших объектов в памяти, а не просто выходить на рабочего листа и доступа к ним, как обязательный. Есть естественная тенденция, чтобы хотеть загружать все в объект и манипулировать оттуда - но это настояние, вы должны действительно подумать дважды о в этой среде.
Если у вас есть серверный сервер, который будет проверять данные , которые перемещаются между вашими листами и базой данных, то, как минимум, , у вас есть способ отделить обычные проблемы MVC.Фактически, вы бы использовали excel как своего рода веб-страницу с дополнительной функциональностью , которую пользователи электронной таблицы любят. Если у вас нет поддержки, то вам необходимо очень внимательно относиться к проверке ваших моделей и данных в этой среде . Вы должны получить , который используется для защиты рабочего листа, за исключением тех ячеек , что пользователям придется вводить данные (при условии, что вы пишете код , чтобы принести пользу другим, кроме вас самих). На самом деле это хорошая идея для цветных ячеек ввода и вычисленных ячеек с отличными цветами , чтобы выделить эту разницу. Последнее должно быть защищено , тогда как первое, где необходимо, может инициировать события, которые будут проверять вход и обновлять состояние модели (и в идеале работать с внутренним концом, если у вас есть).
Защитные ячейки также позволяют скрывать информацию о состоянии в хорошо определенных разделах рабочего листа, которые могут использоваться для ссылки на рабочие объекты. Фактически, хорошими примерами использования являются те, которые разделяют четко определенные ячейки в качестве пользовательского интерфейса для конкретных экземпляров класса .
По возможности вы должны использовать диапазоны для ссылок на разделы на одном и том же рабочем листе и на других. Названные диапазоны - ваш друг здесь. Данные проверенные списки также очень полезны для непрерывных данных и должны использоваться по возможности, так как они очень эффективны в том, что они делают. Для несмежных наборов данных, которые ограничены по размеру, вы можете использовать комбинированные поля ActiveX , которые могут ссылаться на экземпляры объектов в памяти, если их обработчики событий переданы идентификатор, уникальный для последнего.
При проверке изменений событий вы должны быть осторожны с опросом Worksheet_Change , в котором вы увидите множество примеров из Интернета. Это может быть пожевать немного времени, если вы не будете осторожны.
Подводя итог: используйте любую мощность, которую вы можете использовать от excel, и воздержитесь от повторного изобретательства колес.
' Compares the sheet 1 of the workbook you're in
' with sheet1 of the workbook file in 'Filename'
' and colors the cells that differ between the two.
Sub compare_workbooks_sheet1()
Dim Filename As String
Filename = "C:\MyBook.xlsm"
Dim wrkbk1 As Workbook
Set wrkbk1 = Workbooks.Open(Filename:=Filename)
Dim sht1 As Worksheet ' worksheet you're in
Dim sht2 As Worksheet ' worksheet you've opened to compare
Set sht1 = wrkbk1.Worksheets("Sheet1")
Set sht2 = ThisWorkbook.Worksheets("Sheet1")
Dim row As Long, col As Long
With sht2
For row = 1 To sht1.UsedRange.Rows.Count
For col = 1 To sht1.UsedRange.Columns.Count
If sht1.Cells(row, col) <> sht2.Cells(row, col) Then
.Cells(row, col).Interior.ColorIndex = 5
End If
Next
Next
End With
wrkbk1.Close
End Sub
Hi again :). На мой взгляд, вы каким-то образом переписываете модель COM-класса Excel по-своему, и это недостаточно оправдано. Если вы хотите упростить или добавить некоторые операции, которые недостаточно присутствуют в модели, такие как 'Sheet_Exists (..), Header_Exists (..)' и т. Д., Я бы пошел с обогащением модели своим собственным дополнительным набором но не переписывая модель класса. –
Знаете ли вы хорошую диаграмму модели COM класса Excel? Я стараюсь избегать использования запутанного способа, который обычно используется для итерации по ячейкам в диапазоне (для меня, как правило, над столбцами, а затем над значениями в столбце). Я никогда не помню, как получить последнюю строку в столбце, последнем столбце в строке и т. Д. Я написал для них функции, но это просто так неинтуитивно. Я думал, что этот код в классе упростит процесс. Неужели я ошибаюсь? –
Я не имею его в графическом или UML-формате. [Это] (https://msdn.microsoft.com/en-us/library/office/ff194068.aspx) является руководством для объектной модели Excel. Я нашел графику для * маленькой части * модели [здесь] (https://powerspreadsheets.com/excel-vba-object-model/) –