Добрый день! У меня есть фалик, в котором я написал небольшой макрос и вывел его на кнопку на листе. Его задача довольно проста: Сохранить файл по определённому шаблону, данные которые берутся из ячеек Но так как с макросами я дружу довольно плохо, не смог разобраться, как сделать так, чтобы:
1. Дата бралась в определённом формате (он пишет 21.05.2019, а мне нужно только 21.05) 2. Если ячейки пустые, то данные оттуда не берутся (с 23 по 29 строки) Сейчас он учитывает эти ячейки, даже если они пусты 3. После сохранения, эта книга закрылась
Файлик примера во вложении
Добрый день! У меня есть фалик, в котором я написал небольшой макрос и вывел его на кнопку на листе. Его задача довольно проста: Сохранить файл по определённому шаблону, данные которые берутся из ячеек Но так как с макросами я дружу довольно плохо, не смог разобраться, как сделать так, чтобы:
1. Дата бралась в определённом формате (он пишет 21.05.2019, а мне нужно только 21.05) 2. Если ячейки пустые, то данные оттуда не берутся (с 23 по 29 строки) Сейчас он учитывает эти ячейки, даже если они пусты 3. После сохранения, эта книга закрылась
Private Sub CommandButton1_Click() Dim strPath As String, strName As String raz_ = " + " For i = 22 To 29 If Cells(i, 1) <> "" Then x_ = x_ & raz_ & Cells(i, 1) End If Next i If Len(x_) = 0 Then Exit Sub If Not IsDate(Cells(1, 4)) Then Exit Sub If Cells(34, 10) = "" Then Exit Sub x_ = Mid(x_, Len(raz_) + 1) strPath = "g:\Моя\Стереть\" 'Путь к файлу strName = "Доставка - Вагон - " & Format(Cells(1, 4), "DD.MM") & " - " & Cells(34, 10) & " - " & x_ & ".xlsm" 'Имя файла ThisWorkbook.SaveAs Filename:=strPath & strName ThisWorkbook.Close End Sub
[/vba]
Так нужно? [vba]
Код
Private Sub CommandButton1_Click() Dim strPath As String, strName As String raz_ = " + " For i = 22 To 29 If Cells(i, 1) <> "" Then x_ = x_ & raz_ & Cells(i, 1) End If Next i If Len(x_) = 0 Then Exit Sub If Not IsDate(Cells(1, 4)) Then Exit Sub If Cells(34, 10) = "" Then Exit Sub x_ = Mid(x_, Len(raz_) + 1) strPath = "g:\Моя\Стереть\" 'Путь к файлу strName = "Доставка - Вагон - " & Format(Cells(1, 4), "DD.MM") & " - " & Cells(34, 10) & " - " & x_ & ".xlsm" 'Имя файла ThisWorkbook.SaveAs Filename:=strPath & strName ThisWorkbook.Close End Sub
Конечно, у Вас в макросе это была папка Темп. Я у себя ее засорять не хочу, у меня другая помойка есть, поэтому я и написал свой путь Поясните, как Вы хотите сохранить файл, не указывая место сохранения? Можно сохранять в то же место, где находится файл с макросом. Тогда напишите так [vba]
Код
strPath = ThisWorkbook.Path & "\"
[/vba] [vba]
Код
Private Sub CommandButton1_Click() Dim strPath As String, strName As String raz_ = " + " For i = 22 To 29 If Cells(i, 1) <> "" Then x_ = x_ & raz_ & Cells(i, 1) End If Next i If Len(x_) = 0 Then Exit Sub If Not IsDate(Cells(1, 4)) Then Exit Sub If Cells(34, 10) = "" Then Exit Sub x_ = Mid(x_, Len(raz_) + 1) strPath = ThisWorkbook.Path & "\" 'Путь к файлу strName = "Доставка - Вагон - " & Format(Cells(1, 4), "DD.MM") & " - " & Cells(34, 10) & " - " & x_ & ".xlsm" 'Имя файла Application.DisplayAlerts = 0 ThisWorkbook.SaveAs Filename:=strPath & strName Application.DisplayAlerts = 1 ThisWorkbook.Close End Sub
[/vba]
Конечно, у Вас в макросе это была папка Темп. Я у себя ее засорять не хочу, у меня другая помойка есть, поэтому я и написал свой путь Поясните, как Вы хотите сохранить файл, не указывая место сохранения? Можно сохранять в то же место, где находится файл с макросом. Тогда напишите так [vba]
Код
strPath = ThisWorkbook.Path & "\"
[/vba] [vba]
Код
Private Sub CommandButton1_Click() Dim strPath As String, strName As String raz_ = " + " For i = 22 To 29 If Cells(i, 1) <> "" Then x_ = x_ & raz_ & Cells(i, 1) End If Next i If Len(x_) = 0 Then Exit Sub If Not IsDate(Cells(1, 4)) Then Exit Sub If Cells(34, 10) = "" Then Exit Sub x_ = Mid(x_, Len(raz_) + 1) strPath = ThisWorkbook.Path & "\" 'Путь к файлу strName = "Доставка - Вагон - " & Format(Cells(1, 4), "DD.MM") & " - " & Cells(34, 10) & " - " & x_ & ".xlsm" 'Имя файла Application.DisplayAlerts = 0 ThisWorkbook.SaveAs Filename:=strPath & strName Application.DisplayAlerts = 1 ThisWorkbook.Close End Sub
Но как я понимаю, здесь нельзя сразу перечислить все недопустимые символы?
У меня код пока получился следующим образом:
[vba]
Код
Private Sub CommandButton1_Click() Dim strPath As String, strName As String raz_ = " + " For i = 22 To 29 If Cells(i, 1) <> "" Then x_ = x_ & raz_ & Cells(i, 1) End If Next i If Len(x_) = 0 Then Exit Sub If Not IsDate(Cells(1, 4)) Then Exit Sub If Cells(34, 10) = "" Then Exit Sub x_ = Mid(x_, Len(raz_) + 1) strPath = ThisWorkbook.Path & "\" 'Путь к файлу strName = "Доставка - Вагон - " & Format(Cells(1, 4), "DD.MM") & " - " & Cells(34, 10) & " - " & x_ & ".xlsm" 'Имя файла Application.DisplayAlerts = 0 ThisWorkbook.SaveAs Filename:=strPath & Replace(strName, "/", "-") Application.DisplayAlerts = 1 ThisWorkbook.Close End Sub
Но как я понимаю, здесь нельзя сразу перечислить все недопустимые символы?
У меня код пока получился следующим образом:
[vba]
Код
Private Sub CommandButton1_Click() Dim strPath As String, strName As String raz_ = " + " For i = 22 To 29 If Cells(i, 1) <> "" Then x_ = x_ & raz_ & Cells(i, 1) End If Next i If Len(x_) = 0 Then Exit Sub If Not IsDate(Cells(1, 4)) Then Exit Sub If Cells(34, 10) = "" Then Exit Sub x_ = Mid(x_, Len(raz_) + 1) strPath = ThisWorkbook.Path & "\" 'Путь к файлу strName = "Доставка - Вагон - " & Format(Cells(1, 4), "DD.MM") & " - " & Cells(34, 10) & " - " & x_ & ".xlsm" 'Имя файла Application.DisplayAlerts = 0 ThisWorkbook.SaveAs Filename:=strPath & Replace(strName, "/", "-") Application.DisplayAlerts = 1 ThisWorkbook.Close End Sub
Почему нельзя? Льзя. InExSu продемонстрировал выше пример Можно без функции, вот так примерно [vba]
Код
Private Sub CommandButton1_Click() Dim strPath As String, strName As String raz_ = " + " For i = 22 To 29 If Cells(i, 1) <> "" Then x_ = x_ & raz_ & Cells(i, 1) End If Next i If Len(x_) = 0 Then Exit Sub If Not IsDate(Cells(1, 4)) Then Exit Sub If Cells(34, 10) = "" Then Exit Sub x_ = Mid(x_, Len(raz_) + 1) strPath = ThisWorkbook.Path & "\" 'Путь к файлу strName = "Доставка - Вагон - " & Format(Cells(1, 4), "DD.MM") & " - " & Cells(34, 10) & " - " & x_ & ".xlsm" 'Имя файла ar = Array("<", ">", "|", "?", "\", "/", ":", Chr(34), "*") For i = LBound(ar) To UBound(ar) strName = Replace(strName, ar(i), "_") Next i Application.DisplayAlerts = 0 ThisWorkbook.SaveAs Filename:=strPath & strName Application.DisplayAlerts = 1 ThisWorkbook.Close End Sub
[/vba]
Почему нельзя? Льзя. InExSu продемонстрировал выше пример Можно без функции, вот так примерно [vba]
Код
Private Sub CommandButton1_Click() Dim strPath As String, strName As String raz_ = " + " For i = 22 To 29 If Cells(i, 1) <> "" Then x_ = x_ & raz_ & Cells(i, 1) End If Next i If Len(x_) = 0 Then Exit Sub If Not IsDate(Cells(1, 4)) Then Exit Sub If Cells(34, 10) = "" Then Exit Sub x_ = Mid(x_, Len(raz_) + 1) strPath = ThisWorkbook.Path & "\" 'Путь к файлу strName = "Доставка - Вагон - " & Format(Cells(1, 4), "DD.MM") & " - " & Cells(34, 10) & " - " & x_ & ".xlsm" 'Имя файла ar = Array("<", ">", "|", "?", "\", "/", ":", Chr(34), "*") For i = LBound(ar) To UBound(ar) strName = Replace(strName, ar(i), "_") Next i Application.DisplayAlerts = 0 ThisWorkbook.SaveAs Filename:=strPath & strName Application.DisplayAlerts = 1 ThisWorkbook.Close End Sub