Страницы: 1
RSS
Удаление активной книги без сохранения через VBA
 
Здравствуйте!
Не могли бы подсказать, как убить активную книгу без сохранения, в том числе чтоб не появлялась информационное сообщение: "Сохранить изменения перед переключением состояния файла?"
Спасибо.
 
Если через VBA, то
Код
ActiveWorkbook.Close 0
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
The_Prist, это закрытие книги, а не ее удаление.

Удаление через Kill iFullName
Есть макрос для удаления активной книги:
Код
Private Sub Kill_ActiveWorkbook()
    iFullName$ = ActiveWorkbook.FullName
    ActiveWorkbook.ChangeFileAccess Mode:=xlReadOnly
    SetAttr iFullName$, vbNormal: Kill iFullName$
    ActiveWorkbook.Close saveChanges:=False
    
End Sub

Но выскакивает табличка: "Сохранить изменения перед переключением состояния файла?" Как переделать код, чтобы она не выскакивала, чтобы файл удалялся без всяких предложений о сохранении?

Спасибо.
 
stevie44, попробуйте
Код
Application.DisplayAlerts = False
Потом верните True.
 
Цитата
stevie44 написал: Есть макрос
и чего бы его в самом начале не привести? Почему считает, что мы должны были угадать как получается активная книга? Я подумал, что она создается в процессе.
Цитата
stevie44 написал:  это закрытие книги, а не ее удаление
А про удаление Вы сами ничего не говорили. Слово "убить" для меня не означало "удалить" - его можно понять по разному, я понял как закрыть. Просьба - в будущем старайтесь пояснять задачу так, чтобы было понятно без двояких толкований. И Вам и нам проще будет.
Вот так попробуйте:
Код
Private Sub Kill_ActiveWorkbook()
    iFullName$ = ActiveWorkbook.FullName
    ActiveWorkbook.Saved = True
    ActiveWorkbook.ChangeFileAccess Mode:=xlReadOnly
    SetAttr iFullName$, vbNormal: Kill iFullName$
    ActiveWorkbook.Close saveChanges:=False
End Sub
Изменено: The_Prist - 15.11.2016 10:27:19
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
The_Prist, тема называется: "Удаление активной книги без сохранения через VBA" :)))))  А за решение спасибо большое и Вам и Казанскому, и то и другое работают!
Очень помогли!
 
Извиняюсь, это уже немного иного плана вопрос, а возможно ли этот код зашить внутрь другого макроса?
Он работает только отдельно, а внутри другого не срабатывает, причем я пробовал переменную iFullName$ обозначать как вначале Dim, так и отдельно.
Код
Sub SaveIn()
Dim y$, x$, ActiveFileName$, Surname$, Surname1$, Surname2$, Surname3$, q$, q1$, q2$, q3$, q4$, q5$
    ActiveFileName = ActiveWorkbook.Name
    ActiveWorkbook.Save
    
    Columns("B:B").Select
    Selection.Find(What:="Итого").Activate
    y = ActiveCell.Offset(2, -1).Value
    x = ActiveCell.Offset(3, -1).Value
    
        Surname = InStr(1, ActiveFileName, " ", vbTextCompare)
        Surname1 = Left(ActiveFileName, Surname + 1)
        Surname2 = Mid(ActiveFileName, InStr(Surname + 1, ActiveFileName, " ", vbTextCompare) + 1, 1)
        Surname3 = Surname1 & "." & Surname2 & "." & "_" & y & ""
   
    ChDir "C:\Programs Files\Save\" & x & ""
    q = Dir("C:\Program Files\Save\" & x & "\" & Surname3 & ".xls")
    q1 = Dir("C:\Program Files\Save\" & x & "\" & Surname3 & " (2).xls")
    q2 = Dir("C:\Program Files\Save\" & x & "\" & Surname3 & " (3).xls")
    q3 = Dir("C:\Program Files\Save\" & x & "\" & Surname3 & " (4).xls")
    q4 = Dir("C:\Program Files\Save\" & x & "\" & Surname3 & " (5).xls")
    q5 = Dir("C:\Program Files\Save\" & x & "\" & Surname3 & " (6).xls")
    
   
    If q5 = Surname3 & " (6).xls" Then
        ActiveWorkbook.SaveAs Filename:= _
        "C:\Program Files\Save\" & x & "\" & Surname3 & " (7).xls", _
        FileFormat:=xlExcel8, Password:="", WriteResPassword:="", _
        ReadOnlyRecommended:=False, CreateBackup:=False
    ElseIf q4 = Surname3 & " (5).xls" Then
        ActiveWorkbook.SaveAs Filename:= _
        "C:\Program Files\Save\" & x & "\" & Surname3 & " (6).xls", _
        FileFormat:=xlExcel8, Password:="", WriteResPassword:="", _
        ReadOnlyRecommended:=False, CreateBackup:=False
    ElseIf q3 = Surname3 & " (4).xls" Then
        ActiveWorkbook.SaveAs Filename:= _
        "C:\Program Files\Save\" & x & "\" & Surname3 & " (5).xls", _
        FileFormat:=xlExcel8, Password:="", WriteResPassword:="", _
        ReadOnlyRecommended:=False, CreateBackup:=False
    ElseIf q2 = Surname3 & " (3).xls" Then
        ActiveWorkbook.SaveAs Filename:= _
        "C:\Program Files\Save\" & x & "\" & Surname3 & " (4).xls", _
        FileFormat:=xlExcel8, Password:="", WriteResPassword:="", _
        ReadOnlyRecommended:=False, CreateBackup:=False
    ElseIf q1 = Surname3 & " (2).xls" Then
        ActiveWorkbook.SaveAs Filename:= _
        "C:\Program Files\Save\" & x & "\" & Surname3 & " (3).xls", _
        FileFormat:=xlExcel8, Password:="", WriteResPassword:="", _
        ReadOnlyRecommended:=False, CreateBackup:=False
    ElseIf q = Surname3 & ".xls" Then
        ActiveWorkbook.SaveAs Filename:= _
        "C:\Program Files\Save\" & x & "\" & Surname3 & " (2).xls", _
        FileFormat:=xlExcel8, Password:="", WriteResPassword:="", _
        ReadOnlyRecommended:=False, CreateBackup:=False
    Else
        ActiveWorkbook.SaveAs Filename:= _
        "C:\Program Files\Save\" & x & "\" & Surname3 & ".xls", _
        FileFormat:=xlExcel8, Password:="", WriteResPassword:="", _
        ReadOnlyRecommended:=False, CreateBackup:=False
    End If
        
    iFullName$ = ActiveWorkbook.FullName
    ActiveWorkbook.Saved = True
    ActiveWorkbook.ChangeFileAccess Mode:=xlReadOnly
    SetAttr iFullName$, vbNormal: Kill iFullName$
    ActiveWorkbook.Close saveChanges:=False
    
End Sub
 
Цитата
stevie44 написал:
этот код зашить внутрь другого макроса?
можно. Только непонятно какой код и внутрь какого макроса...
Так же непонятно с какой целью и в какой момент должно все это выполняться...
Изменено: The_Prist - 15.11.2016 11:15:34
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
The_Prist, пардон, код рабочий
Вопрос вот в чем: есть исходный файл, который я копирую к себе в личную папку для обработки. Есть 2 макроса: 1 обрабатывает файл, а другой осуществляет его пересохранение на сетевом ресурсе в общем доступе с другим именем. Выше указан как раз 2-й макрос, который пересохраняет измененный файл на сетевом ресурсе.
Т.е., получается, был файл "Книга1_old", макрос его пересохраняет в другую папку с именем "Книга1_new". Т.е. после пересохранения файла активным становится файл "Книга1_new", а как мне удалить "Книгу1_old", т.е. исходный файл?
Спасибо.
Изменено: stevie44 - 15.11.2016 15:26:26
 
Цитата
stevie44 написал:
The_Prist , тема называется: "Удаление активной книги без сохранения через VBA" ))))
Это СЕЙЧАС она так стала называться, а изначально там было слово "убить" - Вы же сами так написали, зачем лукавить?
 
Юрий М, тему я не переименовывал))) Слово "убить" указано в первом посте)
 
У Вас в начале код есть строка:
Код
ActiveFileName = ActiveWorkbook.Name
её и пользуйте:
Код
    iFullName$ = Workbooks(ActiveFileName).FullName
    Workbooks(ActiveFileName).Saved = True
    Workbooks(ActiveFileName).ChangeFileAccess Mode:=xlReadOnly
    SetAttr iFullName$, vbNormal: Kill iFullName$
    Workbooks(ActiveFileName).Close saveChanges:=False
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Страницы: 1
Читают тему
Наверх