显示需要的对象和未定义的子和函数 Powerpoint VBA
Showing Object Required and sub and function not defined Powerpoint VBA
您好,我正在尝试将 excel 文件读入 Powerpoint VBA。但我得到错误对象需要和子和函数未定义
有一行正在运行,但在执行组代码时显示错误
Public pName(), pMat(), pGrade(), pHDT(), pTemp(), planeName(), ledName() As Variant
Public pCount, planeCount, ledCount As Long
Sub test()
Dim xlApp As Object
Dim xlWorkBook As Object
Dim xlSheet As Object
Set xlApp = CreateObject("Excel.Application")
xlApp.Visible = True
Set xlWorkBook = xlApp.Workbooks.Open(ActivePresentation.Path & "\PPT_INPUT.xlsm", True, False)
xlWorkBook.sheets(1).Range("A8").Value = "Hello" ' **This Line working**
'------------------------------------------ **this section not working**
pCount = ActiveSheet.Cells(5, Columns.Count).End(xlToLeft).Column
ReDim pName(pCount - 1), pMat(pCount - 1), pGrade(pCount - 1), pHDT(pCount - 1), pTemp(pCount - 1)
For i = 1 To pCount
pName(i - 1) = Cells(5, i).Value
pMat(i - 1) = Cells(6, i).Value
pGrade(i - 1) = Cells(7, i).Value
pHDT(i - 1) = Cells(8, i).Value
pTemp(i - 1) = Cells(9, i).Value
Next
'------------------------------------------------
xlWorkBook.Close savechanges:=False
xlApp.Quit
Set xlApp = Nothing
Set xlWorkBook = Nothing
End Sub
ActiveSheet
和 Cells
是 Excel 特定的。当您 运行 VBA 在 Excel 中编写代码并编写 ActiveSheet
时,它将隐式转换为 Application.ActiveSheet
。类似地,在不指定任何工作表的情况下使用 Cells
,它将隐式转换为 Application.ActiveSheet.Cells
。应用程序对象的类型为 Excel.Application
在 Powerpoint 中,这不起作用。 Powerpoint-VBA 中有一个 Application
对象,但它包含 PowerPoint-specific 个属性和方法(类型为 Powerpoint.Application
)。但是,您已经在使用 Excel.Application
对象,您将其分配给变量 xlApp
.
我建议将您要使用的工作表分配给一个 Excel.Worksheet
变量(您已经声明了一个但没有使用它)。我还建议您使用 Early Binding,只需添加对 Microsoft Excel Library
的引用即可。它可以帮助您编写代码,因为 Intellisence 可以向您显示有效的方法和属性 - 如果您使用 Object
它无法帮助您。
Dim xlApp As Excel.Application
Set xlApp = CreateObject("Excel.Application")
xlApp.Visible = True
Dim xlWorkBook As Excel.Workbook
Set xlWorkBook = xlApp.Workbooks.Open(ActivePresentation.Path & "\PPT_INPUT.xlsm", True, False)
Dim xlSheet As Excel.Worksheet
Set xlSheet = xlWorkBook.sheets(1)
' Or, if you insist on ActiveSheet
' (but honestly, you shouldn't, always specify a sheet explicitly in Excel)
' Set xlSheet = xlApp.ActiveSheet
' Now, work with the variable. Note the `.` in front of `.Range` and `.Cells`
With xlSheet
.Range("A8").Value = "Hello"
pName(i - 1) = .Cells(5, i).Value
(...)
End With
额外说明:如果写Public pCount, planeCount, ledCount As Long
,只有ledCount
定义为Long
,所有其他变量都定义为Variant
。在 VBA 中,您需要明确指定每个变量的类型:
Public pCount As Long, planeCount As Long, ledCount As Long
更新 使用后期绑定,您只需更改变量声明即可。 优势:您不需要推荐信。 缺点:没有智能,编译只能在 运行 时捕获方法或 属性 等错误,而不是在编译时
Dim xlApp As Object
Set xlApp = CreateObject("Excel.Application")
xlApp.Visible = True
Dim xlWorkBook As Object
Set xlWorkBook = xlApp.Workbooks.Open(ActivePresentation.Path & "\PPT_INPUT.xlsm", True, False)
Dim xlSheet As Object
Set xlSheet = xlWorkBook.sheets(1)
With xlSheet
.Range("A8").Value = "Hello"
pName(i - 1) = .Cells(5, i).Value
(...)
End With
您好,我正在尝试将 excel 文件读入 Powerpoint VBA。但我得到错误对象需要和子和函数未定义
有一行正在运行,但在执行组代码时显示错误
Public pName(), pMat(), pGrade(), pHDT(), pTemp(), planeName(), ledName() As Variant
Public pCount, planeCount, ledCount As Long
Sub test()
Dim xlApp As Object
Dim xlWorkBook As Object
Dim xlSheet As Object
Set xlApp = CreateObject("Excel.Application")
xlApp.Visible = True
Set xlWorkBook = xlApp.Workbooks.Open(ActivePresentation.Path & "\PPT_INPUT.xlsm", True, False)
xlWorkBook.sheets(1).Range("A8").Value = "Hello" ' **This Line working**
'------------------------------------------ **this section not working**
pCount = ActiveSheet.Cells(5, Columns.Count).End(xlToLeft).Column
ReDim pName(pCount - 1), pMat(pCount - 1), pGrade(pCount - 1), pHDT(pCount - 1), pTemp(pCount - 1)
For i = 1 To pCount
pName(i - 1) = Cells(5, i).Value
pMat(i - 1) = Cells(6, i).Value
pGrade(i - 1) = Cells(7, i).Value
pHDT(i - 1) = Cells(8, i).Value
pTemp(i - 1) = Cells(9, i).Value
Next
'------------------------------------------------
xlWorkBook.Close savechanges:=False
xlApp.Quit
Set xlApp = Nothing
Set xlWorkBook = Nothing
End Sub
ActiveSheet
和 Cells
是 Excel 特定的。当您 运行 VBA 在 Excel 中编写代码并编写 ActiveSheet
时,它将隐式转换为 Application.ActiveSheet
。类似地,在不指定任何工作表的情况下使用 Cells
,它将隐式转换为 Application.ActiveSheet.Cells
。应用程序对象的类型为 Excel.Application
在 Powerpoint 中,这不起作用。 Powerpoint-VBA 中有一个 Application
对象,但它包含 PowerPoint-specific 个属性和方法(类型为 Powerpoint.Application
)。但是,您已经在使用 Excel.Application
对象,您将其分配给变量 xlApp
.
我建议将您要使用的工作表分配给一个 Excel.Worksheet
变量(您已经声明了一个但没有使用它)。我还建议您使用 Early Binding,只需添加对 Microsoft Excel Library
的引用即可。它可以帮助您编写代码,因为 Intellisence 可以向您显示有效的方法和属性 - 如果您使用 Object
它无法帮助您。
Dim xlApp As Excel.Application
Set xlApp = CreateObject("Excel.Application")
xlApp.Visible = True
Dim xlWorkBook As Excel.Workbook
Set xlWorkBook = xlApp.Workbooks.Open(ActivePresentation.Path & "\PPT_INPUT.xlsm", True, False)
Dim xlSheet As Excel.Worksheet
Set xlSheet = xlWorkBook.sheets(1)
' Or, if you insist on ActiveSheet
' (but honestly, you shouldn't, always specify a sheet explicitly in Excel)
' Set xlSheet = xlApp.ActiveSheet
' Now, work with the variable. Note the `.` in front of `.Range` and `.Cells`
With xlSheet
.Range("A8").Value = "Hello"
pName(i - 1) = .Cells(5, i).Value
(...)
End With
额外说明:如果写Public pCount, planeCount, ledCount As Long
,只有ledCount
定义为Long
,所有其他变量都定义为Variant
。在 VBA 中,您需要明确指定每个变量的类型:
Public pCount As Long, planeCount As Long, ledCount As Long
更新 使用后期绑定,您只需更改变量声明即可。 优势:您不需要推荐信。 缺点:没有智能,编译只能在 运行 时捕获方法或 属性 等错误,而不是在编译时
Dim xlApp As Object
Set xlApp = CreateObject("Excel.Application")
xlApp.Visible = True
Dim xlWorkBook As Object
Set xlWorkBook = xlApp.Workbooks.Open(ActivePresentation.Path & "\PPT_INPUT.xlsm", True, False)
Dim xlSheet As Object
Set xlSheet = xlWorkBook.sheets(1)
With xlSheet
.Range("A8").Value = "Hello"
pName(i - 1) = .Cells(5, i).Value
(...)
End With