2016-08-22 1 views
1

Каждый месяц я запускаю программу VBA для обновления таблицы данных предыдущего месяца (на слайде Power Point) с новыми данными (которые я беру из файла Excel). Я использую следующую функцию VBA для вставки данных.Что вызывает случайные промахи при вставке клеток Excel в ячейки таблицы Power Point?

Function PastePcts(ByVal tbl As PowerPoint.Table, 
    ByVal oldRow As Long, ByVal oldCol As Long, 
    ByVal newRow As Integer, ByVal newCol As Integer) 
' 
' This function basically pastes data from Cell (oldRow, oldCol) of the current Excel 
' spreadsheet to Cell (newRow, newCol) of the input PowerPoint table 
' 
    Cells(oldRow, oldCol).Copy 
    With tbl.Cell(newRow, newCol).Shape.TextFrame.TextRange 
     .Paste 'Pastes new percent 
     Call .Replace("%","") 'Removes % sign 
     .Font.Bold = True 'Restores boldface 
    End With 
End Function 

Большинство клеток на изменение таблицы PowerPoint, как и ожидалось, но некоторые из них случайным образом сохранить свое значение по сравнению с предыдущим месяцем, как эта функция никогда не называли на них. Если я снова запустил программу, я, вероятно, получу те же проблемы, но набор ячеек таблицы, сохраняющих их старое значение, будет другим.

В моем последнем прогоне в таблице было 88 ячеек, значение которых изменилось с прошлого месяца, 78 из которых успешно изменились. Как я могу изменить код, чтобы исправить эту проблему?

ответ

0

Попробуйте просто установить значение ячейки powerpoint, а не копировать всю ячейку Excel. Использование буфера обмена обычно медленнее и не так надежно, как обработка строк/числовых значений. Особенно между различными приложениями (Office не может использовать свой собственный буфер между экземплярами даже одного и того же приложения.)

With tbl.Cell(newRow, newCol).Shape.TextFrame.TextRange 
    .Text = Cells(oldRow, oldCol).Value 
    Call .Replace("%","") 'Removes % sign 
    .Font.Bold = True 'probably not necessary any more 
End With 

В зависимости от ячейки Excel вам форматирования, возможно, придется сделать некоторые настройки

+0

Большое спасибо. Я попробовал ваше предложение, и все прекрасно копировалось! –

0

Это выглядит как вопрос времени для меня. Можете ли вы подтвердить, установив точку останова и пройдя через код для всех 88 ячеек, чтобы проверить, все ли заполнены? Я испытал подобную проблему с копировать/вставить петли больших количествах в PowerPoint и не нашел решение, хотя я попробовал следующее:

  1. Добавление DoEvents после метода .Copy попробовать Тхо дать время OS для буфера обмена для заполнения.
  2. Ввод метода .Paste в ли ... Хотя цикл и проверка Err = 0, прежде чем продолжить.
  3. Замедление работы с помощью простого WinAPI Сон звонок.
  4. Опрос типа данных буфера обмена (более сложные вызовы WinAPI) перед выполнением метода .Paste для проверки допустимого содержимого.

Возможно, один из указанных способов будет работать в вашем случае. Однако, когда он случайным образом терпит неудачу в моем коде, я получаю сообщение об ошибке: «данные не могут быть вставлены здесь», поэтому, если вы не удалили обработку ошибок из вашего опубликованного кода, может быть, причина в другом.

Я думаю, что есть что-то в корне неправильно с взаимодействием между VBA и базовой ОС относительно этого случайного поведения ...

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