Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.04.2009, 15:59   #1
winfacks
Пользователь
 
Аватар для winfacks
 
Регистрация: 25.04.2008
Сообщений: 33
По умолчанию Трабла с переносом данных...

В общем то такое дело:
При переносе данных с нескольких листов в один посредством вот такой функции:
Private Sub KB2_Click()

Application.ScreenUpdating = False: On Error Resume Next
KB1_Click
Dim sh As Worksheet, r As Range, ra As Range, dat As Range
Set dat = Cells.Range("a1")

For Each sh In ThisWorkbook.Worksheets
If sh.Name Like Not "*Свод*" Then
For Each cell In sh.Range("f:f").SpecialCells(xlCell TypeConstants).Cells
If cell <= dat Then
Set ra = Intersect(cell.EntireRow, sh.Range("a:ah"))
ra.Copy
Me.Range("a65000").End(xlUp).Offset (1).PasteSpecial xlPasteValues
End If
Next cell
End If
Next sh
Me.[a1].Select
Application.CutCopyMode = False

End Sub
Напроч изменяються форматы данных, что переносяться, причем в хаотичном порядке.
Интересно - кто то сталкивался с таким несчастьем аль нет? А если сталкивался то - ПАМАГЫТЕ Плиииз....
Египетский бог Сет отвечал за переменные окружения.
winfacks вне форума Ответить с цитированием
Старый 23.04.2009, 16:06   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Код:
Private Sub KB2_Click()
    Application.ScreenUpdating = False: On Error Resume Next
    KB1_Click
    Dim sh As Worksheet, r As Range, ra As Range, dat As Range
    Set dat = Cells.Range("a1")

    For Each sh In ThisWorkbook.Worksheets
        If sh.Name Like Not "*Свод*" Then
            For Each cell In sh.Range("f:f").SpecialCells(xlCellTypeConstants).Cells
                If cell <= dat Then
                    Set ra = Intersect(cell.EntireRow, sh.Range("a:ah"))
                    ra.Copy Me.Range("a65000").End(xlUp).Offset(1).Resize(, ra.Cells.Count)
                End If
            Next cell
        End If
    Next sh
    Me.[a1].Select
End Sub

Ну или просто в строке
Me.Range("a65000").End(xlUp).Offset (1).PasteSpecial xlPasteValues
уберите xlPasteValues (или замените на xlPasteAll)
EducatedFool вне форума Ответить с цитированием
Старый 23.04.2009, 16:37   #3
winfacks
Пользователь
 
Аватар для winfacks
 
Регистрация: 25.04.2008
Сообщений: 33
По умолчанию

Фигня получилася - вставляет хаотический вариант форматов в любом варианте
Может посмотрите в файлике?
юзер admin
пароль 000
пароль на проект 111111

А ... лист - "свод"
Вложения
Тип файла: rar Разбивка2-1.rar (659.1 Кб, 14 просмотров)
Египетский бог Сет отвечал за переменные окружения.

Последний раз редактировалось winfacks; 23.04.2009 в 17:02.
winfacks вне форума Ответить с цитированием
Старый 23.04.2009, 16:44   #4
winfacks
Пользователь
 
Аватар для winfacks
 
Регистрация: 25.04.2008
Сообщений: 33
По умолчанию

а еще похоже надо как то буфер обмена очищать ... он все валит в ексель Даже мое общение по аське туды пошло (скопировал в буфер серед нажмакать кнопку на обновление данных)
Египетский бог Сет отвечал за переменные окружения.
winfacks вне форума Ответить с цитированием
Старый 23.04.2009, 16:50   #5
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Мой конвертер форматов не смог открыть Ваш файл.

Возьмите за правило выкладывать файлы в формате Excel 2003

Цитата:
а еще похоже надо как то буфер обмена очищать ...
Не надо его заполнять, тогда и чистить не придётся.

При правильно организованном копировании диапазонов ячеек использование буфера обмена требуется крайне редко.
EducatedFool вне форума Ответить с цитированием
Старый 23.04.2009, 17:00   #6
winfacks
Пользователь
 
Аватар для winfacks
 
Регистрация: 25.04.2008
Сообщений: 33
По умолчанию

Тисяча извинениев многоуважаемый Сенсей, Переконвертил
Вложения
Тип файла: rar Разбивка2-1.rar (765.6 Кб, 28 просмотров)
Египетский бог Сет отвечал за переменные окружения.
winfacks вне форума Ответить с цитированием
Старый 23.04.2009, 17:32   #7
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Может, попробуете так:

Код:
Private Sub KB1_Click()
    Application.ScreenUpdating = False: Me.[a3:ah60000].ClearContents
End Sub

Private Sub KB2_Click()
    Application.ScreenUpdating = False: On Error Resume Next
    KB1_Click
    Dim sh As Worksheet, r As Range, ra As Range, dat As Range
    Set dat = Cells.Range("a1")
    
    For Each sh In ThisWorkbook.Worksheets
        If sh.Name Like Not "*Свод*" Then
        For Each cell In sh.Range("f:f").SpecialCells(xlCellTypeConstants).Cells
            If cell <= dat Then
                Set ra = Intersect(cell.EntireRow, sh.Range("a:ah"))
                Me.Range("a65000").End(xlUp).Offset(1).Resize(, ra.Cells.Count).Value = ra.Value
            End If
        Next cell
        End If
    Next sh
    Me.[a1].Select
End Sub
В этом случае на итоговый лист переносятся только значения.
Так и не понял, что требуется - копировать вместе с форматами, или наоборот - без форматов?

Цитата:
Напроч изменяються форматы данных, что переносяться, причем в хаотичном порядке.
Хоть бы написали, форматы каких ячеек изменяются
(какой формат был до запуска макроса, и какой - после)
EducatedFool вне форума Ответить с цитированием
Старый 23.04.2009, 17:47   #8
winfacks
Пользователь
 
Аватар для winfacks
 
Регистрация: 25.04.2008
Сообщений: 33
По умолчанию

Попробовал последний вариант.
Сделал сбор данных (нажамкал на княпочку) и...
Почему то в столбец (допустим R - "сумма акта") перенеслись значения числа как в варианте текста, числовом , так и в варианте дата-время
Хотя в исходных данных такого нет
Так не совсем красиво обьяснить получаеться - видеть надо
Ну и по остальным столбцам с цифрами тоже бардак тот же
Египетский бог Сет отвечал за переменные окружения.

Последний раз редактировалось winfacks; 23.04.2009 в 17:51.
winfacks вне форума Ответить с цитированием
Старый 23.04.2009, 18:08   #9
winfacks
Пользователь
 
Аватар для winfacks
 
Регистрация: 25.04.2008
Сообщений: 33
По умолчанию

все - ушел стреляться, приду с дыркой в башке минут через 7
Египетский бог Сет отвечал за переменные окружения.
winfacks вне форума Ответить с цитированием
Старый 23.04.2009, 18:12   #10
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
Так не совсем красиво обьяснить получаеться - видеть надо
Вы бы хоть защиту с листов сняли - а то даже не посмотреть формат исходных ячеек на листах...

А вообще, я не знаю, как решить вашу проблему.
В таких случаях я обычно считывал диапазон в массив, в цикле для отдельных столбцов массива производил замену запятой на точку, и т.д., и только потом записывал массив на лист. В итоге добивался результата, но как-то это всё неправильно.
Наверняка есть более простой способ, но мне он неизвестен.

Могу лишь предложить в качестве решения ручное копирование ячеек (по одной)
Долго, но зато работает...

Может, другие форумчане подскажут решение?
EducatedFool вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка списка_с переносом на Листы. anridka Microsoft Office Excel 2 19.02.2009 09:09
Траблы с переносом сайта Diman2008 HTML и CSS 4 18.10.2008 21:36
Проблема с переносом БД на другой комп HAMMAN Помощь студентам 3 16.05.2008 10:52
? Помогите с переносом данных по условию Ural-666 Microsoft Office Excel 3 29.11.2007 22:54