Несоответствие типов решено без редактирования кода VBA - PullRequest
1 голос
/ 07 октября 2019

У меня есть бюджетная электронная таблица с кучей макросов, которые используются для управления листами и данными. Все отлично работает. По какой-то причине после сохранения новой версии в одном из макросов «Добавить скидку» возникает ошибка несоответствия типов. Я проанализировал код, не смог найти проблему, затем вернулся к предыдущей работающей сборке, в которой был точно такой же код. Странная вещь заключается в том, что решение, которое я нашел для работы, состоит в том, чтобы вырезать и перекомпилировать код в модуле (т.е. без изменений в коде, просто удалить и перекомпилировать).

Я использую Mac, хотя я не знаю, является ли это фактором. Это случилось уже дважды за последние пару месяцев, и я не знаю почему! Кто-нибудь знает, что может вызвать это и как предотвратить это?

Я отредактировал код, чтобы избавиться от лишних вещей. Строка, провоцирующая Несоответствие типов в отладке, была

For Each sh In Worksheets(arrShts)

Большое спасибо

Sub AddDiscount()

Dim lineCode As String
Dim arrShts As Variant
Dim row As Integer
Dim sh As Worksheet
Dim rngS As Range, rngD As Range, totalCell As Range, totalSection As Range, discountSection As Range
Dim cell As Range, formla As Range

lineCode = Selection.EntireRow.Cells(, 1).Value
row = Selection.row
arrShts = Array("Control", "Budget", "OT", "WD", "CdA")

'Proceed with line item discount...
If lineCode = "L" Then
    For Each sh In Worksheets(arrShts)
        sh.Rows(row + 1).EntireRow.Insert Shift:=xlShiftDown, _
                                CopyOrigin:=xlFormatFromLeftOrAbove
        sh.Rows(row + 1).ClearComments
        sh.Rows(row + 1).FormatConditions.Delete
        sh.Rows(row).EntireRow.Copy sh.Rows(row + 1).EntireRow
    Next sh

End If

End Sub

1 Ответ

0 голосов
/ 07 октября 2019

Я проверил код, и он работает как шарм. Единственное, что мне приходит в голову (помимо проблемы с Mac), это то, что пользователь установил фокус на другой Workbook, и это вызывает ошибку (потому что он не может найти эти Sheets ofc).

Попробуйте указать Workbook имя и посмотрите, если вы получите какие-либо результаты:

For Each sh In Workbooks("My workbook.xlsm").Worksheets(arrShts)

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...