yly522 发表于 2017-2-8 12:25:52

请教高手帮忙看看这句VBA代码出了什么问题!

正在开发个简单的VBA的PPT:
有一个表,有一列ID,一行一个,几千行,现在要把excel表上的ID放到PPT上,每页PPT放10个ID,简单的对齐排版,研究了一天,基本实现了想要的效果,但是遇到了一个问题一直想不通,所以发上来看有没有高手能帮忙指教一下:


以下为出错部分代码
代码“lastRow = xlSht.Range("A" & Rows.Count).End(xlUp).Row” 出错,但在excel里面运行是没问题的

zlw_0614 发表于 2017-2-8 13:28:33

lastRow = xlSht.Range("A" &xlSht.UsedRange.Rows.Count).End(xlUp).Row

复制代码
或者
lastRow = xlSht.Range("A65536").End(xlUp).Row

复制代码

ayi_2008 发表于 2017-2-8 14:18:56

谢谢楼上,以上代码经过测试,还是不行,不知有没有其他高手指教一下

南方小陈 发表于 2017-2-8 14:23:01

终于知道是哪的问题了,xlUp是一个Excel定义的常量,PowerPoint中没有这个常量定义,所以需要先 Const xlUp As Long = -4162

复制代码
定义出来才能正常运行。或者直接用数值应该也行。
下面的代码亲测有效

[*]Option Explicit
[*]Sub cc()
[*]
[*]
[*]'以下代码提醒使用者先清空原有幻灯片
[*] '====================================================================================
[*] If ActivePresentation.Slides.Count <> 1 Then
[*]   MsgBox (&quot;请先清空除封面以外的所有幻灯片!!!&quot;)
[*]   Exit Sub
[*] End If
[*]
[*] '以下代码导入excel数据源
[*] '====================================================================================
[*] Dim xlApp As Object
[*] Dim xlWBK As Object      '定义工作薄对象
[*] Dim xlSht As Object          '定义工作表对象
[*] Dim fPath As String          '定义筹号文件路径
[*] Dim lastRow As Integer    '定义最后一个筹号所在的行
[*] Dim arrID
[*] Const xlUp As Long = -4162
[*]
[*] '打开对话框选择文件并获取文件路径
[*] With Application.FileDialog(msoFileDialogFilePicker)
[*]   If .Show = False Then Exit Sub
[*]   fPath = .SelectedItems(1)
[*]   
[*] End With
[*]
[*] '打开指定工作薄并把工作表筹号信息存为数组
[*] Set xlApp = CreateObject(&quot;Excel.Application&quot;)
[*] Set xlWBK = xlApp.Workbooks.Open(fPath)
[*] Set xlSht = xlWBK.Sheets(&quot;筹号&quot;)
[*]
[*]
[*]
[*] 'arrID = xlSht.Range(&quot;A2:A17&quot;)       '用这句代码没问题,但换成下面的代码就出错了
[*] lastRow = xlSht.Cells(xlSht.Rows.Count, &quot;A&quot;).End(xlUp).Row
[*] arrID = xlSht.Range(&quot;A2:A&quot; & lastRow)
[*]
[*] xlWBK.Close False
[*]
[*] '释放对象
[*] Set xlApp = Nothing
[*] Set xlWBK = Nothing
[*] Set xlSht = Nothing
[*]
[*] End Sub

复制代码

古海笑 发表于 2017-2-8 14:37:53

你可以修改下:
    Set xlApp = CreateObject(&quot;Excel.Application&quot;)
    Set xlWBK = xlApp.Workbooks.Open(fPath)
    Set xlSht = xlWBK.Worksheets(&quot;Sheet1&quot;)
    xlSht.Activate
    For i = 2 To 4
    MsgBox xlSht.Cells(i, 1).Value
    Next
或者再增加个for j=
我也是excel不太熟啊。

today008 发表于 2017-2-8 14:54:39

非常感谢楼上的解答,只是还是有一个问题: 定义常数中的-4162 是哪来的?

mnmnmn 发表于 2017-2-8 15:15:34

当然是查帮助文档咯~

问题解决了还请给评个分哈~~

ynkmwht 发表于 2017-2-8 15:36:16

可能未引用,VBE——工具——引用Microsoft excel 12.0 object library

huangrb 发表于 2017-2-8 16:39:17

astRow = xlSht.Range(&quot;A&quot; & Xlsht.cells.Rows.Count).End(xlUp).Row
页: [1]
查看完整版本: 请教高手帮忙看看这句VBA代码出了什么问题!