0

バックグラウンドでExcelデータベースを持つパワーポイントで作業しようとしています。今のところ、PPT VBA で引数としてシートを渡すのに問題があります。関数 lastrow および lastcoulmn は、「ユーザー定義型が定義されていません」というエラーを返します。助けていただければ幸いです。ありがとう。

Dim oXLApp As Object
Dim oWb As Object
Dim Deps As Excel.Range
Dim Dep, Shift, Name, EmpNo, Sup As String
Dim Sups As Excel.Range
Dim Shifts As Excel.Range

Public Sub getexceldata()
Dim str As String
Set oXLApp = CreateObject("Excel.Application")
Set oWb = oXLApp.Workbooks.Open(ActivePresentation.Path & "\" & "Property Wide.xlsm")

'Shifts
Set Shifts = oWb.Sheets(4).Range("A1:A" & lastRow(oWb.Sheets(4), "a"))

'departments
Set Deps = oWb.Sheets(3).Range("A1:" & Chr(lastColumn(oWb.Sheets(3), "1") + 64) & "1")

'supervisors

End Sub


Public Function lastRow(ByVal SheetA As Excel.Application.Sheet, Optional Columnno As Char = "/")     As Long
If (Columnno = "/") Then
Set lastRow = SheetA.UsedRange.Row - 1 + SheetA.UsedRange.Rows.Count
Else
Set lastRow = SheetA.Range(Columno & Rows.Count).End(xlUp).Row
End If
End Function

Public Function lastColumn(ByVal SheetA As Excel.Application.Sheet, Optional rowno As Char = "/")     As Integer
If (rowno = "/") Then
Set lastColumn = SheetA.UsedRange.Column - 1 + SheetA.UsedRange.Columns.Count
Else
Set lastColumn = SheetA.Cells(rowno, Columns.Count).End(xlToLeft).Column
End If
End Function
4

1 に答える 1

0

最初の問題は、CHAR は有効な変数タイプではないため、これを文字列に変更することをお勧めします。

次に、Microsoft Office Excel 14.0 Object Library をコード参照に含めてください。

これにより、コードをわずかに調整して、すべてが機能するはずです。

Dim oXLApp As Object
Dim oWb As Object
Dim Deps As Excel.Range
Dim Dep, Shift, Name, EmpNo, Sup As String
Dim Sups As Excel.Range
Dim Shifts As Excel.Range

Public Sub getexceldata()
Dim str As String
Set oXLApp = CreateObject("Excel.Application")
Set oWb = oXLApp.Workbooks.Open(ActivePresentation.Path & "\" & "Property Wide.xlsm")

'Shifts
Set Shifts = oWb.Sheets(4).Range("A1:A" & lastRow(oWb.Sheets(4), "a"))

'departments
Set Deps = oWb.Sheets(3).Range("A1:" & Chr(lastColumn(oWb.Sheets(3), "1") + 64) & "1")

'supervisors

End Sub


Public Function lastRow(ByVal SheetA As Worksheet, Optional Columnno As String = "/")     As Long
If (Columnno = "/") Then
Set lastRow = SheetA.UsedRange.Row - 1 + SheetA.UsedRange.Rows.Count
Else
Set lastRow = SheetA.Range(Columno & Rows.Count).End(xlUp).Row
End If
End Function

Public Function lastColumn(ByVal SheetA As Worksheet, Optional rowno As String = "/")     As Integer
If (rowno = "/") Then
Set lastColumn = SheetA.UsedRange.Column - 1 + SheetA.UsedRange.Columns.Count
Else
Set lastColumn = SheetA.Cells(rowno, Columns.Count).End(xlToLeft).Column
End If
End Function

これで、必要なものが揃っているはずです。

于 2014-12-15T21:43:16.853 に答える