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

Вход

Регистрация

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

 

= Мир MS Excel/Копирование данных на лист и создание файлов в финале - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Копирование данных на лист и создание файлов в финале (Макросы/Sub)
Копирование данных на лист и создание файлов в финале
koyaanisqatsi Дата: Пятница, 23.12.2022, 17:08 | Сообщение № 1
Группа: Проверенные
Ранг: Ветеран
Сообщений: 713
Репутация: 15 ±
Замечаний: 0% ±

Excel 2010
Я к сожалению не понимаю в коде. Знаю только что он выполняет. Копирует данные с листа на лист потом создает файлы с этими данными. Вернее должен создавать но не получается((((

Run-time error '1004':
Application-defined or object-defined error

Ругается на эту строку:

.SortFields.Add Key:=sh_.Cells(r0_, 2).Resize(i - r0_), Order:=xlAscending

[vba]
Код
Sub копированиелиста1()
'
' копированиелиста1 Макрос
'

'
    Sheets("ЭкспортБМ2").Select
    Range("A1:cZ800").Select
    Selection.Copy
    Sheets("ЭкспортБМ").Select
    Range("A1").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
        
    Sheets("ЭкспортБЗУ2").Select
    Range("A1:cZ800").Select
    Selection.Copy
    Sheets("ЭкспортБЗУ").Select
    Range("A1").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
        
    Sheets("ЭкспортАртис2").Select
    Range("A1:cZ800").Select
    Selection.Copy
    Sheets("ЭкспортАртис").Select
    Range("A1").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
        
    Sheets("ЭкспортЛимак2").Select
    Range("A1:cZ800").Select
    Selection.Copy
    Sheets("ЭкспортЛимак").Select
    Range("A1").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
        
        
        

'Sub Лист_экспорт()
    Dim cPath As String, cPrefix As String, cName As String
    cPath = ThisWorkbook.Path & "\экспорт\"
    cPrefix = "Экспорт "
    cName = cPath & cPrefix & Replace(ThisWorkbook.Name, ".xlsm", "") & ".xlsx"
    Dim wbC As Workbook, wbE As Workbook
    Application.ScreenUpdating = False
    Application.Calculation = 3
    Set wbC = ThisWorkbook
    Dim a(1 To 4) As String
    a(1) = "ЭкспортБМ"
    a(2) = "ЭкспортЛимак"
    a(3) = "ЭкспортАртис"
    a(4) = "ЭкспортБЗУ"
    Application.DisplayAlerts = False
    Dim i As Byte
    For i = 1 To UBound(a)
        sort2 (a(i))
        Set wbE = Workbooks.Add
        With wbE.Sheets(1)
            .Name = "Экспорт"
            wbC.Sheets(a(i)).Cells.Copy
            .[a1].PasteSpecial xlPasteValues
        End With
        bName = cPath & cPrefix & Replace(ThisWorkbook.Name, ".xlsm", "") & " " & a(i) & ".xlsx"
        Application.Calculation = 1
        wbE.SaveAs Filename:=bName
        Application.Calculation = 3
        wbE.Close False
    Next i

    bPath = "D:\ОБЩИЕ_ДОКУМЕНТЫ\105 Бухгалтерия\Овощи_приход\"
    bPrefix = "БухПриход "
    bName = bPath & bPrefix & Replace(ThisWorkbook.Name, ".xlsm", "") & ".xlsx"
    'bName = bPath & bPrefix & Replace(ThisWorkbook.Name, ".xlsm", "") & a(i) & ".xlsx"
    Debug.Print bName
    Dim wbQ As Workbook, wbA As Workbook
    Application.ScreenUpdating = False
    Set wbQ = ThisWorkbook
    Set wbA = Workbooks.Add
    wbA.Sheets(3).Name = "Экспорт"
    wbQ.Sheets("Экспорт").Cells.Copy
    wbA.Sheets("Экспорт").[a1].PasteSpecial xlPasteValuesAndNumberFormats
    Application.DisplayAlerts = False
    wbA.Sheets(1).Name = "БухПрих"
    wbQ.Sheets("БухПрих").Cells.Copy
    wbA.Sheets("БухПрих").[a1].PasteSpecial xlPasteFormats
    wbA.Sheets("БухПрих").[a1].PasteSpecial xlPasteValuesAndNumberFormats
    Application.DisplayAlerts = False
    'wbA.Sheets(2).Name = "Выб. БУХ"
    'wbQ.Sheets("Выб. БУХ").Cells.Copy
    'wbA.Sheets("Выб. БУХ").[a1].PasteSpecial xlPasteFormats
    'wbA.Sheets("Выб. БУХ").[a1].PasteSpecial xlPasteValuesAndNumberFormats
    Application.DisplayAlerts = False
    wbA.SaveAs bName
    wbA.Close False
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
    
End Sub

Sub sort2(shn_)
Dim sh_ As Worksheet
Set sh_ = ThisWorkbook.Sheets(shn_)
With sh_
    r0_ = 3
    With .Cells(1)
        nr_ = .SpecialCells(xlLastCell).Row - r0_ + 1
        nc_ = .SpecialCells(xlLastCell).Column
    End With
    With .Sort
        .SortFields.Clear
        .SortFields.Add Key:=sh_.Cells(r0_, 2).Resize(nr_), Order:=xlDescending
        .SetRange sh_.Cells(r0_, 1).Resize(nr_, nc_)
        .Header = xlGuess
        .Apply
        r1_ = sh_.Cells(Rows.Count, 2).End(3).Row
        For i = r0_ To r1_
            If sh_.Cells(i, 2) = "" Then Exit For
        Next i
        If i < r1_ Then sh_.Cells(i, 1).Resize(r1_ - i).EntireRow.Delete
        .SortFields.Clear
        .SortFields.Add Key:=sh_.Cells(r0_, 2).Resize(i - r0_), Order:=xlAscending
        .SortFields.Add Key:=sh_.Cells(r0_, 1).Resize(i - r0_), Order:=xlAscending, DataOption:=xlSortNormal
        .SetRange sh_.Cells(r0_, 1).Resize(i - r0_, nc_)
        .Header = xlGuess
        .Apply
    End With
End With
  Sheets("Заявки").Select
End Sub
[/vba]
 
Ответить
СообщениеЯ к сожалению не понимаю в коде. Знаю только что он выполняет. Копирует данные с листа на лист потом создает файлы с этими данными. Вернее должен создавать но не получается((((

Run-time error '1004':
Application-defined or object-defined error

Ругается на эту строку:

.SortFields.Add Key:=sh_.Cells(r0_, 2).Resize(i - r0_), Order:=xlAscending

[vba]
Код
Sub копированиелиста1()
'
' копированиелиста1 Макрос
'

'
    Sheets("ЭкспортБМ2").Select
    Range("A1:cZ800").Select
    Selection.Copy
    Sheets("ЭкспортБМ").Select
    Range("A1").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
        
    Sheets("ЭкспортБЗУ2").Select
    Range("A1:cZ800").Select
    Selection.Copy
    Sheets("ЭкспортБЗУ").Select
    Range("A1").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
        
    Sheets("ЭкспортАртис2").Select
    Range("A1:cZ800").Select
    Selection.Copy
    Sheets("ЭкспортАртис").Select
    Range("A1").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
        
    Sheets("ЭкспортЛимак2").Select
    Range("A1:cZ800").Select
    Selection.Copy
    Sheets("ЭкспортЛимак").Select
    Range("A1").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
        
        
        

'Sub Лист_экспорт()
    Dim cPath As String, cPrefix As String, cName As String
    cPath = ThisWorkbook.Path & "\экспорт\"
    cPrefix = "Экспорт "
    cName = cPath & cPrefix & Replace(ThisWorkbook.Name, ".xlsm", "") & ".xlsx"
    Dim wbC As Workbook, wbE As Workbook
    Application.ScreenUpdating = False
    Application.Calculation = 3
    Set wbC = ThisWorkbook
    Dim a(1 To 4) As String
    a(1) = "ЭкспортБМ"
    a(2) = "ЭкспортЛимак"
    a(3) = "ЭкспортАртис"
    a(4) = "ЭкспортБЗУ"
    Application.DisplayAlerts = False
    Dim i As Byte
    For i = 1 To UBound(a)
        sort2 (a(i))
        Set wbE = Workbooks.Add
        With wbE.Sheets(1)
            .Name = "Экспорт"
            wbC.Sheets(a(i)).Cells.Copy
            .[a1].PasteSpecial xlPasteValues
        End With
        bName = cPath & cPrefix & Replace(ThisWorkbook.Name, ".xlsm", "") & " " & a(i) & ".xlsx"
        Application.Calculation = 1
        wbE.SaveAs Filename:=bName
        Application.Calculation = 3
        wbE.Close False
    Next i

    bPath = "D:\ОБЩИЕ_ДОКУМЕНТЫ\105 Бухгалтерия\Овощи_приход\"
    bPrefix = "БухПриход "
    bName = bPath & bPrefix & Replace(ThisWorkbook.Name, ".xlsm", "") & ".xlsx"
    'bName = bPath & bPrefix & Replace(ThisWorkbook.Name, ".xlsm", "") & a(i) & ".xlsx"
    Debug.Print bName
    Dim wbQ As Workbook, wbA As Workbook
    Application.ScreenUpdating = False
    Set wbQ = ThisWorkbook
    Set wbA = Workbooks.Add
    wbA.Sheets(3).Name = "Экспорт"
    wbQ.Sheets("Экспорт").Cells.Copy
    wbA.Sheets("Экспорт").[a1].PasteSpecial xlPasteValuesAndNumberFormats
    Application.DisplayAlerts = False
    wbA.Sheets(1).Name = "БухПрих"
    wbQ.Sheets("БухПрих").Cells.Copy
    wbA.Sheets("БухПрих").[a1].PasteSpecial xlPasteFormats
    wbA.Sheets("БухПрих").[a1].PasteSpecial xlPasteValuesAndNumberFormats
    Application.DisplayAlerts = False
    'wbA.Sheets(2).Name = "Выб. БУХ"
    'wbQ.Sheets("Выб. БУХ").Cells.Copy
    'wbA.Sheets("Выб. БУХ").[a1].PasteSpecial xlPasteFormats
    'wbA.Sheets("Выб. БУХ").[a1].PasteSpecial xlPasteValuesAndNumberFormats
    Application.DisplayAlerts = False
    wbA.SaveAs bName
    wbA.Close False
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
    
End Sub

Sub sort2(shn_)
Dim sh_ As Worksheet
Set sh_ = ThisWorkbook.Sheets(shn_)
With sh_
    r0_ = 3
    With .Cells(1)
        nr_ = .SpecialCells(xlLastCell).Row - r0_ + 1
        nc_ = .SpecialCells(xlLastCell).Column
    End With
    With .Sort
        .SortFields.Clear
        .SortFields.Add Key:=sh_.Cells(r0_, 2).Resize(nr_), Order:=xlDescending
        .SetRange sh_.Cells(r0_, 1).Resize(nr_, nc_)
        .Header = xlGuess
        .Apply
        r1_ = sh_.Cells(Rows.Count, 2).End(3).Row
        For i = r0_ To r1_
            If sh_.Cells(i, 2) = "" Then Exit For
        Next i
        If i < r1_ Then sh_.Cells(i, 1).Resize(r1_ - i).EntireRow.Delete
        .SortFields.Clear
        .SortFields.Add Key:=sh_.Cells(r0_, 2).Resize(i - r0_), Order:=xlAscending
        .SortFields.Add Key:=sh_.Cells(r0_, 1).Resize(i - r0_), Order:=xlAscending, DataOption:=xlSortNormal
        .SetRange sh_.Cells(r0_, 1).Resize(i - r0_, nc_)
        .Header = xlGuess
        .Apply
    End With
End With
  Sheets("Заявки").Select
End Sub
[/vba]

Автор - koyaanisqatsi
Дата добавления - 23.12.2022 в 17:08
jun Дата: Понедельник, 26.12.2022, 11:28 | Сообщение № 2
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 141
Репутация: 42 ±
Замечаний: 0% ±

koyaanisqatsi, добрый день!
Можете приложить файл - пример с данными и тем, что хотите получить в итоге?
Спасибо!


Сообщение отредактировал jun - Понедельник, 26.12.2022, 11:29
 
Ответить
Сообщениеkoyaanisqatsi, добрый день!
Можете приложить файл - пример с данными и тем, что хотите получить в итоге?
Спасибо!

Автор - jun
Дата добавления - 26.12.2022 в 11:28
_Boroda_ Дата: Понедельник, 26.12.2022, 12:16 | Сообщение № 3
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16666
Репутация: 6478 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
sort2 на произвольных данных отрабатывает (кстати, это, похоже, я его писал). Предположу, что некорректно скопировались данные кодом, который выше
Проверьте листы
a(1) = "ЭкспортБМ"
a(2) = "ЭкспортЛимак"
a(3) = "ЭкспортАртис"
a(4) = "ЭкспортБЗУ"
Все ли там нормально? Начало для сортировки со строки 3?
Если прикладывать файл будете, то приложите еще и просто с данными, без макросов. А то на работе блокировка безопасности стоит


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщениеsort2 на произвольных данных отрабатывает (кстати, это, похоже, я его писал). Предположу, что некорректно скопировались данные кодом, который выше
Проверьте листы
a(1) = "ЭкспортБМ"
a(2) = "ЭкспортЛимак"
a(3) = "ЭкспортАртис"
a(4) = "ЭкспортБЗУ"
Все ли там нормально? Начало для сортировки со строки 3?
Если прикладывать файл будете, то приложите еще и просто с данными, без макросов. А то на работе блокировка безопасности стоит

Автор - _Boroda_
Дата добавления - 26.12.2022 в 12:16
koyaanisqatsi Дата: Понедельник, 26.12.2022, 16:25 | Сообщение № 4
Группа: Проверенные
Ранг: Ветеран
Сообщений: 713
Репутация: 15 ±
Замечаний: 0% ±

Excel 2010
Можете приложить файл


Я бы и с радостью. Да к сожалению наверно это не возможно и не имеет смысла. Это очень большой файл. 8,5мб ну и там сетевые пути то-есть на локальном компе макрос не захочет работать. Если только пути не переписывать.
Мне бы строку бы эту прочитать. чтобы понять в каком направлении искать вообще.
Я просто удалил и большого количества мест все контра агенты. и вписал новые. у меня эта работа примерно пол рабочего дня заняла. Я пока что предполагаю что можно взять другой рабочий файл и проделать все тоже самое. но страшно потому что результат может оказаться тот же самый.
В идеале бы найти камень приткновения. Предположительно все должно работать. Но не работает. Где-то я что-то проморгал. Может даже формат ячейки?
 
Ответить
Сообщение
Можете приложить файл


Я бы и с радостью. Да к сожалению наверно это не возможно и не имеет смысла. Это очень большой файл. 8,5мб ну и там сетевые пути то-есть на локальном компе макрос не захочет работать. Если только пути не переписывать.
Мне бы строку бы эту прочитать. чтобы понять в каком направлении искать вообще.
Я просто удалил и большого количества мест все контра агенты. и вписал новые. у меня эта работа примерно пол рабочего дня заняла. Я пока что предполагаю что можно взять другой рабочий файл и проделать все тоже самое. но страшно потому что результат может оказаться тот же самый.
В идеале бы найти камень приткновения. Предположительно все должно работать. Но не работает. Где-то я что-то проморгал. Может даже формат ячейки?

Автор - koyaanisqatsi
Дата добавления - 26.12.2022 в 16:25
_Boroda_ Дата: Понедельник, 26.12.2022, 16:39 | Сообщение № 5
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16666
Репутация: 6478 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
По идее, если на листе все правильно загрузилось, то строки
[vba]
Код
.SortFields.Add Key:=sh_.Cells(r0_, 2).Resize(nr_), Order:=xlDescending
[/vba]
и
[vba]
Код
.SortFields.Add Key:=sh_.Cells(r0_, 2).Resize(i - r0_), Order:=xlAscending
[/vba]должны быть одинаковы (только направление сортировки разное, но это как раз и неважно

Посмотрите сначала, на каком листе все это происходит (переменная shn_)
Потом посмотрите, чему равны nr_ и i Могу предположить, что оно как раз равно 3. То есть, в столбце 2 у Вас ничего нет. А мы по нему сортировать пытаемся

Да, другого не вижу. Кусок [vba]
Код
i - r0_
[/vba]получается меньше единицы


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеПо идее, если на листе все правильно загрузилось, то строки
[vba]
Код
.SortFields.Add Key:=sh_.Cells(r0_, 2).Resize(nr_), Order:=xlDescending
[/vba]
и
[vba]
Код
.SortFields.Add Key:=sh_.Cells(r0_, 2).Resize(i - r0_), Order:=xlAscending
[/vba]должны быть одинаковы (только направление сортировки разное, но это как раз и неважно

Посмотрите сначала, на каком листе все это происходит (переменная shn_)
Потом посмотрите, чему равны nr_ и i Могу предположить, что оно как раз равно 3. То есть, в столбце 2 у Вас ничего нет. А мы по нему сортировать пытаемся

Да, другого не вижу. Кусок [vba]
Код
i - r0_
[/vba]получается меньше единицы

Автор - _Boroda_
Дата добавления - 26.12.2022 в 16:39
koyaanisqatsi Дата: Среда, 28.12.2022, 12:33 | Сообщение № 6
Группа: Проверенные
Ранг: Ветеран
Сообщений: 713
Репутация: 15 ±
Замечаний: 0% ±

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

Автор - koyaanisqatsi
Дата добавления - 28.12.2022 в 12:33
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Копирование данных на лист и создание файлов в финале (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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