Excel это не сложно
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
23.04.2024, 12:48:23

Войти
Название темы должно отражать её содержание.
Темы типа "ПОМОГИТЕ!!!", "Срочно!", "Не получается сделать", "Нужна помощь" и т.п. будут удаляться без объяснения причин
33 242 Сообщений в 5 457 Тем от 6 758 Пользователей
Последний пользователь: Сергей2662
*
Перейти на сайт Хитрости Надстройка MulTEx Обучающие тренинги Наша группа ВКонтакте
Правила форума Начало Помощь Поиск Календарь Войти Регистрация Выйти
+  Excel это не сложно
|-+  Основные форумы
| |-+  Вопросы по Excel и VBA
| | |-+  При копировани макрос VBA вставляет не тот формат (нужны только значения)
Страниц: [1] 2  Все   Вниз
Печать
Автор Тема: При копировани макрос VBA вставляет не тот формат (нужны только значения)  (Прочитано 11450 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Ученик VBA
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 10


Просмотр профиля E-mail
« : 11.01.2017, 14:24:12 »

Добрый день!
Нужно было чтобы у книге "1001+1002 +"  прописать макрос, который будет копирувать значения из книги "загрузить" Листа1 (весь диапазон) у рабочую книгу ("1001+1002 +"  ) на лист "accounts" значения чисел и слов. Макрос должен загружать данные, которые потом будут отображаться на листе "Ліміти кас".
Часть списала с интернета, часть сама, и получилось:
Код: (vb)
Sub Макрос1()
    Sheets("accounts").Visible = True
    Sheets("accounts").Select
    Cells.Select ClearContents
      
    Dim FilesToOpen
    Dim x As Integer

     Application.ScreenUpdating = False  'отключаем обновление экрана для скорости
    
    'вызываем диалог выбора файлов для импорта
    FilesToOpen = Application.GetOpenFilename _
      (FileFilter:="All files (*.*), *.*", _
      MultiSelect:=True, Title:="Files to Merge")
 
    If TypeName(FilesToOpen) = "Boolean" Then
        MsgBox "Не выбрано ни одного файла!"
        Exit Sub
    End If
    
    'проходим по всем выбранным файлам
    x = 1
    While x <= UBound(FilesToOpen)
        Set importWB = Workbooks.Open(Filename:=FilesToOpen(x))
        With ActiveWindow
        Sheets("Лист1").Select
        Columns("A:XFD").Copy
        End With
        ActiveWindow.Close
        ThisWorkbook.Activate
        Sheets("accounts").Select
        Range("A1").Select
        ActiveSheet.PasteSpecial Format:=False, Link:=False, _
        DisplayAsIcon:=False, NoHTMLFormatting:=False
        Sheets("accounts").Visible = False
        x = x + 1
    Wend
    Application.ScreenUpdating = True
End Sub


НО КОГДА МАКРОС ЗАГРУЖАЕТ ДАННЫЕ, то они не отображаются на листе "Ліміти кас" (догадуюсь что формат не тот загружает). Если копирую данные вручну - то все работает. Пробувала
 Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
Выбивает ошибку. Помогите, если сможете. Спасибо
« Последнее редактирование: 11.01.2017, 15:24:30 от Ученик VBA » Записан
Udik
Пользователь
**

Репутация: +6/-0
Офлайн Офлайн

Сообщений: 69


Просмотр профиля E-mail
« Ответ #1 : 11.01.2017, 15:46:01 »

Что-то я не понял, Вы ж вставляете данные из буфера на активный лист, который в данном случае accounts. При чем тут  "Ліміти кас"?
Записан
Ученик VBA
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 10


Просмотр профиля E-mail
« Ответ #2 : 11.01.2017, 16:10:10 »

Макрос загружает данные на лист "accounts". Эти данные суммируются формулами на листе "Ліміти кас". В той книге "1001+1002 +"  видно суммы на листе "Ліміти кас", потому что я данные на  лист "accounts" вручную загружала.   Если запустить Макрос, то данные подтягиваются, но не суммируются на на листе "Ліміти кас". Догадуюсь, что данные подтягиваются как текст а не числа.

Посмотрите на лист "Ліміти кас" там суммы есть (правильно).  А после загрузки макроса там нули.
Записан
Ученик VBA
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 10


Просмотр профиля E-mail
« Ответ #3 : 11.01.2017, 16:14:26 »

лист "Ліміти кас"  это результат (суммы чисел) из данных на лисе "accounts".   Спасибо что решили мне помочь
Записан
Udik
Пользователь
**

Репутация: +6/-0
Офлайн Офлайн

Сообщений: 69


Просмотр профиля E-mail
« Ответ #4 : 11.01.2017, 16:50:25 »

Догадуюсь, что данные подтягиваются как текст а не числа.
Ну да, на листе "Ліміти кас" в столбцах Д и Е данные как текст, о чем недвусмысленно зеленый треугольник говорит. Чтобы данные в числа преобразовать воспользуйтесь одним из вариантов http://www.planetaexcel.ru/techniques/7/1091/
Записан
Udik
Пользователь
**

Репутация: +6/-0
Офлайн Офлайн

Сообщений: 69


Просмотр профиля E-mail
« Ответ #5 : 11.01.2017, 16:54:00 »

В файле загрузить данные в столбцах Д и Е тоже текстовые, вот макрос и копирует соответственно.
Кстати, если файл загрузить всегда с одним именем и находится в одной папке с файлом обработчиком то диалог мультивыбора не нужен.
« Последнее редактирование: 11.01.2017, 16:58:41 от Udik » Записан
Ученик VBA
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 10


Просмотр профиля E-mail
« Ответ #6 : 11.01.2017, 17:19:59 »

Извините, диалог мультивыбора нужен, потому что не только я макросом пользоваться буду.
Попробовала как на http://www.planetaexcel.ru/techniques/7/1091/
Sheets("Лист1").Select
        Selection.NumberFormat = "General"
        Selection.Value = Selection.Value
        Columns("A:XFD").Copy

не помогло. то же самое. Скажите, а Вы не знаете почему когда вместо
ActiveSheet.PasteSpecial Format:=False, Link:=False, _ 
DisplayAsIcon:=False, NoHTMLFormatting:=False 

пишу обычное из макроредактора
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

или просто
 PasteSpecial Paste:=xlPasteValues
то пишет ошибку.
Записан
Ученик VBA
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 10


Просмотр профиля E-mail
« Ответ #7 : 11.01.2017, 17:28:19 »

 Я в интернете найшла, что можно другим способом, тоисть вместо
 
Sub Procedure_1()
    Range("A1").Copy
    Range("B1").PasteSpecial Paste:=xlPasteValues
 End Sub
 

Вариант № 2:

 Sub Procedure_2()
     Range("B1").Value = Range("A1").Value
 End Sub

Но как в моем случае, если у меня нету точного названия второй книги ? (книга "загрузить" может завтра назоваться по-другому  + лежать в другом месте)
Записан
Udik
Пользователь
**

Репутация: +6/-0
Офлайн Офлайн

Сообщений: 69


Просмотр профиля E-mail
« Ответ #8 : 11.01.2017, 17:47:29 »

ету точного названия второй книги ?
Ну как нету, после выбора и открытия файла можно в переменную имя считать(имяфайла=importWB.name) или вообще переменную типа workbook использовать (importWB).

вот процедура которую можно после вставки запустить, и данные в число преобразуются
Код: (vb)


Public Sub tt()
    Dim rng1 As Range
    Dim rowLast
    With Worksheets("accounts")
        rowLast = .Cells(Rows.Count, 2).End(xlUp).Row
        Set rng1 = .Range(Cells(3, 4), Cells(rowLast, 5))
        rng1.NumberFormat = "General"
        rng1.Value = rng1.Value
    End With
End Sub

« Последнее редактирование: 11.01.2017, 17:54:32 от Udik » Записан
Perfect2You
Постоялец
***

Репутация: +12/-0
Офлайн Офлайн

Сообщений: 106


Просмотр профиля E-mail
« Ответ #9 : 11.01.2017, 18:01:50 »

Смысл мультивыбора?
При обработке следующего файла у Вас затираются данные предыдущего. В результате имеете только данные последнего файла.


Если хотите слить данные нескольких файлов воедино - усложнить придется.
Записан
Ученик VBA
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 10


Просмотр профиля E-mail
« Ответ #10 : 11.01.2017, 18:11:23 »

Я потому макрос и пробовала написать, что книга "загрузить" кажен день меняет свое название, местонахождение и количество колонок (ну и + данные).
 
Данные из книги "загрузить"  должны копируваться на лист ""accounts". 
Нудно каждый день новые данные подгружать на лист ""accounts"  и каждый день видеть результат на листе "Ліміти кас" . Динамики не нужно.
Записан
Ученик VBA
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 10


Просмотр профиля E-mail
« Ответ #11 : 11.01.2017, 18:13:51 »

мультивыбор - для выбора книги  "загрузить", которая кажен день меняет свое название, местонахождение и количество колонок (ну и + данные).   Спасибо
Записан
Udik
Пользователь
**

Репутация: +6/-0
Офлайн Офлайн

Сообщений: 69


Просмотр профиля E-mail
« Ответ #12 : 11.01.2017, 18:18:17 »

Я потому макрос и пробовала написать, что книга "загрузить" кажен день меняет свое название, местонахождение и количество колонок (ну и + данные).
Для этого обычного выбора хватит.
типа такого
Код: (vb)

fileToOpen = Application.GetOpenFilename("All Files (*.*),*.*")
    If fileToOpen = False Then Exit Sub
    Workbooks.Open (fileToOpen)
    Set w2 = ActiveWorkbook
Записан
Ученик VBA
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 10


Просмотр профиля E-mail
« Ответ #13 : 11.01.2017, 19:10:23 »

Вы правы, дорогой Udik.  Можно без цыкла так проще работает. Но на рядках
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
ошибку выбивает  Плачущий и не вставляет значения...  Криволапая Я. Не могу копирование одного листа на другой написать. Подскажите, что не так?
Код: (vb)
[/Sub Макрос1()
    Sheets("accounts").Visible = True
    Sheets("accounts").Select
    Cells.Select
    Selection.ClearContents
   
    fileToOpen = Application.GetOpenFilename("All Files (*.*),*.*")
    If fileToOpen = False Then Exit Sub
    Workbooks.Open (fileToOpen)
    Set w2 = ActiveWorkbook
   
    If TypeName(FilesToOpen) = "Boolean" Then
        MsgBox "Не выбрано ни одного файла!"
        Exit Sub
    End If
     
        With ActiveWindow
        Sheets("Лист1").Select
        Columns("A:XFD").Copy
        End With
        ActiveWindow.Close
        ThisWorkbook.Activate
        Sheets("accounts").Select
        Range("A1").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
        Sheets("accounts").Visible = False
       
    Application.ScreenUpdating = True
End Sub]
Записан
Дмитрий Щербаков(The_Prist)
Администратор
Ветеран
*****

Репутация: +485/-0
Офлайн Офлайн

Сообщений: 5 831



Просмотр профиля WWW
« Ответ #14 : 11.01.2017, 19:22:15 »

Уберите ActiveWindow.Close.
А вообще вместо этого
Код: (vb)
With ActiveWindow  
        Sheets("Лист1").Select 
        Columns("A:XFD").Copy 
        End With 
        ActiveWindow.Close 
        ThisWorkbook.Activate 
        Sheets("accounts").Select 
        Range("A1").Select 
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
        :=False, Transpose:=False 
        Sheets("accounts").Visible = False

чуть правильнее так:
Код: (vb)
        w2.Sheets("Лист1").Range("A:XFD").Copy    
        ThisWorkbook.Sheets("accounts").Range("A1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
        :=False, Transpose:=False 
        ThisWorkbook.Sheets("accounts").Visible = False
        w2.Close False 'закрываем книгу-источник без сохранения
Записан

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453
Страниц: [1] 2  Все   Вверх
Печать
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2011, Simple Machines Valid XHTML 1.0! Valid CSS!
Яндекс.Метрика Рейтинг@Mail.ru