如何解决VBA-将数组转换为For循环
我试图自动执行“将excel范围粘贴到PPT”的过程。例如,将Excel sheet7中的A1:K39粘贴到PPT slide2;将sheet1中的A1:K39粘贴到slide3;将sheet9中的A1:K39粘贴到slide4等上。
如果我按如下所述一一键入数组,它将起作用:
import os
import sys
def extractAllLine(strsNot2Search):
with open("/path/to/filter/Dump.txt") as All_file:
for line in All_file:
if not list(filter(lambda str2Search: str2Search in line,strsNot2Search)):
print(line)
def extractFilter():
with open("/path/to/filter/Filter.txt") as filter_file:
filterConditions = [] # collect all your not search conditions here
for line in filter_file:
filterstring = line.rstrip()
filterConditions.append(filterstring)
extractAllLine(filterConditions)
if __name__ == '__main__':
extractFilter()
我尝试按如下方式为幻灯片数组和范围数组编写一个for循环-尽管它没有按我的要求工作。仅将sheet45中的A1:K39粘贴到PPT幻灯片40。只有一页。
Dim MySlideArray As Variant
Dim MyRangeArray As Variant
Dim x As Long
'List of PPT Slides to Paste to
MySlideArray = Array(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)
'List of Excel Ranges to Copy from
MyRangeArray = Array( _
Sheet7.Range("A1:K39"),Sheet8.Range("A1:K39"),Sheet9.Range("A1:K39"),Sheet10.Range("A1:K39"),Sheet11.Range("A1:K39"),_
Sheet12.Range("A1:K39"),Sheet13.Range("A1:K39"),Sheet14.Range("A1:K39"),Sheet15.Range("A1:K39"),Sheet16.Range("A1:K39"),_
Sheet17.Range("A1:K39"),Sheet18.Range("A1:K39"),Sheet19.Range("A1:K39"),Sheet20.Range("A1:K39"),Sheet21.Range("A1:K39"),_
Sheet22.Range("A1:K39"),Sheet23.Range("A1:K39"),Sheet24.Range("A1:K39"),Sheet25.Range("A1:K39"),Sheet26.Range("A1:K39"),_
Sheet27.Range("A1:K39"),Sheet28.Range("A1:K39"),Sheet29.Range("A1:K39"),Sheet30.Range("A1:K39"),Sheet31.Range("A1:K39"),_
Sheet32.Range("A1:K39"),Sheet33.Range("A1:K39"),Sheet34.Range("A1:K39"),Sheet35.Range("A1:K39"),Sheet36.Range("A1:K39"),_
Sheet37.Range("A1:K39"),Sheet38.Range("A1:K39"),Sheet39.Range("A1:K39"),Sheet40.Range("A1:K39"),Sheet41.Range("A1:K39"),_
Sheet42.Range("A1:K39"),Sheet43.Range("A1:K39"),Sheet44.Range("A1:K39"),Sheet45.Range("A1:K39"))
'Loop through Array data
For x = LBound(MySlideArray) To UBound(MySlideArray)
'Copy Excel Range
MyRangeArray(x).Copy
'Paste to PowerPoint and position
On Error Resume Next
Set shp = PowerPointApp.ActiveWindow.Selection.ShapeRange 'Excel 2013
On Error GoTo 0
Next x
有人可以帮助建议如何更正代码吗?这是我VBA旅程的开始,因此,非常感谢您的帮助和建议。谢谢一百万!
解决方法
这是一个简单的例子:
Sub PasteExcelRangeToPowerPoint()
Dim powerpoint As Object,presentation As Object,slide As Object,i as Integer
Set powerpoint = CreateObject(class:="PowerPoint.Application")
Set presentation = powerpoint.Presentations.Add
For i = 2 To 40
Set slide = presentation.Slides.Add(1,11)
Worksheets(i + 5).Range("A1:K39").Copy
slide.Shapes.PasteSpecial DataType:=1
Next i
powerpoint.Visible = True
powerpoint.Activate
End Sub
注释
- 该循环使用粘贴的excel数据创建39张幻灯片。请注意,由于工作表引用是连续的(7、8、9 ...),因此您可以使用
i + 5
进行捕获。您的范围参考不会更改。 -
DataType:=1
指定粘贴格式。要查看所有枚举,请参考此链接https://docs.microsoft.com/en-us/office/vba/api/powerpoint.pppastedatatype.
这就是为什么声明与设置数组中的错误
'Array init
ReDim MySlideArray(0 to 38)
'List of PPT Slides to Paste to
For i = 2 To 40
MySlideArray(i-2) = i
Next i
'Array init
ReDim MyRangeArray (0 to 38)
'List of Excel Ranges to Copy from
For J = 7 To 45
MyRangeArray(j-7) = ThisWorkbook.workSheets("Sheet" & j).Range("A1:K39"))
Next J
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。