Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Макрос для закрытия книги
 
Hugo, ого так это в самом начале,  
Макрос для закрытия книги
 
Hugo, А куда его запихнуть? В конец всего?
Макрос для закрытия книги
 
Здравствуйте!

У меня есть макрос, который позволяет выполнить определённую задачу. Однако после выполнения макроса я бы хотел, чтобы активная книга автоматически закрывалась без сохранения изменений.


Я знаю, каким кодом можно закрыть книгу, но не могу понять, куда именно его нужно вставить в следующем коде. Буду благодарен за помощь.


Код
Option Explicit

Sub SplitActiveWorkbook()
    CloseEmptyWb
    SplitWorkbook ActiveWorkbook
End Sub

Private Sub SplitWorkbook(wbFrom As Workbook)
    Dim divisions As Object
    Set divisions = GetDivisions(wbFrom, "Итого", 2)
    If divisions.Count = 0 Then Exit Sub
    
    Application.ScreenUpdating = False
    
    Dim division As Variant
    For Each division In divisions
        Application.StatusBar = division
        ExtractOneDivision division, wbFrom
    Next
    
    Application.StatusBar = False
    Application.ScreenUpdating = True
    MsgBox "Готово.", vbInformation, "Разделить книгу"
End Sub

Private Sub ExtractOneDivision(ByVal division As String, wbFrom As Workbook)
    Dim wbTarg As Workbook
    Set wbTarg = Workbooks.Add(1)
    
    Dim sh As Worksheet
    For Each sh In wbFrom.Worksheets
        If sh.Visible = xlSheetVisible Then
            If WorksheetFunction.CountIfs(sh.UsedRange.Columns(1), division) > 0 Then
                ExtractOneDivisionFromSheet division, sh, wbTarg
            End If
        End If
    Next
    
    If wbTarg.Sheets.Count = 1 Then
        wbTarg.Close False
    Else
        Application.DisplayAlerts = False
        wbTarg.Sheets(1).Delete
        Application.DisplayAlerts = True
        
        SaveWorkbook wbTarg, division, wbFrom.Path & "\"
        wbTarg.Close False
    End If
End Sub

Private Sub SaveWorkbook(wb As Workbook, division As String, sPath As String)
    Dim sName As String
    sName = division
    ReplaceSymbols sName
    sName = sName & ".xlsx"
    
    Dim sFull As String
    sFull = sPath & sName
    
    On Error Resume Next
    Workbooks(sName).Close False
    Kill sFull
    On Error GoTo 0
    wb.SaveAs sName
    
End Sub

Private Sub ExtractOneDivisionFromSheet(division As String, shFrom As Worksheet, wbTarg As Workbook)
    shFrom.Copy After:=wbTarg.Sheets(wbTarg.Sheets.Count)
    
    Dim shTarg As Worksheet
    Set shTarg = wbTarg.Sheets(wbTarg.Sheets.Count)
    
    Dim rd As Range
    Set rd = shTarg.UsedRange.Columns(1)
    
    Dim yb As Long
    On Error Resume Next
    yb = WorksheetFunction.Match(division, rd, 0)
    On Error GoTo 0
    If yb = 0 Then Exit Sub
    
    Dim divIndentLevel As Long
    divIndentLevel = rd.Cells(yb, 1).IndentLevel
    
    Dim yf As Long
    For yf = yb + 1 To rd.Rows.Count
        If rd.Cells(yf, 1).IndentLevel <= divIndentLevel Then Exit For
    Next
    yf = yf - 1
    
    If yf < rd.Rows.Count Then
        With shTarg
            .Range(rd.Cells(yf + 1), rd.Cells(rd.Rows.Count, 1)).EntireRow.Delete
        End With
    End If
    
    Dim yy As Long
    For yy = yb - 1 To 1 Step -1
        If rd.Cells(yy, 1).IndentLevel >= divIndentLevel Then
            rd.Cells(yy).EntireRow.Delete
        End If
    Next
    
End Sub

Private Function GetDivisionIndentLevel(rd As Range, division As String) As Long
    Dim yy As Long
    On Error Resume Next
    yy = WorksheetFunction.Match(division, rd, 0)
    On Error GoTo 0
    If yy > 0 Then
        GetDivisionIndentLevel = rd.Cells(yy, 1).IndentLevel
    End If
End Function

Private Function GetDivisions(wb As Workbook, sheetName As String, needIndentLevel As Long) As Object
    Dim dic As Object
    Set dic = CreateObject("Scripting.Dictionary")
    
    Dim sh As Worksheet
    On Error Resume Next
    Set sh = wb.Sheets(sheetName)
    On Error GoTo 0
    If Not sh Is Nothing Then
        Dim cl As Range
        For Each cl In sh.UsedRange.Columns(1).Cells
            If cl.IndentLevel = needIndentLevel Then
                dic(cl.Value) = 0
            End If
        Next
    End If
    
    Set GetDivisions = dic
End Function

Private Sub ReplaceSymbols(ss As String)
    Dim vv As Variant
    For Each vv In Array("\", "/", ":", "*", "?", """", "<", ">", "|", "[", "]") '[] недопустимые только в имени листа
        ss = Replace(ss, vv, " ")
    Next
End Sub

Private Sub CloseEmptyWb()
    Dim wb As Workbook
    For Each wb In Application.Workbooks
        If wb.Path = "" Then wb.Close False
    Next
End Sub
Макрос для заливки ячеек по уровням группировки
 
Sanja,  а ведь и правда, все так, спасибо :*  
Макрос для заливки ячеек по уровням группировки
 
Sanja, А что если бы можно было в макросе написать типа "Для листа N, уровень 1 = цвет, Уровень 2 = цвет2;  Для листа Н, уровень 3 = цвет, уровень 4 = цвет2" и тд?
Макрос для заливки ячеек по уровням группировки
 
Добрый день
Подскажите, пжлст, как я могу с помощью макроса менять цвета заливки по уровням группировки
Необходимо чтобы заливка менялась только в Дивизионах и Управлениях, уровни группировок в разных листах разные, на первом листе 2й уровень может быть дивизионом, но в других он имеет другой уровень и тд.

В примере залиты нужные уровни, макрос в теории должен менять все что залито темным цветом и светлым. (метод Найти и заменить не нужен)
Макрос для добавления строки в листы
 
Цитата
написал:
Зажмите Shift. Выделите несколько листов, клик на ярлычках. Вставляйте строки, протягивайте формулы. Разгруппируйте листы.
Блин, точно
Я чет тупанул и забыл про это
Макрос для добавления строки в листы
 
Приветствую

Есть файл, в котором много листов. Как можно автоматически повторить мои действия на одном листе на всех видимых вкладках в открытом файле?

Например, я открыл файл, зашёл на первую вкладку и вставил строку куда-то в середину таблицы с данными, а затем протянул формулы сверху вниз. Я хочу, чтобы это произошло и на других вкладках (кроме скрытых).


Пожалуйста, помогите.
Макрос для добавления строки в листы
 
Приветствую

Есть файл, в котором много листов. Как можно автоматически повторить мои действия на одном листе на всех видимых вкладках в открытом файле?

Например, я открыл файл, зашёл на первую вкладку и вставил строку куда-то в середину таблицы с данными, а затем протянул формулы сверху вниз. Я хочу, чтобы это произошло и на других вкладках (кроме скрытых).


Пожалуйста, помогите.
Изменение заливки ячеек с одной на другую автоматом
 
Цитата
написал:
Ctrl+HЗаменитьПараметрыФорма
Не работает
Изменение заливки ячеек с одной на другую автоматом
 
Добрый день

Друзья, подскажите, есть ли способ автоматически менять цвета заливки ячеек с "было" - "стало"

Во вложении файл и конечный результат должен быть так чтобы ячейки цвет которых был темно-оранжевый стал, допустим, желтым, а цвет которых был светло-оранж стал светло-желтым.  
Удаление строк в таблице от "Условие" до "Условие"
 
МатросНаЗебре, Спасибо, все работает, но почему-то цвет заливки поменялся в новый файлах, это пустяки.
Удаление строк в таблице от "Условие" до "Условие"
 
Добрый день, добрый люди!

Помогите с проблемой, хочу узнать способ с помощью которого я мог бы из файла ИТОГО по кгомпании.XLS (247 КБ) делать 6 разных файлов, по каждому дивизиону отдельно.
В файле ИТОГО по кгомпании.XLS (247 КБ)на данный момент дынные по всей компании. Конечный результат должен выглядеть так - 6 файлов отдельно по каждому дивизиону, пример что должно получится на выходе Волгоградский дивизион.XLS (114.5 КБ)
Страницы: 1
Наверх