Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Переименование имени файла при его сохранении в сучае совпад - Мир MS Excel

Старая форма входа
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Переименование имени файла при его сохранении в сучае совпад (Макросы/Sub)
Переименование имени файла при его сохранении в сучае совпад
Влад777 Дата: Пятница, 25.12.2015, 14:21 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 61
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Добрый день!

Есть такая часть макроса

[vba]
Код

Windows("Книга3.xlsm").Activate
Set wb3 = Workbooks("Книга3.xlsm")
shName = wb3.ActiveSheet.Name
cells.Select
    Selection.Copy
    Workbooks.Add
    ActiveSheet.Paste
    Range("CT2").Select
    Application.CutCopyMode = False
    Selection.Copy
    Application.CutCopyMode = False
    ChDir "C:\Users\Admin\Documents\Таможня\2-й этап\База"
    ActiveWorkbook.SaveAs Filename:="C:\Users\Admin\Documents\Таможня\2-й этап\База\" & Range("ct2"), FileFormat:= _
xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _
, CreateBackup:=False
[/vba]

Данный макрос сохраняет лист в отдельный файл в определенную папку и присваивает ему имя, которое берет из ячейки CT2. Периодически возникает совпадение имен в папке. Я останавливаю макрос, вручную меняю имя файла в ячейке и заново запускаю его.
Можно ли изменить эту часть макроса так, чтобы он сперва проверил имя файла из ячейки CT2 на совпадение и если оно есть, поменял данные в ячейке СТ2 добавив к ним в конце "_1". Если имя с таким номером есть, то "_2" и т.д. пока имя из ячейки СТ2 не станет уникальным?
 
Ответить
СообщениеДобрый день!

Есть такая часть макроса

[vba]
Код

Windows("Книга3.xlsm").Activate
Set wb3 = Workbooks("Книга3.xlsm")
shName = wb3.ActiveSheet.Name
cells.Select
    Selection.Copy
    Workbooks.Add
    ActiveSheet.Paste
    Range("CT2").Select
    Application.CutCopyMode = False
    Selection.Copy
    Application.CutCopyMode = False
    ChDir "C:\Users\Admin\Documents\Таможня\2-й этап\База"
    ActiveWorkbook.SaveAs Filename:="C:\Users\Admin\Documents\Таможня\2-й этап\База\" & Range("ct2"), FileFormat:= _
xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _
, CreateBackup:=False
[/vba]

Данный макрос сохраняет лист в отдельный файл в определенную папку и присваивает ему имя, которое берет из ячейки CT2. Периодически возникает совпадение имен в папке. Я останавливаю макрос, вручную меняю имя файла в ячейке и заново запускаю его.
Можно ли изменить эту часть макроса так, чтобы он сперва проверил имя файла из ячейки CT2 на совпадение и если оно есть, поменял данные в ячейке СТ2 добавив к ним в конце "_1". Если имя с таким номером есть, то "_2" и т.д. пока имя из ячейки СТ2 не станет уникальным?

Автор - Влад777
Дата добавления - 25.12.2015 в 14:21
Roman777 Дата: Пятница, 25.12.2015, 14:45 | Сообщение № 2
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
Влад777, удобнее было бы увидеть код с обозначением переменных, а лучше полный код.
Необходимо поставить проверку на существование файла:

[vba]
Код
namefile=Range("ct2")
.........
if Dir "C:\Users\Admin\Documents\Таможня\2-й этап\База" <>"" then
  if isnumeric(right(namefile, 1)) and left(right(namefile,2),1)="_" then
    namefile=left(namefile, len(namefile)-2) & "_" & (cint(right(namefile, 1))+1)
  else
    namefile=namefile & "_1"
  end if
end if
........
Range("ct2")=namefile
  ActiveWorkbook.SaveAs Filename:="C:\Users\Admin\Documents\Таможня\2-й этап\База\" & namefile, FileFormat:= _
xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _
, CreateBackup:=False
[/vba]

Исправил, забыл поставить первую цифру.


Много чего не знаю!!!!

Сообщение отредактировал Roman777 - Пятница, 25.12.2015, 14:47
 
Ответить
СообщениеВлад777, удобнее было бы увидеть код с обозначением переменных, а лучше полный код.
Необходимо поставить проверку на существование файла:

[vba]
Код
namefile=Range("ct2")
.........
if Dir "C:\Users\Admin\Documents\Таможня\2-й этап\База" <>"" then
  if isnumeric(right(namefile, 1)) and left(right(namefile,2),1)="_" then
    namefile=left(namefile, len(namefile)-2) & "_" & (cint(right(namefile, 1))+1)
  else
    namefile=namefile & "_1"
  end if
end if
........
Range("ct2")=namefile
  ActiveWorkbook.SaveAs Filename:="C:\Users\Admin\Documents\Таможня\2-й этап\База\" & namefile, FileFormat:= _
xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _
, CreateBackup:=False
[/vba]

Исправил, забыл поставить первую цифру.

Автор - Roman777
Дата добавления - 25.12.2015 в 14:45
Влад777 Дата: Пятница, 25.12.2015, 14:55 | Сообщение № 3
Группа: Пользователи
Ранг: Участник
Сообщений: 61
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Подскажите, как будет выглядеть макрос целиком? Не могу понять в какую часть своего макроса вставить ваш :(
 
Ответить
СообщениеПодскажите, как будет выглядеть макрос целиком? Не могу понять в какую часть своего макроса вставить ваш :(

Автор - Влад777
Дата добавления - 25.12.2015 в 14:55
Roman777 Дата: Пятница, 25.12.2015, 15:09 | Сообщение № 4
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
Влад777, покажите Ваш макрос целиком =)


Много чего не знаю!!!!
 
Ответить
СообщениеВлад777, покажите Ваш макрос целиком =)

Автор - Roman777
Дата добавления - 25.12.2015 в 15:09
Влад777 Дата: Пятница, 25.12.2015, 15:11 | Сообщение № 5
Группа: Пользователи
Ранг: Участник
Сообщений: 61
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Мой макрос полностью

[vba]
Код

Windows("Книга3.xlsm").Activate
   
Dim sheet As Worksheet
For Each sheet In ActiveWorkbook.Worksheets
sheet.Name = "1_" & sheet.Index
Next

For Each sheet In ActiveWorkbook.Worksheets
sheet.Name = sheet.Index
Next

    For Each sh In ActiveWorkbook.Sheets
    
    Windows("Приложение.xlsx").Activate
Sheets("ПРИЛОЖЕНИЕ 1").Select

  Set c = Columns(2).Find("*", searchdirection:=xlPrevious)
   If c Is Nothing Then
      cells(1, 2).Select
   Else
      c.Offset(1, 0).Select
   End If
Set wb3 = Workbooks("Книга3.xlsm")
shName = wb3.ActiveSheet.Name
ActiveCell.FormulaR1C1 = "=[" & wb3.Name & "]" & shName & "!R2C98"
          iRow = Columns("B").Find(What:="*", LookIn:=xlValues, searchdirection:=xlPrevious, SearchOrder:=xlByRows).Row
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
Set c = Columns(4).Find("*", searchdirection:=xlPrevious)
   If c Is Nothing Then
      cells(1, 4).Select
   Else
      c.Offset(1, 0).Select
   End If
Set wb3 = Workbooks("Книга3.xlsm")
shName = wb3.ActiveSheet.Name
ActiveCell.FormulaR1C1 = "=[" & wb3.Name & "]" & shName & "!R2C50"
iRow = Columns("B").Find(What:="*", LookIn:=xlValues, searchdirection:=xlPrevious, SearchOrder:=xlByRows).Row
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
Set c = Columns(5).Find("*", searchdirection:=xlPrevious)
   If c Is Nothing Then
      cells(1, 5).Select
   Else
      c.Offset(1, 0).Select
   End If
    Set wb3 = Workbooks("Книга3.xlsm")
shName = wb3.ActiveSheet.Name
ActiveCell.FormulaR1C1 = "=[" & wb3.Name & "]" & shName & "!R2C51"
   iRow = Columns("B").Find(What:="*", LookIn:=xlValues, searchdirection:=xlPrevious, SearchOrder:=xlByRows).Row
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
Windows("Книга3.xlsm").Activate
Set wb3 = Workbooks("Книга3.xlsm")
shName = wb3.ActiveSheet.Name
cells.Select
    Selection.Copy
    Workbooks.Add
    ActiveSheet.Paste
    Range("CT2").Select
    Application.CutCopyMode = False
    Selection.Copy
    Application.CutCopyMode = False
    ChDir "C:\Users\Admin\Documents\Таможня\2-й этап\База"
    ActiveWorkbook.SaveAs Filename:="C:\Users\Admin\Documents\Таможня\2-й этап\База\" & Range("ct2"), FileFormat:= _
xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _
, CreateBackup:=False

Windows("Приложение.xlsx").Activate
Sheets("ПРИЛОЖЕНИЕ 1").Select
Set wb = ActiveWorkbook
Set sh = ActiveWorkbook.ActiveSheet
LastCell = sh.UsedRange.Rows.Count

For rr = 2 To LastCell
If sh.cells(rr, "G") = "" Then
If sh.cells(rr, "B") <> "" Then 'что бы столбец с именем файла не был пуст
filee = sh.cells(rr, "B").Value & ".xls"

Set wb2 = Workbooks.Open("C:\Users\Admin\Documents\Таможня\2-й этап\База\" & filee)
Set sh2 = wb2.Sheets(1)
iET = sh2.cells(Rows.Count, 63).End(xlUp).Row
sum1 = WorksheetFunction.Sum(sh2.Range("BL2").Resize(iET - 1, 1))
sum2 = WorksheetFunction.Sum(sh2.Range("BH2").Resize(iET - 1, 1))

sh.cells(rr, "G") = sum1
sh.cells(rr, "I") = sum2
wb2.Close False
End If
End If
Next

Windows("Книга3.xlsm").Activate
Application.DisplayAlerts = False
        ActiveSheet.Delete
    Application.DisplayAlerts = True

Next

End Sub

[/vba]
 
Ответить
СообщениеМой макрос полностью

[vba]
Код

Windows("Книга3.xlsm").Activate
   
Dim sheet As Worksheet
For Each sheet In ActiveWorkbook.Worksheets
sheet.Name = "1_" & sheet.Index
Next

For Each sheet In ActiveWorkbook.Worksheets
sheet.Name = sheet.Index
Next

    For Each sh In ActiveWorkbook.Sheets
    
    Windows("Приложение.xlsx").Activate
Sheets("ПРИЛОЖЕНИЕ 1").Select

  Set c = Columns(2).Find("*", searchdirection:=xlPrevious)
   If c Is Nothing Then
      cells(1, 2).Select
   Else
      c.Offset(1, 0).Select
   End If
Set wb3 = Workbooks("Книга3.xlsm")
shName = wb3.ActiveSheet.Name
ActiveCell.FormulaR1C1 = "=[" & wb3.Name & "]" & shName & "!R2C98"
          iRow = Columns("B").Find(What:="*", LookIn:=xlValues, searchdirection:=xlPrevious, SearchOrder:=xlByRows).Row
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
Set c = Columns(4).Find("*", searchdirection:=xlPrevious)
   If c Is Nothing Then
      cells(1, 4).Select
   Else
      c.Offset(1, 0).Select
   End If
Set wb3 = Workbooks("Книга3.xlsm")
shName = wb3.ActiveSheet.Name
ActiveCell.FormulaR1C1 = "=[" & wb3.Name & "]" & shName & "!R2C50"
iRow = Columns("B").Find(What:="*", LookIn:=xlValues, searchdirection:=xlPrevious, SearchOrder:=xlByRows).Row
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
Set c = Columns(5).Find("*", searchdirection:=xlPrevious)
   If c Is Nothing Then
      cells(1, 5).Select
   Else
      c.Offset(1, 0).Select
   End If
    Set wb3 = Workbooks("Книга3.xlsm")
shName = wb3.ActiveSheet.Name
ActiveCell.FormulaR1C1 = "=[" & wb3.Name & "]" & shName & "!R2C51"
   iRow = Columns("B").Find(What:="*", LookIn:=xlValues, searchdirection:=xlPrevious, SearchOrder:=xlByRows).Row
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
Windows("Книга3.xlsm").Activate
Set wb3 = Workbooks("Книга3.xlsm")
shName = wb3.ActiveSheet.Name
cells.Select
    Selection.Copy
    Workbooks.Add
    ActiveSheet.Paste
    Range("CT2").Select
    Application.CutCopyMode = False
    Selection.Copy
    Application.CutCopyMode = False
    ChDir "C:\Users\Admin\Documents\Таможня\2-й этап\База"
    ActiveWorkbook.SaveAs Filename:="C:\Users\Admin\Documents\Таможня\2-й этап\База\" & Range("ct2"), FileFormat:= _
xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _
, CreateBackup:=False

Windows("Приложение.xlsx").Activate
Sheets("ПРИЛОЖЕНИЕ 1").Select
Set wb = ActiveWorkbook
Set sh = ActiveWorkbook.ActiveSheet
LastCell = sh.UsedRange.Rows.Count

For rr = 2 To LastCell
If sh.cells(rr, "G") = "" Then
If sh.cells(rr, "B") <> "" Then 'что бы столбец с именем файла не был пуст
filee = sh.cells(rr, "B").Value & ".xls"

Set wb2 = Workbooks.Open("C:\Users\Admin\Documents\Таможня\2-й этап\База\" & filee)
Set sh2 = wb2.Sheets(1)
iET = sh2.cells(Rows.Count, 63).End(xlUp).Row
sum1 = WorksheetFunction.Sum(sh2.Range("BL2").Resize(iET - 1, 1))
sum2 = WorksheetFunction.Sum(sh2.Range("BH2").Resize(iET - 1, 1))

sh.cells(rr, "G") = sum1
sh.cells(rr, "I") = sum2
wb2.Close False
End If
End If
Next

Windows("Книга3.xlsm").Activate
Application.DisplayAlerts = False
        ActiveSheet.Delete
    Application.DisplayAlerts = True

Next

End Sub

[/vba]

Автор - Влад777
Дата добавления - 25.12.2015 в 15:11
Roman777 Дата: Пятница, 25.12.2015, 16:05 | Сообщение № 6
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
Влад777, у меня было немного времени, но в Вашем коде я чёт не оч смог разобраться, в общем поставил, как мне кажется в нужном месте...
[vba]
Код
Sub books()
Windows("Книга3.xlsm").Activate
Dim sh As Worksheet
For Each sh In ActiveWorkbook.Worksheets
   sh.name = "1_" & sheet.Index
Next
For Each sheet In ActiveWorkbook.Worksheets
   sh.name = sheet.Index
Next
For Each sh In ActiveWorkbook.Sheets
        Windows("Приложение.xlsx").Activate
        Sheets("ПРИЛОЖЕНИЕ 1").Select
        Set c = Columns(2).Find("*", searchdirection:=xlPrevious)
        If c Is Nothing Then
          Cells(1, 2).Select
        Else
          c.Offset(1, 0).Select
        End If
        Set wb3 = Workbooks("Книга3.xlsm")
        shName = wb3.ActiveSheet.name
        ActiveCell.FormulaR1C1 = "=[" & wb3.name & "]" & shName & "!R2C98"
        iRow = Columns("B").Find(What:="*", LookIn:=xlValues, searchdirection:=xlPrevious, SearchOrder:=xlByRows).Row
        Selection.Copy
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
        Set c = Columns(4).Find("*", searchdirection:=xlPrevious)
        If c Is Nothing Then
           Cells(1, 4).Select
        Else
           c.Offset(1, 0).Select
        End If
        Set wb3 = Workbooks("Книга3.xlsm")
        shName = wb3.ActiveSheet.name
        ActiveCell.FormulaR1C1 = "=[" & wb3.name & "]" & shName & "!R2C50"
        iRow = Columns("B").Find(What:="*", LookIn:=xlValues, searchdirection:=xlPrevious, SearchOrder:=xlByRows).Row
        Selection.Copy
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
        Set c = Columns(5).Find("*", searchdirection:=xlPrevious)
        If c Is Nothing Then
           Cells(1, 5).Select
        Else
           c.Offset(1, 0).Select
        End If
        Set wb3 = Workbooks("Книга3.xlsm")
        shName = wb3.ActiveSheet.name
        ActiveCell.FormulaR1C1 = "=[" & wb3.name & "]" & shName & "!R2C51"
        iRow = Columns("B").Find(What:="*", LookIn:=xlValues, searchdirection:=xlPrevious, SearchOrder:=xlByRows).Row
        Selection.Copy
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
        Windows("Книга3.xlsm").Activate
        Set wb3 = Workbooks("Книга3.xlsm")
        shName = wb3.ActiveSheet.name
        Cells.Select
        Selection.Copy
        Workbooks.Add
        ActiveSheet.Paste
        Range("CT2").Select
        NameFile$ = Range("ct2")
        Application.CutCopyMode = False ' Зачем?
        Selection.Copy                  ' Зачем?
        Application.CutCopyMode = False ' Зачем?
        
        ChDir "C:\Users\Admin\Documents\Таможня\2-й этап\База"  ' Зачем?
        If Dir("C:\Users\Admin\Documents\Таможня\2-й этап\База") <> "" Then
          If IsNumeric(Right(NameFile, 1)) And Left(Right(NameFile, 2), 1) = "_" Then
            NameFile = Left(NameFile, Len(NameFile) - 2) & "_" & (CInt(Right(NameFile, 1)) + 1)
          Else
            NameFile = NameFile & "_1"
          End If
        End If
        Range("ct2") = NameFile
        ActiveWorkbook.SaveAs Filename:="C:\Users\Admin\Documents\Таможня\2-й этап\База\" & NameFile, FileFormat:= _
        xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _
        , CreateBackup:=False

        Windows("Приложение.xlsx").Activate
        Sheets("ПРИЛОЖЕНИЕ 1").Select
        Set WB = ActiveWorkbook
        Set sh = ActiveWorkbook.ActiveSheet
        LastCell = sh.UsedRange.Rows.Count

        For rr = 2 To LastCell
          If sh.Cells(rr, "G") = "" Then
            If sh.Cells(rr, "B") <> "" Then 'что бы столбец с именем файла не был пуст
               filee = sh.Cells(rr, "B").Value & ".xls"

               Set wb2 = Workbooks.Open("C:\Users\Admin\Documents\Таможня\2-й этап\База\" & filee)
               Set sh2 = wb2.Sheets(1)
               iET = sh2.Cells(Rows.Count, 63).End(xlUp).Row
               sum1 = WorksheetFunction.Sum(sh2.Range("BL2").Resize(iET - 1, 1))
               sum2 = WorksheetFunction.Sum(sh2.Range("BH2").Resize(iET - 1, 1))

               sh.Cells(rr, "G") = sum1
               sh.Cells(rr, "I") = sum2
               wb2.Close False
            End If
          End If
         Next

Windows("Книга3.xlsm").Activate
Application.DisplayAlerts = False
        ActiveSheet.Delete
    Application.DisplayAlerts = True

Next
End Sub
[/vba]


Много чего не знаю!!!!
 
Ответить
СообщениеВлад777, у меня было немного времени, но в Вашем коде я чёт не оч смог разобраться, в общем поставил, как мне кажется в нужном месте...
[vba]
Код
Sub books()
Windows("Книга3.xlsm").Activate
Dim sh As Worksheet
For Each sh In ActiveWorkbook.Worksheets
   sh.name = "1_" & sheet.Index
Next
For Each sheet In ActiveWorkbook.Worksheets
   sh.name = sheet.Index
Next
For Each sh In ActiveWorkbook.Sheets
        Windows("Приложение.xlsx").Activate
        Sheets("ПРИЛОЖЕНИЕ 1").Select
        Set c = Columns(2).Find("*", searchdirection:=xlPrevious)
        If c Is Nothing Then
          Cells(1, 2).Select
        Else
          c.Offset(1, 0).Select
        End If
        Set wb3 = Workbooks("Книга3.xlsm")
        shName = wb3.ActiveSheet.name
        ActiveCell.FormulaR1C1 = "=[" & wb3.name & "]" & shName & "!R2C98"
        iRow = Columns("B").Find(What:="*", LookIn:=xlValues, searchdirection:=xlPrevious, SearchOrder:=xlByRows).Row
        Selection.Copy
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
        Set c = Columns(4).Find("*", searchdirection:=xlPrevious)
        If c Is Nothing Then
           Cells(1, 4).Select
        Else
           c.Offset(1, 0).Select
        End If
        Set wb3 = Workbooks("Книга3.xlsm")
        shName = wb3.ActiveSheet.name
        ActiveCell.FormulaR1C1 = "=[" & wb3.name & "]" & shName & "!R2C50"
        iRow = Columns("B").Find(What:="*", LookIn:=xlValues, searchdirection:=xlPrevious, SearchOrder:=xlByRows).Row
        Selection.Copy
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
        Set c = Columns(5).Find("*", searchdirection:=xlPrevious)
        If c Is Nothing Then
           Cells(1, 5).Select
        Else
           c.Offset(1, 0).Select
        End If
        Set wb3 = Workbooks("Книга3.xlsm")
        shName = wb3.ActiveSheet.name
        ActiveCell.FormulaR1C1 = "=[" & wb3.name & "]" & shName & "!R2C51"
        iRow = Columns("B").Find(What:="*", LookIn:=xlValues, searchdirection:=xlPrevious, SearchOrder:=xlByRows).Row
        Selection.Copy
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
        Windows("Книга3.xlsm").Activate
        Set wb3 = Workbooks("Книга3.xlsm")
        shName = wb3.ActiveSheet.name
        Cells.Select
        Selection.Copy
        Workbooks.Add
        ActiveSheet.Paste
        Range("CT2").Select
        NameFile$ = Range("ct2")
        Application.CutCopyMode = False ' Зачем?
        Selection.Copy                  ' Зачем?
        Application.CutCopyMode = False ' Зачем?
        
        ChDir "C:\Users\Admin\Documents\Таможня\2-й этап\База"  ' Зачем?
        If Dir("C:\Users\Admin\Documents\Таможня\2-й этап\База") <> "" Then
          If IsNumeric(Right(NameFile, 1)) And Left(Right(NameFile, 2), 1) = "_" Then
            NameFile = Left(NameFile, Len(NameFile) - 2) & "_" & (CInt(Right(NameFile, 1)) + 1)
          Else
            NameFile = NameFile & "_1"
          End If
        End If
        Range("ct2") = NameFile
        ActiveWorkbook.SaveAs Filename:="C:\Users\Admin\Documents\Таможня\2-й этап\База\" & NameFile, FileFormat:= _
        xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _
        , CreateBackup:=False

        Windows("Приложение.xlsx").Activate
        Sheets("ПРИЛОЖЕНИЕ 1").Select
        Set WB = ActiveWorkbook
        Set sh = ActiveWorkbook.ActiveSheet
        LastCell = sh.UsedRange.Rows.Count

        For rr = 2 To LastCell
          If sh.Cells(rr, "G") = "" Then
            If sh.Cells(rr, "B") <> "" Then 'что бы столбец с именем файла не был пуст
               filee = sh.Cells(rr, "B").Value & ".xls"

               Set wb2 = Workbooks.Open("C:\Users\Admin\Documents\Таможня\2-й этап\База\" & filee)
               Set sh2 = wb2.Sheets(1)
               iET = sh2.Cells(Rows.Count, 63).End(xlUp).Row
               sum1 = WorksheetFunction.Sum(sh2.Range("BL2").Resize(iET - 1, 1))
               sum2 = WorksheetFunction.Sum(sh2.Range("BH2").Resize(iET - 1, 1))

               sh.Cells(rr, "G") = sum1
               sh.Cells(rr, "I") = sum2
               wb2.Close False
            End If
          End If
         Next

Windows("Книга3.xlsm").Activate
Application.DisplayAlerts = False
        ActiveSheet.Delete
    Application.DisplayAlerts = True

Next
End Sub
[/vba]

Автор - Roman777
Дата добавления - 25.12.2015 в 16:05
Влад777 Дата: Пятница, 25.12.2015, 16:16 | Сообщение № 7
Группа: Пользователи
Ранг: Участник
Сообщений: 61
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Roman777, К сожалению продолжает ругаться на совпадение имен. Берет имя из ячейки CT2 и говорит, что такой файл в папке уже есть :(
 
Ответить
СообщениеRoman777, К сожалению продолжает ругаться на совпадение имен. Берет имя из ячейки CT2 и говорит, что такой файл в папке уже есть :(

Автор - Влад777
Дата добавления - 25.12.2015 в 16:16
Влад777 Дата: Пятница, 25.12.2015, 16:31 | Сообщение № 8
Группа: Пользователи
Ранг: Участник
Сообщений: 61
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Roman777, Если я правильно понимаю - макрос присваивает файлу имя с единичкой. Если имя с единицей есть - он прекращается работу и говорит что файл с таким именем в системе есть..Т.е. не происходит цикла (дальнейшего присвоения цифр 2,3 и т.д.)
 
Ответить
СообщениеRoman777, Если я правильно понимаю - макрос присваивает файлу имя с единичкой. Если имя с единицей есть - он прекращается работу и говорит что файл с таким именем в системе есть..Т.е. не происходит цикла (дальнейшего присвоения цифр 2,3 и т.д.)

Автор - Влад777
Дата добавления - 25.12.2015 в 16:31
Влад777 Дата: Пятница, 25.12.2015, 17:22 | Сообщение № 9
Группа: Пользователи
Ранг: Участник
Сообщений: 61
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Roman777, А если просто при совпадении имен присвоит цифру, начиная с 1? Если такое имя есть, то подставляется в конце имени 2 и т.д.?
 
Ответить
СообщениеRoman777, А если просто при совпадении имен присвоит цифру, начиная с 1? Если такое имя есть, то подставляется в конце имени 2 и т.д.?

Автор - Влад777
Дата добавления - 25.12.2015 в 17:22
Roman777 Дата: Пятница, 25.12.2015, 17:51 | Сообщение № 10
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
Влад777, скиньте, пожалуйста, файлик-пример, с которым Вы работаете, так будет гораздо быстрее...
[vba]
Код
        If IsNumeric(Right(NameFile, 1)) And Left(Right(NameFile, 2), 1) = "_" Then
            NameFile = Left(NameFile, Len(NameFile) - 2) & "_" & (CInt(Right(NameFile, 1)) + 1)
        Else
            NameFile = NameFile & "_1"
        End If
        End If
[/vba]
В этом условии я предусмотрел (просто не тестил) что если имя будет заканчиваться на цифру и второй символ справа "_", тогда имени присвоить значение - конечная цифра+1
Если же условие не выполняется - тоесть имя не соотвествует окончанию "_1..2..итд" то имя=имя_1


Много чего не знаю!!!!
 
Ответить
СообщениеВлад777, скиньте, пожалуйста, файлик-пример, с которым Вы работаете, так будет гораздо быстрее...
[vba]
Код
        If IsNumeric(Right(NameFile, 1)) And Left(Right(NameFile, 2), 1) = "_" Then
            NameFile = Left(NameFile, Len(NameFile) - 2) & "_" & (CInt(Right(NameFile, 1)) + 1)
        Else
            NameFile = NameFile & "_1"
        End If
        End If
[/vba]
В этом условии я предусмотрел (просто не тестил) что если имя будет заканчиваться на цифру и второй символ справа "_", тогда имени присвоить значение - конечная цифра+1
Если же условие не выполняется - тоесть имя не соотвествует окончанию "_1..2..итд" то имя=имя_1

Автор - Roman777
Дата добавления - 25.12.2015 в 17:51
Manyasha Дата: Пятница, 25.12.2015, 17:54 | Сообщение № 11
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
Влад777, посмотрите эту тему http://www.excelworld.ru/forum/3-1293-18266-16-1335949341
по-моему, это то, что Вам нужно


ЯД: 410013299366744 WM: R193491431804
 
Ответить
СообщениеВлад777, посмотрите эту тему http://www.excelworld.ru/forum/3-1293-18266-16-1335949341
по-моему, это то, что Вам нужно

Автор - Manyasha
Дата добавления - 25.12.2015 в 17:54
Влад777 Дата: Пятница, 25.12.2015, 21:00 | Сообщение № 12
Группа: Пользователи
Ранг: Участник
Сообщений: 61
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Roman777, Прошу прощения - пишу уже из дома. поэтому просто своял файлик-пример на коленке...Макрос копирует содержимое листа в новый файл и пытается сохранить его в папке под именем, указанном в ячейке CT2. Имя в этой ячейке изначально идет без цифр и подчеркиваний (причем, подчеркивание, это мое изобретение - можно впоследствии обойтись, наверное, добавлением просто цифр). Проблема в том, что в этой папке уже может быть файл с таким именем ("ПРОФИЛЬ", как в примере). Поэтому, необходимо, чтобы макрос проверил что такое имя файла в папке есть (это я уже понял в вашем коде) и в случае совпадения прибавил бы к имени 1 (получится "ПРОФИЛЬ1) и сохранил под этим именем. Если файл с именем "Профиль1" тоже есть, то макрос прибавил еще 1 и пытался сохранить под именем "ПРОФИЛЬ2" и т.д. до тех пор пока с помощью цифр не получится уникальное имя, под которым можно сохранить файл в директории.
К сообщению приложен файл: 3292517.xlsx (19.3 Kb)
 
Ответить
СообщениеRoman777, Прошу прощения - пишу уже из дома. поэтому просто своял файлик-пример на коленке...Макрос копирует содержимое листа в новый файл и пытается сохранить его в папке под именем, указанном в ячейке CT2. Имя в этой ячейке изначально идет без цифр и подчеркиваний (причем, подчеркивание, это мое изобретение - можно впоследствии обойтись, наверное, добавлением просто цифр). Проблема в том, что в этой папке уже может быть файл с таким именем ("ПРОФИЛЬ", как в примере). Поэтому, необходимо, чтобы макрос проверил что такое имя файла в папке есть (это я уже понял в вашем коде) и в случае совпадения прибавил бы к имени 1 (получится "ПРОФИЛЬ1) и сохранил под этим именем. Если файл с именем "Профиль1" тоже есть, то макрос прибавил еще 1 и пытался сохранить под именем "ПРОФИЛЬ2" и т.д. до тех пор пока с помощью цифр не получится уникальное имя, под которым можно сохранить файл в директории.

Автор - Влад777
Дата добавления - 25.12.2015 в 21:00
Влад777 Дата: Пятница, 25.12.2015, 22:50 | Сообщение № 13
Группа: Пользователи
Ранг: Участник
Сообщений: 61
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Roman777, Таким образом, после проверки имени на уникальность должен быть цикл с подбором уникального имени...
 
Ответить
СообщениеRoman777, Таким образом, после проверки имени на уникальность должен быть цикл с подбором уникального имени...

Автор - Влад777
Дата добавления - 25.12.2015 в 22:50
Влад777 Дата: Пятница, 25.12.2015, 23:10 | Сообщение № 14
Группа: Пользователи
Ранг: Участник
Сообщений: 61
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Manyasha, Спасибо. Это близко, но все равно нужна переделка. Я понимаю, что необходим цикл с условием

[vba]
Код

Loop While Dir(FileName) <> ""   ' пока имя не будет уникальным в папке
[/vba]

Но, моих знаний не хватает, чтобы адаптировать этот кусок для моей задачи с именем файла из ячейки СТ2.
 
Ответить
СообщениеManyasha, Спасибо. Это близко, но все равно нужна переделка. Я понимаю, что необходим цикл с условием

[vba]
Код

Loop While Dir(FileName) <> ""   ' пока имя не будет уникальным в папке
[/vba]

Но, моих знаний не хватает, чтобы адаптировать этот кусок для моей задачи с именем файла из ячейки СТ2.

Автор - Влад777
Дата добавления - 25.12.2015 в 23:10
Roman777 Дата: Пятница, 25.12.2015, 23:48 | Сообщение № 15
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
Влад777, Приношу извинения, только сейчас смог зайти - глянуть. Я тупанул чутка, не проверить было, сейчас глянул, ошибочка была, не указал расширение файла, да и "\Имяфайла" забыл добавить =))):
проверка должна проверять конечный файл с полным путём. Попробуйте так:
[vba]
Код
        ChDir "C:\Users\Admin\Documents\Таможня\2-й этап\База"  ' Зачем?
        If Dir("C:\Users\Admin\Documents\Таможня\2-й этап\База\" & NameFile & ".xls" ) <> "" Then
        If IsNumeric(Right(NameFile, 1)) And Left(Right(NameFile, 2), 1) = "_" Then
            NameFile = Left(NameFile, Len(NameFile) - 2) & "_" & (CInt(Right(NameFile, 1)) + 1)
        Else
            NameFile = NameFile & "_1"
        End If
        End If
        Range("ct2") = NameFile
[/vba]


Много чего не знаю!!!!
 
Ответить
СообщениеВлад777, Приношу извинения, только сейчас смог зайти - глянуть. Я тупанул чутка, не проверить было, сейчас глянул, ошибочка была, не указал расширение файла, да и "\Имяфайла" забыл добавить =))):
проверка должна проверять конечный файл с полным путём. Попробуйте так:
[vba]
Код
        ChDir "C:\Users\Admin\Documents\Таможня\2-й этап\База"  ' Зачем?
        If Dir("C:\Users\Admin\Documents\Таможня\2-й этап\База\" & NameFile & ".xls" ) <> "" Then
        If IsNumeric(Right(NameFile, 1)) And Left(Right(NameFile, 2), 1) = "_" Then
            NameFile = Left(NameFile, Len(NameFile) - 2) & "_" & (CInt(Right(NameFile, 1)) + 1)
        Else
            NameFile = NameFile & "_1"
        End If
        End If
        Range("ct2") = NameFile
[/vba]

Автор - Roman777
Дата добавления - 25.12.2015 в 23:48
Влад777 Дата: Суббота, 26.12.2015, 01:08 | Сообщение № 16
Группа: Пользователи
Ранг: Участник
Сообщений: 61
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Roman777, К сожалению - не работает. Он создает файл с именем "Профиль_1". Всегда создает файл с этим именем. Соответственно, эксель начинает ругаться на совпадение и макрос приходится останавливать. Макрос не осуществляет перебор вариантов. Он проверяет только вариант с именем файла "Профиль_1" и все.

Я писал ранее и в примере есть - изначальное имя файла из ячейки СТ2 - без цифр и подчеркиваний. Цифры появляются, когда начинается поиск уникального имени файла (подчеркивание можно вообще убрать). Если я правильно понял, то нужно, чтобы при совпадении имени файла он приписывал к содержимому ячейки СТ2 единицу и проверял опять на уникальность. В случае совпадения потом прибавлял еще единицу ("Профиль2") и вновь проверял на совпадение и так до тех пор, пока не получится уникальное имя файла. Нужен цикл с условием проверки.

Я не понимаю, как написать на VBA так, чтобы макрос приписывал к содержимому конкретной ячейки единицу, потом еще и еще.

Пример Manyasha близок в той его части, когда проверяется имя файла в директории на уникальность. Но у меня нет знаний VBA, чтобы его исправить под ситуацию с именем из ячейки СТ2. Может взять оттуда общую идею?
 
Ответить
СообщениеRoman777, К сожалению - не работает. Он создает файл с именем "Профиль_1". Всегда создает файл с этим именем. Соответственно, эксель начинает ругаться на совпадение и макрос приходится останавливать. Макрос не осуществляет перебор вариантов. Он проверяет только вариант с именем файла "Профиль_1" и все.

Я писал ранее и в примере есть - изначальное имя файла из ячейки СТ2 - без цифр и подчеркиваний. Цифры появляются, когда начинается поиск уникального имени файла (подчеркивание можно вообще убрать). Если я правильно понял, то нужно, чтобы при совпадении имени файла он приписывал к содержимому ячейки СТ2 единицу и проверял опять на уникальность. В случае совпадения потом прибавлял еще единицу ("Профиль2") и вновь проверял на совпадение и так до тех пор, пока не получится уникальное имя файла. Нужен цикл с условием проверки.

Я не понимаю, как написать на VBA так, чтобы макрос приписывал к содержимому конкретной ячейки единицу, потом еще и еще.

Пример Manyasha близок в той его части, когда проверяется имя файла в директории на уникальность. Но у меня нет знаний VBA, чтобы его исправить под ситуацию с именем из ячейки СТ2. Может взять оттуда общую идею?

Автор - Влад777
Дата добавления - 26.12.2015 в 01:08
RAN Дата: Суббота, 26.12.2015, 01:18 | Сообщение № 17
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Может взять оттуда общую идею?

И кто мешает?
[vba]
Код
Sub Save_As()
    Dim sBaseName$, sBaseNameNew$, sExtensionName$, i&
    sBaseName = Left$("C:\Users\Admin\Documents\Таможня\2-й этап\База\" & Range("ct2"), InStrRev("C:\Users\Admin\Documents\Таможня\2-й этап\База\" & Range("ct2"), ".") - 1)
    sExtensionName = Mid$("C:\Users\Admin\Documents\Таможня\2-й этап\База\" & Range("ct2"), InStrRev("C:\Users\Admin\Documents\Таможня\2-й этап\База\" & Range("ct2"), "."))
    sBaseNameNew = sBaseName
    Do While Dir(sBaseNameNew & sExtensionName) <> ""
        i = i + 1
        sBaseNameNew = sBaseName & "(" & i & ")"
    Loop
    ActiveWorkbook.SaveAs Filename:=sBaseNameNew & sExtensionName, FileFormat:=xlNormal
End Sub
[/vba]


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение
Может взять оттуда общую идею?

И кто мешает?
[vba]
Код
Sub Save_As()
    Dim sBaseName$, sBaseNameNew$, sExtensionName$, i&
    sBaseName = Left$("C:\Users\Admin\Documents\Таможня\2-й этап\База\" & Range("ct2"), InStrRev("C:\Users\Admin\Documents\Таможня\2-й этап\База\" & Range("ct2"), ".") - 1)
    sExtensionName = Mid$("C:\Users\Admin\Documents\Таможня\2-й этап\База\" & Range("ct2"), InStrRev("C:\Users\Admin\Documents\Таможня\2-й этап\База\" & Range("ct2"), "."))
    sBaseNameNew = sBaseName
    Do While Dir(sBaseNameNew & sExtensionName) <> ""
        i = i + 1
        sBaseNameNew = sBaseName & "(" & i & ")"
    Loop
    ActiveWorkbook.SaveAs Filename:=sBaseNameNew & sExtensionName, FileFormat:=xlNormal
End Sub
[/vba]

Автор - RAN
Дата добавления - 26.12.2015 в 01:18
Влад777 Дата: Суббота, 26.12.2015, 09:34 | Сообщение № 18
Группа: Пользователи
Ранг: Участник
Сообщений: 61
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
RAN, Добрый день!

Спасибо за участие. Мешает отсутствие знаний VBA. В вашем варианте ругается на строчку

[vba]
Код

sBaseName = Left$("C:\Users\Abinov\Desktop\Новая папка\" & Range("ct2"), InStrRev("C:\Users\Abinov\Desktop\Новая папка\" & Range("ct2"), ".") - 1)
[/vba]

Выдает ошибку


Сообщение отредактировал Влад777 - Суббота, 26.12.2015, 09:36
 
Ответить
СообщениеRAN, Добрый день!

Спасибо за участие. Мешает отсутствие знаний VBA. В вашем варианте ругается на строчку

[vba]
Код

sBaseName = Left$("C:\Users\Abinov\Desktop\Новая папка\" & Range("ct2"), InStrRev("C:\Users\Abinov\Desktop\Новая папка\" & Range("ct2"), ".") - 1)
[/vba]

Выдает ошибку

Автор - Влад777
Дата добавления - 26.12.2015 в 09:34
RAN Дата: Суббота, 26.12.2015, 10:42 | Сообщение № 19
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Я вам поверил, что у вас в ячейке имя файла... <_<
[vba]
Код
Sub Save_As()
    Dim sBaseName$, sBaseNameNew$, i&
    sBaseName ="C:\Users\Admin\Documents\Таможня\2-й этап\База\" & Range("ct2")
      sBaseNameNew = sBaseName
    Do While Dir(sBaseNameNew & "xls") <> ""
        i = i + 1
        sBaseNameNew = sBaseName & "(" & i & ")"
    Loop
    ActiveWorkbook.SaveAs Filename:=sBaseNameNew , FileFormat:=xlNormal
End Sub
[/vba]


Быть или не быть, вот в чем загвоздка!

Сообщение отредактировал RAN - Суббота, 26.12.2015, 10:43
 
Ответить
СообщениеЯ вам поверил, что у вас в ячейке имя файла... <_<
[vba]
Код
Sub Save_As()
    Dim sBaseName$, sBaseNameNew$, i&
    sBaseName ="C:\Users\Admin\Documents\Таможня\2-й этап\База\" & Range("ct2")
      sBaseNameNew = sBaseName
    Do While Dir(sBaseNameNew & "xls") <> ""
        i = i + 1
        sBaseNameNew = sBaseName & "(" & i & ")"
    Loop
    ActiveWorkbook.SaveAs Filename:=sBaseNameNew , FileFormat:=xlNormal
End Sub
[/vba]

Автор - RAN
Дата добавления - 26.12.2015 в 10:42
Влад777 Дата: Суббота, 26.12.2015, 10:59 | Сообщение № 20
Группа: Пользователи
Ранг: Участник
Сообщений: 61
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
RAN, Сейчас просто создает файл "Профиль", говорит что такое имя есть и все. Это было у меня и раньше, эту проблему совпадения имен я и пытаюсь решить....

Не вижу противоречий - в ячейке CT2 лежит имя файла, к которому, в случае совпаднеия, надо прибавлять цифры.
 
Ответить
СообщениеRAN, Сейчас просто создает файл "Профиль", говорит что такое имя есть и все. Это было у меня и раньше, эту проблему совпадения имен я и пытаюсь решить....

Не вижу противоречий - в ячейке CT2 лежит имя файла, к которому, в случае совпаднеия, надо прибавлять цифры.

Автор - Влад777
Дата добавления - 26.12.2015 в 10:59
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Переименование имени файла при его сохранении в сучае совпад (Макросы/Sub)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!