Макрос обновления листа excel

 

saz

Пользователь

Сообщений: 12
Регистрация: 15.03.2016

Добрый день!
Есть файл в нем 5 листов с таблицами, каждая таблица выгружает данные из  другой программы, для того чтобы произошла выгрузка нужно каждый раз обновлять каждый лист. Подскажите пожалуйста, какой алгоритм у макроса , чтобы нажимая на одну кнопку обновлялись сразу все таблицы?

 

Юрий М

Модератор

Сообщений: 60585
Регистрация: 14.09.2012

Контакты см. в профиле

Алгоритм такой: перебираем циклом пять нужных листов и на каждом вызываем макрос обновления.

 

saz

Пользователь

Сообщений: 12
Регистрация: 15.03.2016

#3

15.03.2016 09:58:39

Код
Sub Refres()   
   For Sheets("Лист1").Select
    'Range("a1").Select
     Next (Sheets("Лист1").Range("a1")).RefreshTable
End Sub

Так получается? Не очень помню написание на VBA

 

Юрий М

Модератор

Сообщений: 60585
Регистрация: 14.09.2012

Контакты см. в профиле

#4

15.03.2016 10:03:10

Цитата
saz написал: Так получается?

Это Вы меня спрашиваете? ))

Цитата
saz написал: Не очень помню написание на VBA

Что у Вас с памятью? )

Код
Sub Main()
Dim n As Long
    For n = 1 To Sheets.Count 'Цикл с первого по последний лист
        Call МойМакросОбновления 'Здесь имя имеющегося макроса обновления
    Next
End Sub
 

Юрий М

Модератор

Сообщений: 60585
Регистрация: 14.09.2012

Контакты см. в профиле

 

Юрий М

Модератор

Сообщений: 60585
Регистрация: 14.09.2012

Контакты см. в профиле

#6

15.03.2016 10:16:06

Не видел Вашего сообщения, когда писал своё. Если у Вас обновление происходит именно так:

Код
Range("a1").RefreshTable

то попробуйте такой вариант:

Код
 Sub Main()
Dim n As Long
    For n = 1 To Sheets.Count 'Цикл с первого по последний лист
        Sheets(n).Range("a1").RefreshTable
    Next
End Sub
 

saz

Пользователь

Сообщений: 12
Регистрация: 15.03.2016

кнопка цитирования не для ответа [МОДЕРАТОР]

Вы меня извините))
Чтобы прошло обновление Range(«a1»).RefreshTable, мне нужно написать отдельный макрос на него?
и какой код в нём должен быть?
В школе 7 лет назад эти макросы изучал, не черта не помню :oops:

 

Юрий М

Модератор

Сообщений: 60585
Регистрация: 14.09.2012

Контакты см. в профиле

Цитировать меня, а тем более, полностью нет никакой необходимости. Если Ваша строка производит обновление на листе, то эта же строка в цикле будет делать те же самые действия с каждым листом в цикле.
Вы код в работе проверили?

 

saz

Пользователь

Сообщений: 12
Регистрация: 15.03.2016

Юрий М, я вот и спрашиваю,как сделать эту строку, у меня обновление идёт через надстройки

 

Юрий М

Модератор

Сообщений: 60585
Регистрация: 14.09.2012

Контакты см. в профиле

См. #4 и вызывайте процедуру, которая занимается обновлением — я же не вижу, какой там макрос…

 

saz

Пользователь

Сообщений: 12
Регистрация: 15.03.2016

Чтобы вызвать макрос,нужно его создать, я вопрос не правильно сформулровал, «какой будет код у макроса, который делает обновление таблиц»

 

Юрий М

Модератор

Сообщений: 60585
Регистрация: 14.09.2012

Контакты см. в профиле

Да откуда же мне знать, что там за таблицы у Вас и что понимать под обновлением? Вручную Вы как их обновляете?

 

saz

Пользователь

Сообщений: 12
Регистрация: 15.03.2016

Юрий М,в экселе установлена надстройка программы из которой идет обновление

 
saz

Скопируй и проверь макрос !
Обновление в Excel
Дынные — Обновить все !
 

____________________________________________
Для кого то это пара кликов решает все !

 

saz

Пользователь

Сообщений: 12
Регистрация: 15.03.2016

Zaur Gasymov,не работает, пишет ошибку «не поддерживает это свойство или метод»

 

kuklp

Пользователь

Сообщений: 14868
Регистрация: 21.12.2012

E-mail и реквизиты в профиле.

#16

15.03.2016 17:14:21

Кросс:

http://www.programmersforum.ru/showthread.php?t=290527

Я сам — дурнее всякого примера! …

каролинка

0 / 0 / 0

Регистрация: 28.10.2012

Сообщений: 152

1

Как обновить листы автоматически при их модификации

01.11.2012, 13:48. Показов 11055. Ответов 4

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Всем привет!
Как можно обновить лист в экселе? я просто на одном листе вношу изменения, и мне приходится на другом ctrl+alt+l нажимать, чтоб обновлялось (
Пробовала

Visual Basic
1
 Application.Volatile True

но не уверена, что обновляется то, что нужно



0



Казанский

15136 / 6410 / 1730

Регистрация: 24.09.2011

Сообщений: 9,999

01.11.2012, 15:21

2

Visual Basic
1
ДругойЛист.Calculate

?



1



каролинка

0 / 0 / 0

Регистрация: 28.10.2012

Сообщений: 152

01.11.2012, 17:02

 [ТС]

3

Казанский, не пересчитывает(

Visual Basic
1
ThisWorkbook.Worksheets("UREN TABEL").Columns("A:AL").Calculate



0



SlavaRus

1121 / 229 / 36

Регистрация: 15.03.2010

Сообщений: 698

01.11.2012, 17:20

4

В листе случаем не автофильтр? Если да, то попробуй:

Visual Basic
1
    Worksheets("SheetName").AutoFilter.ApplyFilter



1



0 / 0 / 0

Регистрация: 28.10.2012

Сообщений: 152

01.11.2012, 17:27

 [ТС]

5

SlavaRus, оказалось что да) все работает, спасибо!)

Добавлено через 41 секунду
SlavaRus, там просто таблицы не мои, плохо понимаю что там и как организовано (((



0



Группа: Пользователи

Ранг: Новичок

Сообщений: 17


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

Добрый день, уважаемые знатоки

Есть рабочий макрос на обновление данных в книге каждую секунду,
много ячеек с показателями времени, которые нужно видеть и понимать,что процесс идет
[vba]

Код

Sub calctimer()
   Calculate
   Application.OnTime Now + TimeSerial(0, 0, 1), «calctimer»
End Sub

[/vba]

HUGO пишет:

Цитата

Когда у Вас появится personal.xls* — то это файл вообще не сможете закрыть (если нет запроса разрешить макросы). Этот макрос времени нужно дорабатывать.

По совету _Boroda_ заменил на

Цитата

ActiveSheet.Calculate

shurikus также обращал внимание на проблему файла с этим макросом

ВОПРОС: каким другим методом можно нормально пересчитать активный лист (обновить данные)

A simple DoEvents should do the trick! ;)

Try this :

Private Sub Workbook_Open()
    ThisWorkbook.RefreshAll
    DoEvents
    Run "Macro1"
End Sub

And if it’s not, just add this line after the DoEvents :

Application.Wait(Now + TimeValue("0:00:05"))

This will put on hold the execution of the code, here for 5 seconds!


If you want to launch the save parts once a specific range has been modified, place your that code into the sheet module :

Private Sub Worksheet_Change(ByVal Target As Range)
If Application.Intersect(Target, Me.Range(Rg_To_Check)) Is Nothing Then
    'Not in range
Else
    'In range to check
   Run "Macro1"
End If
End Sub

And get rid of the Run "Macro1" in the Workbook_Open() event.


Also, be careful, because your last line is Application.DisplayAlerts = False you won’t have alerts afterwards, you should use it like this instead :

Sub Macro1()

 Dim ws As Worksheet, newWb As Workbook
 Dim SaveToDirectory As String

 SaveToDirectory = "C:Macro"

 Application.DisplayAlerts = False
 Application.ScreenUpdating = False
 For Each ws In Sheets(Array("locationwise"))
     ws.Copy
     Set newWb = ActiveWorkbook
     With newWb
        .SaveAs SaveToDirectory & ws.Name, xlCSV
        .Close (False)
     End With
 Next ws
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub

I am using all the solutions that appear in:

How to refresh ALL cell through VBA

Getting Excel to refresh data on sheet from within VBA

ActiveSheet.EnableCalculation = False  
ActiveSheet.EnableCalculation = True

or

Application.Calculate

or

Application.CalculateFull

None of them works in Excel 2010. When I go to the cell and right click refresh it works. How can I refresh within VBA?

Sheets("Name_of_sheet").Range("D424").Refresh raises an

exception 438

Questions:

  1. How can I make the script support Excel 2003, 2007, 2010?
  2. How can I choose the source file to refresh from using VBA?

EDIT:

  1. I want to simulate a right mouse click and choose refresh in the menu in worksheet 3. That is the entire story.

  2. I work on an Excel file created 10 years ago. When opening in Excel 2010, I can go to a cell and right click on it and choose refresh and then choose the .txt file to refresh from. I am trying to do it automatically within VBA.

Community's user avatar

asked Nov 22, 2012 at 13:39

0x90's user avatar

6

You could try using Application.Calculation

Application.Calculation = xlCalculationManual
Application.Calculation = xlCalculationAutomatic

answered Nov 22, 2012 at 13:42

Anirudh Ramanathan's user avatar

4

For an individual cell you can use:

Range("D13").Calculate

OR

Cells(13, "D").Calculate

0x90's user avatar

0x90

38.9k36 gold badges163 silver badges244 bronze badges

answered Nov 22, 2012 at 13:46

InContext's user avatar

InContextInContext

2,46112 silver badges24 bronze badges

1

I finally used mouse events and keystrokes to do it:

Sheets("worksheet34").Select
Range("D15").Select
Application.WindowState = xlMaximized
SetCursorPos 200, 600 'set mouse position at 200, 600
Call mouse_event(MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0) 'click left mouse
Application.SendKeys ("R")

answered Nov 29, 2012 at 5:52

0x90's user avatar

0x900x90

38.9k36 gold badges163 silver badges244 bronze badges

2

just a reminder;

be careful when using

Application.Calculation = xlCalculationManual
Application.Calculation = xlCalculationAutomatic

this sets the entire excel application to calculate formula’s either automatically or manually. If you use

Application.Calculation = xlCalculationManual

you’ll notice your automatic formulas no longer work.

cheers

answered Feb 16, 2016 at 17:53

LeeF's user avatar

You can force excel to recalculate a cell or range of cells by marking the cell/range as dirty.

Example :

' Recalculate Column D4 to D24
Sheets("Name_of_sheet").Range("D4:D24").Dirty

or

' Recalculate Cell D4<br>
Sheets("Name_of_sheet").Range("D4").Dirty<br>

Ike's user avatar

Ike

7,8904 gold badges11 silver badges29 bronze badges

answered Sep 5, 2021 at 11:16

XYZLOL's user avatar

Application.Calculate didn’t work for my function. Not even when followed by DoEvents.

What I found that works is to re-enter the formula in the cell.
A simple way to get the formula is to start recording a macro, use F2 to edit the cell, then press enter. The macro will make a great copy of the function text with all needed quotes.

Below is an example.

Sheets("Name_of_sheet").Range("D424").FormulaR1C1 = "=now()"

svyat1s's user avatar

svyat1s

8689 gold badges12 silver badges21 bronze badges

answered Mar 5, 2021 at 19:36

Scott's user avatar

Cells(x, y).Select
ActiveCell.FormulaR1C1 = Selection.Value

works perfectly for me

answered Aug 2, 2022 at 20:21

user19260138's user avatar

I have a long «macro» in a workbook > 20 MB, tens of thousands of lines, that calls a dll written in Fortran. None of these methods worked:

Call Application.Calculate
Call Application.CalculateFull
Call Application.CalculateFullRebuild
Re-entering the formula
Range.Dirty

Application.Calculation = xlCalculationManual
Application.Calculation = xlCalculationAutomatic

ThisWorkbook.ActiveSheet.EnableCalculation = False
ThisWorkbook.ActiveSheet.EnableCalculation = True

This worked:

On Error Resume Next
Application.SendKeys "{F2}{Enter}{NumLock}"  'SendKeys turns off NumLock for some reason
On Error GoTo 0

This even worked when a chart was selected.

answered Feb 9 at 14:47

Rocky Scott's user avatar

Rocky ScottRocky Scott

4364 silver badges13 bronze badges

«Обновить все» с помощью макроса.Как это сделать,если воможно такое.


Краткость, конечно, сестра таланта, но не в Вашем случае.
«Обновить все» — что все? К какой команде или объекту это относится? _сводные_, диаграммы или еще что?

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…
www.excel-vba.ru
Просто СПАСИБО [+оказать+]
Считаешь СПАСИБО мало? Яндекс.Деньги: 41001332272872; WM: R298726502453


«Обновить все» Ctrl+Alt+F5 Обновление в книге всех сведений из источников данных.Excel 2007 во вклатке «Данные»


Я так полагаю, у Вас сломался макрорекордер? Почему все так брезгуют им пользоваться?

ActiveWorkbook.RefreshAll

Да, вдруг Вы не знаете, что такое макрорекордер — почитайте здесь

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…
www.excel-vba.ru
Просто СПАСИБО [+оказать+]
Считаешь СПАСИБО мало? Яндекс.Деньги: 41001332272872; WM: R298726502453



Понравилась статья? Поделить с друзьями:
  • Макрос по умолчанию excel
  • Макрос обновления книги excel
  • Макрос номер ячейки excel
  • Макрос начать запись excel
  • Макрос названия листов в книге excel