Мне нужно запустить множество кодов, похожих на этот (ниже). Могу я проверить, есть ли способы упростить мой код? что он делает: в основном извлекает данные из Excel и обновляет таблицу в PowerPoint

ppPres.Slides("China_A_T10").Shapes("China_A_T10").Table.Cell(2, 1).Shape.TextFrame.TextRange.Text = xlBook.Worksheets("China_A_T10").Range("A5").Text
ppPres.Slides("China_A_T10").Shapes("China_A_T10").Table.Cell(3, 1).Shape.TextFrame.TextRange.Text = xlBook.Worksheets("China_A_T10").Range("A6").Text
ppPres.Slides("China_A_T10").Shapes("China_A_T10").Table.Cell(4, 1).Shape.TextFrame.TextRange.Text = xlBook.Worksheets("China_A_T10").Range("A7").Text
ppPres.Slides("China_A_T10").Shapes("China_A_T10").Table.Cell(5, 1).Shape.TextFrame.TextRange.Text = xlBook.Worksheets("China_A_T10").Range("A8").Text
ppPres.Slides("China_A_T10").Shapes("China_A_T10").Table.Cell(6, 1).Shape.TextFrame.TextRange.Text = xlBook.Worksheets("China_A_T10").Range("A9").Text
ppPres.Slides("China_A_T10").Shapes("China_A_T10").Table.Cell(7, 1).Shape.TextFrame.TextRange.Text = xlBook.Worksheets("China_A_T10").Range("A10").Text
ppPres.Slides("China_A_T10").Shapes("China_A_T10").Table.Cell(8, 1).Shape.TextFrame.TextRange.Text = xlBook.Worksheets("China_A_T10").Range("A11").Text
ppPres.Slides("China_A_T10").Shapes("China_A_T10").Table.Cell(9, 1).Shape.TextFrame.TextRange.Text = xlBook.Worksheets("China_A_T10").Range("A12").Text
ppPres.Slides("China_A_T10").Shapes("China_A_T10").Table.Cell(10, 1).Shape.TextFrame.TextRange.Text = xlBook.Worksheets("China_A_T10").Range("A13").Text
ppPres.Slides("China_A_T10").Shapes("China_A_T10").Table.Cell(11, 1).Shape.TextFrame.TextRange.Text = xlBook.Worksheets("China_A_T10").Range("A14").Text
ppPres.Slides("China_A_T10").Shapes("China_A_T10").Table.Cell(12, 1).Shape.TextFrame.TextRange.Text = xlBook.Worksheets("China_A_T10").Range("A15").Text
'Update 2nd column
ppPres.Slides("China_A_T10").Shapes("China_A_T10").Table.Cell(2, 2).Shape.TextFrame.TextRange.Text = xlBook.Worksheets("China_A_T10").Range("B5").Text
ppPres.Slides("China_A_T10").Shapes("China_A_T10").Table.Cell(3, 2).Shape.TextFrame.TextRange.Text = xlBook.Worksheets("China_A_T10").Range("B6").Text
ppPres.Slides("China_A_T10").Shapes("China_A_T10").Table.Cell(4, 2).Shape.TextFrame.TextRange.Text = xlBook.Worksheets("China_A_T10").Range("B7").Text
ppPres.Slides("China_A_T10").Shapes("China_A_T10").Table.Cell(5, 2).Shape.TextFrame.TextRange.Text = xlBook.Worksheets("China_A_T10").Range("B8").Text
ppPres.Slides("China_A_T10").Shapes("China_A_T10").Table.Cell(6, 2).Shape.TextFrame.TextRange.Text = xlBook.Worksheets("China_A_T10").Range("B9").Text
ppPres.Slides("China_A_T10").Shapes("China_A_T10").Table.Cell(7, 2).Shape.TextFrame.TextRange.Text = xlBook.Worksheets("China_A_T10").Range("B10").Text
ppPres.Slides("China_A_T10").Shapes("China_A_T10").Table.Cell(8, 2).Shape.TextFrame.TextRange.Text = xlBook.Worksheets("China_A_T10").Range("B11").Text
ppPres.Slides("China_A_T10").Shapes("China_A_T10").Table.Cell(9, 2).Shape.TextFrame.TextRange.Text = xlBook.Worksheets("China_A_T10").Range("B12").Text
ppPres.Slides("China_A_T10").Shapes("China_A_T10").Table.Cell(10, 2).Shape.TextFrame.TextRange.Text = xlBook.Worksheets("China_A_T10").Range("B13").Text
ppPres.Slides("China_A_T10").Shapes("China_A_T10").Table.Cell(11, 2).Shape.TextFrame.TextRange.Text = xlBook.Worksheets("China_A_T10").Range("B14").Text
ppPres.Slides("China_A_T10").Shapes("China_A_T10").Table.Cell(12, 2).Shape.TextFrame.TextRange.Text = xlBook.Worksheets("China_A_T10").Range("B15").Text
'Update 3rd column
ppPres.Slides("China_A_T10").Shapes("China_A_T10").Table.Cell(2, 3).Shape.TextFrame.TextRange.Text = xlBook.Worksheets("China_A_T10").Range("C5").Text
ppPres.Slides("China_A_T10").Shapes("China_A_T10").Table.Cell(3, 3).Shape.TextFrame.TextRange.Text = xlBook.Worksheets("China_A_T10").Range("C6").Text
ppPres.Slides("China_A_T10").Shapes("China_A_T10").Table.Cell(4, 3).Shape.TextFrame.TextRange.Text = xlBook.Worksheets("China_A_T10").Range("C7").Text
ppPres.Slides("China_A_T10").Shapes("China_A_T10").Table.Cell(5, 3).Shape.TextFrame.TextRange.Text = xlBook.Worksheets("China_A_T10").Range("C8").Text
ppPres.Slides("China_A_T10").Shapes("China_A_T10").Table.Cell(6, 3).Shape.TextFrame.TextRange.Text = xlBook.Worksheets("China_A_T10").Range("C9").Text
ppPres.Slides("China_A_T10").Shapes("China_A_T10").Table.Cell(7, 3).Shape.TextFrame.TextRange.Text = xlBook.Worksheets("China_A_T10").Range("C10").Text
ppPres.Slides("China_A_T10").Shapes("China_A_T10").Table.Cell(8, 3).Shape.TextFrame.TextRange.Text = xlBook.Worksheets("China_A_T10").Range("C11").Text
ppPres.Slides("China_A_T10").Shapes("China_A_T10").Table.Cell(9, 3).Shape.TextFrame.TextRange.Text = xlBook.Worksheets("China_A_T10").Range("C12").Text
ppPres.Slides("China_A_T10").Shapes("China_A_T10").Table.Cell(10, 3).Shape.TextFrame.TextRange.Text = xlBook.Worksheets("China_A_T10").Range("C13").Text
ppPres.Slides("China_A_T10").Shapes("China_A_T10").Table.Cell(11, 3).Shape.TextFrame.TextRange.Text = xlBook.Worksheets("China_A_T10").Range("C14").Text
ppPres.Slides("China_A_T10").Shapes("China_A_T10").Table.Cell(12, 3).Shape.TextFrame.TextRange.Text = xlBook.Worksheets("China_A_T10").Range("C15").Text
'Update 4th column
ppPres.Slides("China_A_T10").Shapes("China_A_T10").Table.Cell(2, 4).Shape.TextFrame.TextRange.Text = xlBook.Worksheets("China_A_T10").Range("D5").Text
ppPres.Slides("China_A_T10").Shapes("China_A_T10").Table.Cell(3, 4).Shape.TextFrame.TextRange.Text = xlBook.Worksheets("China_A_T10").Range("D6").Text
ppPres.Slides("China_A_T10").Shapes("China_A_T10").Table.Cell(4, 4).Shape.TextFrame.TextRange.Text = xlBook.Worksheets("China_A_T10").Range("D7").Text
ppPres.Slides("China_A_T10").Shapes("China_A_T10").Table.Cell(5, 4).Shape.TextFrame.TextRange.Text = xlBook.Worksheets("China_A_T10").Range("D8").Text
ppPres.Slides("China_A_T10").Shapes("China_A_T10").Table.Cell(6, 4).Shape.TextFrame.TextRange.Text = xlBook.Worksheets("China_A_T10").Range("D9").Text
ppPres.Slides("China_A_T10").Shapes("China_A_T10").Table.Cell(7, 4).Shape.TextFrame.TextRange.Text = xlBook.Worksheets("China_A_T10").Range("D10").Text
ppPres.Slides("China_A_T10").Shapes("China_A_T10").Table.Cell(8, 4).Shape.TextFrame.TextRange.Text = xlBook.Worksheets("China_A_T10").Range("D11").Text
ppPres.Slides("China_A_T10").Shapes("China_A_T10").Table.Cell(9, 4).Shape.TextFrame.TextRange.Text = xlBook.Worksheets("China_A_T10").Range("D12").Text
ppPres.Slides("China_A_T10").Shapes("China_A_T10").Table.Cell(10, 4).Shape.TextFrame.TextRange.Text = xlBook.Worksheets("China_A_T10").Range("D13").Text
ppPres.Slides("China_A_T10").Shapes("China_A_T10").Table.Cell(11, 4).Shape.TextFrame.TextRange.Text = xlBook.Worksheets("China_A_T10").Range("D14").Text
ppPres.Slides("China_A_T10").Shapes("China_A_T10").Table.Cell(12, 4).Shape.TextFrame.TextRange.Text = xlBook.Worksheets("China_A_T10").Range("D15").Text
0
Gerald Tow 22 Ноя 2019 в 13:19

2 ответа

Вы можете создать массив букв (от A до D), чем массив столбцов ячеек (от 2 до 12)

Dim Letters(4) As String
Letters(0) = "A"
Letters(1) = "B";
Letters(2) = "C";
Letters(3) = "D";

Dim Cols(11) As Integer
Cols(0) = 2
Cols(1) = 3
Cols(2) = 4
Cols(3) = 5
Cols(4) = 6
Cols(5) = 7
Cols(6) = 8
Cols(7) = 9
Cols(8) = 10
Cols(9) = 11
Cols(10) = 12

Dim rowIndex = 1
Dim startIndex = 5

Затем пропустите буквы

For i = 0 to 3
    startIndex = 5
    For j = 0 to 10
    ppPres.Slides("China_A_T10").Shapes("China_A_T10").Table.Cell(Cols(j), rowIndex).Shape.TextFrame.TextRange.Text = xlBook.Worksheets("China_A_T10").Range(Letters(i) + "" + startIndex).Text
    startIndex = startIndex + 1
Next
rowIndex = rowIndex +1   
Next
0
JustLearning 22 Ноя 2019 в 13:35
Большое спасибо JustLearning. Циклическое письмо проницательно. Я, вероятно, много раз буду использовать эту технику, чтобы код было легче понять.
 – 
Gerald Tow
25 Ноя 2019 в 06:15

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

Sub looping()
Dim i As Integer, j As Integer

For i = 1 To 4
    For j = 2 To 12
        ppPres.Slides("China_A_T10").Shapes("China_A_T10").Table.Cell(i, j).Shape.TextFrame.TextRange.Text = xlBook.Worksheets("China_A_T10").Cells(j + 3, i).Text
    Next j
Next i
End Sub

Это работает путем присвоения значений строки и столбца ячейки таблицы целому числу, которое меняет каждый запуск цикла. Диапазоны рабочего листа должны иметь одинаковую форму, чтобы одно и то же целое число, скорректированное по начальной позиции, бралось из правильной ячейки. Затем он выполняет цикл для каждого столбца и для каждой строки и устанавливает все позиции.

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

Также это можно ускорить с помощью таких вещей, как Application.screenupdating = false или путем считывания всего этого в массив и выполнения вывода за один раз.

0
Plutian 22 Ноя 2019 в 13:35
Спасибо, Плутиан. Это действительно полезно.
 – 
Gerald Tow
25 Ноя 2019 в 06:13
XlBook.Worksheets (cnaluxux) .Range ("B" & Rows.Count) .End (xlUp) .Text Привет, Плутиан, могу ли я проверить, знаете ли вы, как мне переписать часть Range.end (xlUp) .text, используя ваш метод выше? Я не уверен, как поместить их в .Cells (i, j). Моя идея состоит в том, чтобы зациклиться на столбцах Excel (например, B, C, D, E) и взять только последние видимые данные для ввода в таблицу PPT.
 – 
Gerald Tow
25 Ноя 2019 в 07:31
Этот оператор должен работать нормально, просто убедитесь, что имя листа заключено в кавычки. Worksheets("cnaluxux"). Если вы хотите писать только в последний доступный столбец в таблице, замените цикл for j = 2 to 12 на вычисление j = последней строки в таблице, и все готово.
 – 
Plutian
25 Ноя 2019 в 11:10
Нет проблем, я здесь, чтобы помочь! Если вы чувствуете, что ваша проблема решена, не стесняйтесь принять мой ответ или дайте мне знать, если есть еще что-то, с чем вы боретесь.
 – 
Plutian
25 Ноя 2019 в 11:32