Функция не полностью выполнена в подпрограмме - PullRequest
0 голосов
/ 21 марта 2019

Я пытаюсь прикрепить тело письма (диапазон Excel), используя процедуру публикации html (внутри функции). Это прекрасно работает, пока я не пытаюсь отформатировать базовый лист из того, что создан HTML-файл.

"###" пометьте важные строки в коде.

В этом фрагменте кода функция запускается (RangetoHTNL (rng)) из основного подпрограммы.

    With OutMail
    .To = rec
    .cc = cc
    .BCC = ""
    .Subject = "Convertibles - Execution " & cover.Range("D4").Value 
    .HTMLBody = StrBody & RangetoHTML(rng) '#### Here the function get launched #####
    .Attachments.Add (filename)
    .Display   'or use .Send
End With

Теперь странно то, что функция работает правильно, пока я не захочу изменить ширину столбца. После этой строки алгоритм «выпрыгивает» из функции и выполняет базовую подпрограмму, не завершая всю функцию в первую очередь.

Найдите ниже фрагмент кода функции, где я делаю некоторое форматирование в листе Excel, который впоследствии должен быть опубликован как HTML.

With TempWB.Sheets(1)
    .Cells(1).PasteSpecial Paste:=8
    .Cells(1).PasteSpecial xlPasteValues, , False, False
    .Cells(1).PasteSpecial xlPasteFormats, , False, False

    row = .Range("A" & Rows.Count).End(xlUp).row
    lastcolumn = .Cells(6, Columns.Count).End(xlToLeft).Column
    default = .Range(.Cells(6, 1), .Cells(6, lastcolumn)).Width '-> Default width of whole table Range("A:?")
    ReDim myArray(row)
    For i = 1 To row
    myCell = .Cells(i, 1).text
    mysize = getLabelPixel(myCell)
    myArray(x) = mysize
    Next i

    Max = WorksheetFunction.Max(myArray)
    max_width = Max / con
    default_width = default / con

    If max_width > default_width Then
    prop = max_width / lastcolumn

    '####### until here the function is executed. Then it jumps out #######

    .Columns("1:" & lastcolumn).Width = prop
    .Columns("2:" & lastcolumn).Columns.AutoFit
    '###### without these two lines the function is executed properly #####

    End If
    .Cells(1).Select
    Application.CutCopyMode = False
On Error Resume Next
    .DrawingObjects.Visible = True
    .DrawingObjects.Delete
On Error GoTo 0
End With

Кто-нибудь когда-либо испытывал что-то подобное? Я уже пробовал другие версии кодирования (например, не используя «С» - оператор Statement) - Ничего не помогло.

1 Ответ

2 голосов
/ 21 марта 2019

Я предполагаю, что в подпрограмме, вызывающей функцию, помещено on error resume next, затем возникает ошибка при изменении размера столбцов (возможно, переполнение, если одна из переменных недопустима).

Убедитесь, что вы указалиon error goto 0 непосредственно перед вызовом функции, затем отладка функции и проверка правильности переменных.

/ edit: Теперь, когда у нас есть ошибка, давайте рассмотрим ее.Я понимаю, что здесь происходит ошибка:

.Columns("1:" & lastcolumn).Width = prop

Это выглядит неправильно, попробуйте вместо этого (убедитесь, что lastcolumn и prop действительны):

.Cells(1, lastcolumn).ColumnWidth = prop
...