簡體   English   中英

子例程完成后Excel VBA崩潰

[英]Excel VBA crashes after subroutine finishes

該腳本用於通過復制隱藏的工作表模板並刪除現有工作表(在重新填充一些參考數據之后)來重置模板。 我已經對其進行了測試,並且在調試模式下可以正常運行。

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會崩潰。 我找不到問題所在。 有任何想法嗎?

我不確定調試是否意味着逐行進行,但是您可以嘗試在代碼的關鍵點插入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語句並將其放在代碼的更下方。 重復此操作,直到找到導致崩潰的語句-也許原​​因就會出現。

通常,如果在Excel VBA中遇到奇怪的崩潰,請嘗試將Windows默認打印機切換為Microsoft XPS Document Writer。 似乎很奇怪,但這對我有用,在我浪費了很多時間才發現這是罪魁禍首的問題上。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM