powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VBA Excel: causусы refreshа External Data
5 сообщений из 5, страница 1 из 1
VBA Excel: causусы refreshа External Data
    #34428545
prostoNUT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
доброго времени суток!

хочу поделится радостью, которую так невозможно было найти в инете. Попытки избавиться от глюка у меня были в течении пару дней и вот есть решение с чем радостно и делюсь.
Задача: Апдейт External Data на одном листе для преобразования и последующего заполнения данных на другом листе этого же Workbook.
Проблема:Апдейт происходит позже чем преобразование и заполнение происходит старыми данными, и только после заполнения destination листа, происходит обновление External Data

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
Resp = MsgBox("The data will be refresh from WorkSheet", vbYesNoCancel)
If Resp <> vbNo Then
ActiveWorkbook.RefreshAll
Else
End If

For Each pageProject In arrayProject
    

     ''define sheet that will be filled
    
    Set DateRange = Worksheets(pageProject).Range("B3")
    PageName = CStr(DateRange)
    
    Set idArray = Worksheets(pageProject).Range("C2:C100") ''WorkSheets ID employee
    
    On Error GoTo ErrorNamePage:
    
    Set idSourceRange = Worksheets(PageName).Range("C3:C100") ''a.xls employee
    
    Set workdays = Worksheets(pageProject).Range("E4:I4")
    i =  0 
    For Each Row In workdays
        Period(i) = Row.Value
        i = i +  1 
    Next
  
        If DateDiff("m", Period( 0 ), Period( 4 )) =  0  Then '' full week
        
            For Each arrID In idArray
                If arrID.Value =  0  Then
                Else
                        For Each srcID In idSourceRange
                            If arrID.Value = srcID.Value Then
                               
                               srcID.Offset( 0 ,  4 ).Value = arrID.Offset(- 1 ,  7 ).Value
                               srcID.Offset( 0 ,  5 ).Value = arrID.Offset( 0 ,  7 ).Value
                               srcID.Offset( 0 ,  6 ).Value = arrID.Offset( 1 ,  7 ).Value
                               srcID.Offset( 0 ,  7 ).Value = arrID.Offset( 2 ,  7 ).Value
                               srcID.Offset( 0 ,  8 ).Value = arrID.Offset( 3 ,  7 ).Value
                                                
                            End If
                        Next
        
               End If
        Next
        
       Else
Решение оказалось простым, уж простите, если для вас оно очевидно.

Нужно в External Data Range Properties снять галку Enable background refresh
...
Рейтинг: 0 / 0
VBA Excel: causусы refreshа External Data
    #34428592
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ради Бога простите, что я откликаюсь на ваше решение, я понимаю, что вы им с ним же радостно и делитесь, а не с участниками форума.

Да, решение хоть и простое, но на самом деле важное.

Единственно, я бы осмелился сказать, что лучше всегда указывать свойства у классов. Например, у вас есть такое место в коде:


Set workdays = Worksheets(pageProject).Range("E4:I4")
i = 0
For Each Row In workdays
Period(i) = Row.Value
i = i + 1
Next

Т.е. вы пытаетесь в ранге как таковом идти по его строкам. Такие вещи в .NET уже прощаться не будут. Вам надо перебирать строки не в ранге, а в коллекции его (ранга) строк:

For Each Row In workdays.Rows

Ну и так далее.

Успехов.
...
Рейтинг: 0 / 0
VBA Excel: causусы refreshа External Data
    #34428609
prostoNUT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а вот просить прощения и не за что - одна благодарность)
потому как давно уж хочется приобщится к поколению .NET только вот в рамках работы приходится копаться VBA Access 97)
(что стыдно даже признавать))
...
Рейтинг: 0 / 0
VBA Excel: causусы refreshа External Data
    #34428636
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
It's OK!

Начните с привычки все делать в классах, а не в модулях. Как говорят в Одессе (по-моему) - "Почувствуйте разницу!". И мы с удовольствием разделим вашу радость, если вы поделитесь ею с нами, а не с ними.

Успехов!

:0))
...
Рейтинг: 0 / 0
VBA Excel: causусы refreshа External Data
    #34428674
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати,

For Each Row In workdays.Rows

тоже нехорошо. Там вы как бы что-ли берете зарезервированное слово Row в качестве суб"екта нумерации. Мне даже непонятно, почему оно вообще работает. Надо ввести об"ект класса Range (в .NET он будет (будем надеяться) класса Row), и уже этот об"ект использовать в цикле:

Dim objRow as Range

For Each objRow In workdays.Rows

Успехов
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VBA Excel: causусы refreshа External Data
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]