2015-11-27 2 views
0

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

Private Sub CommandButton1_Click() 
Dim ws1 As Worksheet 
Dim trigger As Integer 

trigger = 0 

Application.ScreenUpdating = False 
Application.DisplayAlerts = False 
For i = 1 To Sheets.Count 
    If Sheets(i).Name = "Data" Then 
     trigger = 1 
     Sheets("Data").Delete 
     Sheets("raw_Data").Visible = True 
    Set ws1 = Sheets("raw_Data") 
    ws1.Copy Sheets(Sheets.Count) 
    Sheets("raw_Data").Visible = False 
    End If 
Next i 

If trigger = 0 Then 
    Sheets("raw_Data").Visible = True 
    Set ws1 = ThisWorkbook.Worksheets("raw_Data") 
    ws1.Copy ThisWorkbook.Sheets(Sheets.Count) 
    Sheets("raw_Data").Visible = False 
End If 

Application.ScreenUpdating = True 
Application.DisplayAlerts = True 
Unload Me 
    ActiveSheet.Name = "Data" 
End Sub 

Я запускаю какой-то бесконечный цикл здесь? Если я удалю:

ActiveSheet.Name = "Data" 

Excel больше не сбой.

+0

Я не могу воспроизвести вашу ошибку. Ваш код работает в моем Excel без сбоев. Можете ли вы загрузить рабочую книгу, которая продемонстрирует проблему с удаленными конфиденциальными данными, на какой-нибудь веб-сайт обмена, такой как OneDrive или DropBox, и т. Д. И разместите ссылку здесь? –

+0

https://www.dropbox.com/s/7uflgpdpnig4d80/%C3%BClesanne.xlsm?dl=0 нажмите «ALUSTA TESTIGA» и «VAATA ANDMEID» дважды – sellistnimeikkaeiole

+0

ouh ... sry ... »ALUSTA TESTIGA "-" VAATA ANDMEID "-" TAGASI TESTI JUURDE "-" VAATA ANDMEID " – sellistnimeikkaeiole

ответ

0

Я с Рон на этом. Я сделал немного более чистую версию кода, и, возможно, он прольет какой-то свет в проблему.

Option Explicit 

Private Sub CommandButton1_Click() 

    Const strDATA_SHEET As String = "Data" 
    Const strDATA_RAW_SHEET As String = "raw_Data" 

    Dim shDataRaw As Worksheet 

    Call TurnExtrasOff 

    ' Check if we have the sheet data if so then delete it 
    If DoesWorksheetExist(strDATA_SHEET, ThisWorkbook) Then 
     Application.DisplayAlerts = False 
      ThisWorkbook.Sheets(strDATA_SHEET).Delete 
     Application.DisplayAlerts = True 
    End If 

    ' Lets copy the raw data sheet. 
    Set shDataRaw = ThisWorkbook.Sheets(strDATA_RAW_SHEET) 
    shDataRaw.Visible = xlSheetVisible 
    shDataRaw.Copy ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count) 

    ' Rename the sheet and hide raw data 
    ActiveSheet.Name = strDATA_SHEET 
    shDataRaw.Visible = xlSheetHidden 

    Call TurnExtrasOn 

    ' Unload the user form 
    Unload Me 

End Sub 


' Procedure to turn extra features on 
Sub TurnExtrasOn() 
    With Application 
     .ScreenUpdating = True 
     .EnableEvents = True 
     .Calculation = xlCalculationAutomatic 
    End With 
End Sub 

' Procedure to turn extra features oFF 
Sub TurnExtrasOff() 
    With Application 
     .ScreenUpdating = False 
     .EnableEvents = False 
     .Calculation = xlCalculationAutomatic 
    End With 
End Sub 


' Function to check if a sheet exists 
Function DoesWorksheetExist(ByVal sheetname As String, aWorkbook As Workbook) As Boolean 

    On Error Resume Next 
    DoesWorksheetExist = (Not aWorkbook.Sheets(sheetname) Is Nothing) 
    On Error GoTo 0 

End Function 

Я надеюсь, что это помогает

+0

Привет. Спасибо за помощь. Это все еще сбивает тебя. Теперь я на 100% понятен, что это не ошибка кода. – sellistnimeikkaeiole

Смежные вопросы