2013-12-11 2 views
1

Я немного оглянулся, но не могу найти ответ на этот вопрос. В моей VBA У меня есть строка, которая создает новую сводную таблицу и вставляет его в таблицу, как SO-Excel VBA: Указывать на прогресс пользователя в PivotCaches.create

Application.StatusBar = MyPC.RecordCount 

ActiveWorkbook.PivotCaches.Create(SourceType:=xlExternal, SourceData:= _ 
    ActiveWorkbook.Connections("ACCESS2"), Version:=xlPivotTableVersion14). _ 
    CreatePivotTable TableDestination:="Dashboard!R20C1", TableName:= _ 
    "PTDashboard", DefaultVersion:=xlPivotTableVersion14 

Application.StatusBar = False 

Когда я был на ранних стадиях строительства этого строки состояния будет отображать счетчик, сколько записей было введя в pivotCache из Connection. По какой-то причине это пошло, и я пытаюсь подражать тому, что он делает (возможно, это была версия Excel 2013, так как я также работал над этим проектом на домашнем компьютере).

Поскольку может быть несколько сотен тысяч записей, это может занять до минуты, и я хочу показать пользователю, что это происходит.

Обычно я делаю это в цикле, но поскольку у меня нет этой опции, я немного тупик. Есть ли где-то в фоновом режиме, откуда я могу прочитать эти данные? Надеюсь, я был достаточно ясен. Заранее спасибо.

+0

Что произойдет, если вы добавите 'Application.DisplayStatusBar = True' в начале? – Manhattan

+0

Привет, BK201 Я пробовал это только сейчас, и это ничего не меняет. Панель состояния включена с отображением обычных «Ready», «Calculate» и «Record Macro». Я попытаюсь сделать снимок экрана, если я смогу воспроизвести его на своем ноутбуке с 2013 года. –

+0

Я подтвердил, что Excel 2013 делает то, что я хочу сделать 2010 года. Исходя из того, что это может быть невозможно. Вот изображение, которое я взял из того, что я пытаюсь сделать в Excel 2010. https://pbs.twimg.com/media/BbPgqSqCUAAkUzP.jpg:large –

ответ

2

Я не думаю, что вы сможете получить доступ к данным так, как вы хотите, но чтобы избежать появления висящего приложения или кода, перестаньте работать, вот что вы можете сделать.

Создать небольшую UserForm и поставить одну метку на нем с сообщением, которое указывает на ваш макрос делать что-то, например, «Пожалуйста, подождите, пока Pivotecache нагрузки ... это может занять до 1 минуты.»

Затем отобразите его vbModeless непосредственно перед тем, как вы вызовете свой PivotCache и выгрузите его сразу же после.

Я проверил это с петлей, но я думаю, что он должен работать с тем, что вы делаете, тоже что-то вроде:

Sub Test() 

    UserForm1.Show vbModeless 

    ActiveWorkbook.PivotCaches.Create(SourceType:=xlExternal, SourceData:= _ 
     ActiveWorkbook.Connections("ACCESS2"), Version:=xlPivotTableVersion14). _ 
     CreatePivotTable TableDestination:="Dashboard!R20C1", TableName:= _ 
     "PTDashboard", DefaultVersion:=xlPivotTableVersion14 

    Unload UserForm1 

End Sub 
+0

+ 1 Даже я не знаю, есть ли способ получить данных в реальном времени при создании PivotCache. Единственное, о чем я могу думать, - это информирование пользователя. –

0

Вы можете попробовать это?

Application.StatusBar = "Creating Pivot... Please be Patient" 
DoEvents 

ActiveWorkbook.PivotCaches.Create(SourceType:=xlExternal, SourceData:= _ 
ActiveWorkbook.Connections("ACCESS2"), Version:=xlPivotTableVersion14). _ 
CreatePivotTable TableDestination:="Dashboard!R20C1", TableName:= _ 
"PTDashboard", DefaultVersion:=xlPivotTableVersion14 

Application.StatusBar = "Pivot Created!" 
DoEvents 
+0

Привет, Сиддарт, спасибо за предложение, но это не вызвало эффект, который я испытываю после. Мне удалось сделать снимок того, что я пытаюсь сделать. Ссылка ниже. Мне, возможно, придется согласиться на это. StatusBar = «Подождите минуту, пойдите, возьмите кофе, положите ноги вверх», просто нужно будет сделать https://pbs.twimg.com/media/BbPgqSqCUAAkUzP.jpg:large –

+0

Но это невозможно в начале 2010 года, если Я не ошибаюсь? –

+0

Должно быть, это так. Я надеялся, что, возможно, был технический способ сделать это, и это была не просто функция, доступная только с 13 и далее. Оувелл, терпение будет просто ответом на данный момент :) –

Смежные вопросы