Excel VBA падает после завершения подпрограммы - PullRequest
0 голосов
/ 02 марта 2011

Этот скрипт предназначен для сброса шаблона путем копирования скрытого шаблона рабочего листа и удаления существующего листа (после повторного заполнения некоторых справочных данных). Я проверил его, и он отлично работает в режиме отладки.

Option Explicit
Sub reset_PrintLayout_byCopy()
   'the script replace the used printlayout with a copy from the hidden master.

   Dim MeetingData() As String
   Dim i As Integer
   Dim j As Integer
   Dim currentSheet As String
   Dim datacolumns() As String
   Dim userConfirm As String
   ReDim Preserve MeetingData(3, 2)
   ReDim Preserve datacolumns(2)

   'warning about deleting data
   userConfirm = MsgBox(Prompt:="Resetting the template will erase all data on the " _
   & "PrintLayout Template. Choose ""Cancel"",  if you wish to save the file first", _
   Buttons:=vbOKCancel, Title:="Data to be erased!")

  If (userConfirm = vbCancel) Then
      Exit Sub
  End If

  'set parameters
  datacolumns(0) = "D1"
  datacolumns(1) = "I1"


  'stop screen updating and displaying warnings
  Application.ScreenUpdating = False
  Application.DisplayAlerts = False


  'set active sheet
  currentSheet = ActiveSheet.Name

  'capture meeting data already filled out
  For j = 0 To UBound(datacolumns) - 1
      For i = 1 To 3
          If Worksheets(currentSheet).Cells(i, Range(datacolumns(j)).Column).Value <> ""    Then
              MeetingData(i - 1, j) = Worksheets(currentSheet).Cells(i,  Range(datacolumns(j)).Column).Value
           End If

       Next i
   Next j

   'make hidden template visible
   Worksheets("hiddenPrintLayoutTemplate").Visible = True

  'Rename current Sheet
       Sheets(currentSheet).Name = "used_Print_Layout"

  ''add a new sheet
  '    ActiveWorkbook.Worksheets.Add(before:=Sheets("used_Print_Layout")).Name = "PrintLayout Template"

   'copy hiddentemplate before current sheet
       Worksheets("hiddenPrintLayoutTemplate").Copy before:=Sheets("used_Print_Layout")
       ActiveSheet.Name = currentSheet

   'set rowheight for title rows
       Range("A12").EntireRow.RowHeight = 24
       Range("A18").EntireRow.RowHeight = 24

   'delete current used printlayout
        Worksheets("used_Print_Layout").Delete

   'refilled meeting data
   For j = 0 To UBound(datacolumns) - 1
       For i = 1 To 3
           If MeetingData(i - 1, j) <> "" Then
               Worksheets(currentSheet).Cells(i, Range(datacolumns(j)).Column).Value =  MeetingData(i - 1, j)
            End If
       Next i
   Next j

   'hide PrintLayout template
   'Worksheets("hiddenPrintLayoutTemplate").Visible = xlSheetVeryHidden
   'Sheets("PrintLayout Template").Select

   'activate screenupdating and display warnings
   Application.DisplayAlerts = True
   Application.ScreenUpdating = True
End Sub 

Когда он запускается в режиме макросъемки на кнопке, он запускается, но Excel падает, когда это сделано. Я не могу найти в чем проблема. Есть идеи?

Ответы [ 2 ]

2 голосов
/ 04 марта 2011

Я не уверен, что при отладке вы имеете в виду пошаговое продвижение, но вы можете попробовать вставить операторы stop в ключевые моменты кода.Так, например, вы можете поместить оператор stop в следующую часть:

'capture meeting data already filled out
For j = 0 To UBound(datacolumns) - 1
    For i = 1 To 3
        If Worksheets(currentSheet).Cells(i, Range(datacolumns(j)).Column).Value <> "" Then
            MeetingData(i - 1, j) = Worksheets(currentSheet).Cells(i,Range(datacolumns(j)).Column).Value
        End If
    Next i
Next j

stop

'make hidden template visible
Worksheets("hiddenPrintLayoutTemplate").Visible = True

Вы можете увидеть, работает ли код до этой точки (т.е. запустить его без отладки).Если это так, удалите оператор stop и поместите его ниже в коде.Повторяйте это, пока не найдете утверждения, которые вызывают ваш сбой - возможно, тогда появится причина.

0 голосов
/ 13 ноября 2016

Как правило, если в Excel VBA возникает странный сбой, попробуйте переключить принтер по умолчанию для Windows на Microsoft XPS Document Writer.Кажется странным, но это помогло мне решить проблемы, когда я потратил много часов только на то, чтобы понять, что это виновник.

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