Почему я получаю сообщение «Мы обнаружили проблему с некоторым содержимым в .xlsm» каждый раз, когда автоматически вычисляю лист? - PullRequest
0 голосов
/ 08 марта 2019

У меня есть фрагмент кода, который извлекает события календаря из календаря Google, который связан с моим Excel.Он работает отлично, однако каждый раз, когда я добавляю код для обновления определенного листа («Календарь»), сохранения и закрытия.В следующий раз, когда я снова открою файл, мне будет предложено следующее сообщение: Мы обнаружили проблему с некоторым содержимым в .xlsm.Вы хотите, чтобы мы попытались восстановить столько, сколько мы можем?Если вы доверяете источнику этой книги, нажмите кнопку «Да».

Обратите внимание, что это происходит только тогда, когда я добавляю: Листы («Календарь»). Вычислить или Application.Calculation = xlAutomatic для книги.Я также попытался ввести флажок, и только если флажок установлен и макрос запущен, лист будет обновлен.Это вызвало ту же ошибку.Когда код вычисления отсутствует, это сообщение не появляется.

Я сбит с толку и не могу найти аналогичную ситуацию, когда причиной является расчет листа.Я ценю любую помощь.

Ни один из кодов не будет потерян или изменен, файл просто выглядит как [Восстановлено]

    Sub listlist()
Dim olApp As Object, olNS As Object, olFolder As Object, olApt As Object, NextRow As Long, FromDate As Date, ToDate As Date, z As Integer, num As Integer
Sheets("Calendar").Columns("A:B").ClearContents

num = ActiveSheet.Cells(1, 1).Value - month(Now)
FromDate = WorksheetFunction.EoMonth(Date, 0 + num) + 1
ToDate = WorksheetFunction.EoMonth(Date, 1 + num)


On Error Resume Next
Set olApp = GetObject(, "Outlook.Application")
If Err.Number > 0 Then Set olApp = CreateObject("Outlook.Application")
On Error GoTo 0

Set olNS = olApp.GetNamespace("MAPI")
Set olFolder = olNS.Folders("Internet Calendars").Folders("Calend")

NextRow = 2


With Sheets("Calendar")
    .Range("A1:C1").Value = Array("Project", "Date", "First Trim")
    For Each olApt In olFolder.Items
        If (olApt.Start >= FromDate And olApt.Start <= ToDate) Then
            .Cells(NextRow, "A").Value = olApt.subject
            .Cells(NextRow, "B").Value = CDate(olApt.Start)
            NextRow = NextRow + 1
        Else
        End If
    Next olApt
    .Columns.AutoFit
End With

Set olApt = Nothing
Set olFolder = Nothing
Set olNS = Nothing
Set olApp = Nothing

'Sort
Dim Lastrow As Integer
Lastrow = Sheets("Calendar").Cells(Rows.Count, 1).End(xlUp).Row
Worksheets("Calendar").Sort.SortFields.Add2 Key:=Range("B2").End(xlDown) _
    , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With Worksheets("Calendar").Sort
    .SetRange Range(Cells(1, 1), Cells(Lastrow, 3))
    .Header = xlYes
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With


Sheets("Calendar").Calculate


'Update Meeting dates

    z = 3

    For j = 2 To 20
        If Sheets("Calendar").Cells(j, 5).Value <> "" Then
        For I = 2 To 160
            If Sheets("Consultants").Cells(I, 15).Value = Sheets("Calendar").Cells(j, 5).Value Then
                For h = 9 To 160
                    If Sheets("Consultants").Cells(I, 1).Value = ActiveSheet.Cells(h, 2).Value Then
                        ActiveSheet.Cells(h, 4).Value = Sheets("Calendar").Cells(j, 2).Value
                        Exit For
                    End If
                Next h
            End If
        Next I
        End If
    Next j

End Sub

1 Ответ

0 голосов
/ 08 марта 2019

Я исправил эту проблему, воспользовавшись предложением @FunThomas. Я запустил книгу с нуля и сделал следующее:

-Вводимые формулы через vba вместо того, чтобы оставлять ячейки в Excel заполненными формулами поменять очищенные столбцы A & B, чтобы очистить все ячейки, так как я знаю, что вручную введите формулы

При этом мне больше не нужно вычислять лист. Я не проверял внедрение вычислений в рабочую книгу, я не хочу рисковать, что-нибудь испортится.

...