Пытался нагуглить ответ на свой вопрос, но безуспешно. Нужно понять - возможно ли написать макрос для сохранение одного и того же файла с разными названиями, при этом чтобы определенная ячейка в файле менялась в зависимости от названия файла.
Я так понял, подобное сделать невозможно в рамках макросов
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
МатросНаЗебре, Не думаю, что в ячейку нужно писать имя файла. Она просто должна ИЗМЕНЯТЬСЯ, в зависимости от имени файла, судя непосредственно по цитате из моего предыдущего поста. То есть, по моему мнению, в коде нужна конструкция вида
Код
If sname = одному имени Then
wb.Sheets(1).Cells(1, 1).Value = значение1
Else
wb.Sheets(1).Cells(1, 1).Value = значение2
В #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
Неопытный_Экселист написал: у вас в коде в ячейку пишется имя файла, а не
Вы случаем не за одним столом с ТС-м сейчас? Очень похоже, что за одним, раз сходу поняли что именно и в какую ячейку надо записывать. Написано в зависимости от имени файла и все. Но как именно ячейка должна зависеть - не написано. Поэтому шансы на то, что правильный вариант предложили Вы ровно такие же, как и шансы, что верное решение предложил МатросНаЗебре. Как равные шансы в том, что ни то, что предложили Вы, ни то, что предложил МатросНаЗебре, может вообще не совпадать с тем, что имел ввиду ТС. Вот придет ТС - тогда и можно будет обсуждать и говорить кому-то, что он сделал правильно/неправильно. Не гадайте за ТС - просто дождитесь, когда он придет и сам скажет, кто угадал
Полностью поддерживаю Дмитрия. Добавлю, что я и не надеялся, что результат совпадёт с ожиданием ТС. Собственно, предложенные варианты должны были как бы намекнуть, что плохо описанная задача, даст не тот результат, который ожидался.