Хочу упростить и пояснить поломку. Получается очень странная работа функции saveAs
В моем случае она сохраняет данные с листа Progon в файл. Для теста дополнительно задал опцию создания копии файла.
Функция срабатывает. Файл создается. Копия создается.
Затем процедура должна закрыть книгу с листами.
При закрытии книги данные в новом созданным функцией текстовом файле перезаписываются на данные с другого листа Price.
Файл копии остается нормальным с нужными данными.
Что я делаю не так? Может путаница при передаче параметров в функции между сабами? Хоть вопрос наводящий задайте.
Но опять же есть один файл эксель.xls с листами для обработки под который все делалось и он обрабатывается хорошо. Но стоит в нем сделать любое изменение, которое приводит к запросу на пересохранение файла при закрытии и он так же перестает нормально обрабатываться. Созданный файл перезаписывается данными с другого листа. xls менял на xlsx. но разницы нет.
Код |
---|
Private Sub Workbook_Open()
Dim wrkBoook As Workbook
Dim wrkBook As Workbook
Dim strPath As String, strFile As String
Application.ScreenUpdating = False
Set wrkBoook = ThisWorkbook
strPath = wrkBoook.Path '--- адрес папки где хранится рабочая книга
strFile = strPath & "\Mat_Elem_trigger.xls"
Set wrkBook = Application.Workbooks.Open(strFile)
Call PriceRegion(wrkBook, strPath)
wrkBook.Close True '--- После срабатывания этой функции все перезаписывается!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
ThisWorkbook.Close True
End Sub
Sub PriceRegion(wrkBook As Workbook, strPath As String)
Dim shtOld As Worksheet, shtNew As Worksheet
Dim rngFirst1 As Range, rngLast1 As Range, rngAll1 As Range
Dim Nrow As Long, NrowMax As Long
Set shtOld = wrkBook.Worksheets("Price")
Set shtNew = wrkBook.Worksheets("Progon")
Application.ScreenUpdating = False
Call ClearSheet(shtNew)
Set rngFirst1 = shtOld.Range("A3")
NrowMax = shtOld.Rows.Count
Do
Set rngAll1 = rngFirst1.CurrentRegion
Nrow = rngAll1.Rows.Count
Call Progon(rngAll1)
Call ReverceList1(wrkBook, shtOld, shtNew, rngFirst1)
Set rngLast1 = rngAll1.Cells(Nrow, 1)
Set rngFirst1 = rngLast1.End(xlDown)
Loop Until rngFirst1.Row = NrowMax
shtNew.SaveAs Filename:=strPath & "\price" & Format(Now(), "yyyymmdd_hhnnss") & ".txt", FileFormat:=xlUnicodeText, CreateBackup:=True
End Sub
|