Предупреждение, если имя сохранения не совпадает с именем файла

#excel #vba #autosave

Вопрос:

Я работаю над формой excel, которая сохраняет в книге каждую запись с именем из определенной ячейки. У меня эта часть работает нормально, но я обнаружил, что если я начну ее и сохраню, затем продолжу ее и изменю значение этой ячейки, я перезапишу существующий файл с именем этого значения ячейки. Я не хочу, чтобы это случилось. Есть ли способ, которым я могу проверить, совпадает ли активное имя файла со значением ячейки, прежде чем оно позволит сохранить книгу. Вот весь код, который поможет понять, что он делает. Я бы подумал, что изложить все это в заявлении «Если» было бы правильным решением, но я не уверен. Извините, что я не умею кодировать

 Private Sub cmdEnter_Click()  'Unprotect QCS sheet  Sheets("QCS").Unprotect Password:="1234"    'Copy input values to sheet QCS  Dim lRow As Long  Dim ws As Worksheet  Set ws = Worksheets("QCS")  lRow = ws.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row  With ws  .Cells(lRow, 1).Value = Range("Home!B1")  .Cells(lRow, 2).Value = Range("Home!B2")  .Cells(lRow, 3).Value = Range("Home!B4")  .Cells(lRow, 4).Value = Range("Home!B3")  .Cells(lRow, 5).Value = Me.txtRollNumber.Value  .Cells(lRow, 6).Value = Me.cboTreatment.Value  .Cells(lRow, 7).Value = Me.cboTensions.Value  .Cells(lRow, 8).Value = Me.txtWidth.Value  .Cells(lRow, 9).Value = Me.txtBasisWeight.Value  .Cells(lRow, 10).Value = Me.txtSlip.Value  .Cells(lRow, 11).Value = Me.txtHaze.Value  .Cells(lRow, 12).Value = Me.txtOpacity.Value  .Cells(lRow, 13).Value = Me.txtGloss.Value    End With  'Clear input controls.  Me.txtRollNumber.Value = ""  Me.cboTreatment.Value = ""  Me.cboTensions.Value = ""  Me.txtWidth.Value = ""  Me.txtBasisWeight.Value = ""  Me.txtSlip.Value = ""  Me.txtHaze.Value = ""  Me.txtOpacity.Value = ""  Me.txtGloss.Value = ""      'Save the Workbook as excel doc.  Application.DisplayAlerts = False  Dim Path As String  Dim filename As String  Path = "C:Users121375DocumentsQCSTrial"  filename = Range("Home!B2")  ActiveWorkbook.SaveAs filename:=Path amp; filename amp; ".xlsm"    'Save QCS Sheet as PDF  'Create and assign variables  Dim saveLocation As String  Dim sheetArray As Variant   saveLocation = "C:Users121375DocumentsQCSTrial" amp; filename amp; ".xlsm"  sheetArray = Array("QCS")   'Select specific sheets from workbook, the save all as PDF  Sheets(sheetArray).Select  ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _  filename:=saveLocation    'Close Form.  Unload Me    'Protect Sheet Again.  Sheets("QCS").Protect Password:="1234"     End Sub  

Комментарии:

1. Не ясно (по крайней мере, для меня), чего вы хотите добиться. Поскольку SaveAs используется значение ячейки «B2» листа «Главная», как перезаписать активную книгу? Очевидно, что он создаст новую книгу с этим конкретным именем. Какой, на самом деле, проблемы вы хотите избежать? Все время при использовании SaveAs создается новая рабочая книга, использующая значение ячейки «B2». Я не могу понять сценарий, который вы пытаетесь описать. Что означает**, если я начну один и сохраню его, а затем продолжу его**? Проблема в коде, который вы показываете, или это как-то связано с самим сохранением?

2. Таким образом, это будет использоваться для записи проверок качества, имя файла будет номером заказа. Поэтому, когда форма введена, она извлекает номер заказа из этой ячейки и сохраняет файл. Естественно, теперь это открытая рабочая тетрадь. Теперь предположим, что кто-то меняет номер заказа на уже введенный заказ и снова заполняет форму. Тот заказ, который уже был введен, теперь перезаписан. Мне было интересно, есть ли способ заставить форму не сохраняться, если ячейка с номером заказа и активное имя файла не совпадают, и если нет, отправьте сообщение о закрытии книги.

3. Можете ли вы лучше объяснить, что означает для вас «перезаписано»? Как я уже сказал, SaveAs метод создает новую рабочую книгу с именем, взятым из ячейки «B1». Вы имеете в виду, чтобы избежать сохранения, если книга с таким именем, как в «B2», уже существует? Что должно означать то же самое, что и значение ячейки раньше ? Вы имеете в виду что-то вроде «это было спасено однажды в прошлом»? В любом случае, если вы попытаетесь сохранить существующую книгу, Excel подумает об этом и спросит, хотите ли вы ее перезаписать. Вы хотите отказаться от сохранения без запроса на перезапись, чтобы пользователь не нажимал «ОК», когда его об этом спрашивают?

4. Я думаю, вам нужно поймать дубликат до того, как он будет занесен на рабочий лист. Что-то вроде If WorksheetFunction.CountIf(ws.Range("B:B"), Range("Home!B2")) gt; 0 Then Exit Sub «может быть».

5. Я сделал обходной путь. Поскольку эта книга должна была быть открыта из отдельной книги, я смог связать ячейку B2 с именем файла в шаблоне, а затем попросил мою книгу запуска создать файл на основе шаблона и дать ему необходимое имя. Извините, если это не имеет смысла. Возможно, это был не самый простой способ обойти проблему, но сейчас она работает в 100% случаев. В принципе, сейчас у нас нет ИТ-поддержки для создания приложений для нас, поэтому я использую excel, чтобы попытаться что-то сделать.