Страницы: 1
RSS
Сохранение одного файла с разным названием и изменением одной строки
 
Дней процветания данному форуму!

Пытался нагуглить ответ на свой вопрос, но безуспешно.
Нужно понять - возможно ли написать макрос для сохранение одного и того же файла с разными названиями, при этом чтобы определенная ячейка в файле менялась в зависимости от названия файла.

Я так понял, подобное сделать невозможно в рамках макросов  
Изменено: vikttur - 09.09.2021 22:04:01
 
Добрый день. Возможно.
Удивление есть начало познания © Surprise me!
И да пребудет с нами сила ВПР.
 
Поддержу улыбчивого коллегу. Можно.
Код
Option Explicit

Sub Main()
    Do
       SaveWb
       Select Case MsgBox("Продолжить?", vbYesNo + vbQuestion)
       Case vbYes
       Case Else
        Exit Do
       End Select
    Loop
End Sub

Sub SaveWb()
    Dim wb As Workbook
    Set wb = ActiveWorkbook
        
    Dim fso As New FileSystemObject
    Dim sPath As String
    Dim sName As String
    Dim sFull As String
    
    On Error Resume Next
    Do
        sName = fso.GetTempName()
        Err.Clear
        With Workbooks(sName & ".xlsm"): End With
        If Err <> 0 Then Exit Do
    Loop
    On Error GoTo 0
     
    wb.Sheets(1).Cells(1, 1).Value = sName
    
    sPath = wb.Path & "\"
    sFull = sPath & sName & ".xlsm"
    
    If fso.FileExists(sFull) Then
        On Error Resume Next
        fso.DeleteFile sFull
        On Error GoTo 0
    End If
    wb.SaveAs Filename:=sFull, FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
End Sub
 
МатросНаЗебре,
И где в коде
Цитата
Hakamasa написал:
чтобы определенная ячейка в файле менялась в зависимости от названия файла
?
 
Цитата
Неопытный_Экселист написал:
И где в коде Цитата Hakamasa  написал:чтобы определенная ячейка в файле менялась в зависимости от названия файла
Цитата
МатросНаЗебре написал:
wb.Sheets(1).Cells(1, 1).Value = sName
 
МатросНаЗебре,
Не думаю, что в ячейку нужно писать имя файла. Она просто должна ИЗМЕНЯТЬСЯ, в зависимости от имени файла, судя непосредственно по цитате из моего предыдущего поста.
То есть, по моему мнению, в коде нужна конструкция вида
Код
If sname = одному имени Then 
wb.Sheets(1).Cells(1, 1).Value = значение1
Else
wb.Sheets(1).Cells(1, 1).Value = значение2
Изменено: Неопытный_Экселист - 09.09.2021 17:17:33
 
В #1 написано "определенная ячейка в файле менялась в зависимости от названия файла".
Полное соответствие является зависимостью. y = x - является зависимостью.
Первая ячейка на первом листе является достаточно определённой ячейкой.
Требование ТЗ выполнено.
 
Цитата
МатросНаЗебре написал:
Требование ТЗ выполнено
Ещё раз: у вас в коде в ячейку пишется имя файла, а не
Цитата
МатросНаЗебре написал:
ячейка в файле менялась в зависимости от названия файла
. Или я чего-то не понимаю?
 
Я не уверен, что станет понятнее, если я напишу ещё раз.
Прямая зависимость - является зависимостью.
В ячейку выводится результат прямой зависимости, которая, как мы увидели в предыдущей строке, является зависимостью.
ТЗ выполнено.
 
Код
Option Explicit

Sub Main()
    Do
       SaveWb
       Select Case MsgBox("Продолжить?", vbYesNo + vbQuestion)
       Case vbYes
       Case Else
        Exit Do
       End Select
    Loop
End Sub
 
Sub SaveWb()
    Dim wb As Workbook
    Set wb = ActiveWorkbook
         
    Dim fso As Object 'New FileSystemObject
    Set fso = CreateObject("Scripting.FileSystemObject")
    Dim sPath As String
    Dim sName As String
    Dim sFull As String
     
    On Error Resume Next
    Do
        sName = fso.GetTempName()
        Err.Clear
        With Workbooks(sName & ".xlsm"): End With
        If Err <> 0 Then Exit Do
    Loop
    On Error GoTo 0
      
    wb.Sheets(1).Cells(1, 1).Value = myF(sName)
     
    sPath = wb.Path & "\"
    sFull = sPath & sName & ".xlsm"
     
    If fso.FileExists(sFull) Then
        On Error Resume Next
        fso.DeleteFile sFull
        On Error GoTo 0
    End If
    wb.SaveAs Filename:=sFull, FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
End Sub

Function myF(s As String)
    myF = s
End Function
 
Цитата
Неопытный_Экселист написал:
у вас в коде в ячейку пишется имя файла, а не
Вы случаем не за одним столом с ТС-м сейчас? :) Очень похоже, что за одним, раз сходу поняли что именно и в какую ячейку надо записывать. Написано в зависимости от имени файла и все. Но как именно ячейка должна зависеть - не написано. Поэтому шансы на то, что правильный вариант предложили Вы ровно такие же, как и шансы, что верное решение предложил МатросНаЗебре. Как равные шансы в том, что ни то, что предложили Вы, ни то, что предложил МатросНаЗебре, может вообще не совпадать с тем, что имел ввиду ТС. Вот придет ТС - тогда и можно будет обсуждать и говорить кому-то, что он сделал правильно/неправильно.
Не гадайте за ТС - просто дождитесь, когда он придет и сам скажет, кто угадал :)
Изменено: Дмитрий(The_Prist) Щербаков - 09.09.2021 18:46:12 (опечатка)
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Полностью поддерживаю Дмитрия. Добавлю, что я и не надеялся, что результат совпадёт с ожиданием ТС. Собственно, предложенные варианты должны были как бы намекнуть, что плохо описанная задача, даст не тот результат, который ожидался.
Страницы: 1
Наверх