Excel精英培训网

 找回密码
 注册

QQ登录

只需一步,快速开始

工作中常用的Excel函数公式,全印在一张超大鼠标垫上
查看: 316|回复: 8

[已解决] 请大神帮我看看,为什么引用不了?主要是跨工作薄引用问题

[复制链接]
发表于 2019-11-27 11:24 | 显示全部楼层 |阅读模式
Option Explicit

Sub cdsr()
    Dim Wb As Workbook
    Dim sht As Worksheet
    Dim d As Object
    Dim arr, i% 'arr为Variant类型,i为Integer类型
    Set d = CreateObject("scripting.dictionary") '设定d=创建对象("scripting.dictionary")
    'scripting.dictionary对象,用于存储数据关键字和条目对。
    Application.ScreenUpdating = False
    Set Wb = Workbooks.Open(Filename:=ThisWorkbook.Path & "\附表3:前端点位材料明细清单.xlsx")
    For Each sht In Sheets
        arr = sht.[a1].CurrentRegion
        For i = 2 To UBound(arr)
            d(arr(i, 2)) = arr(i, 6)
        Next
        Erase arr
    Next
    With Workbooks("test.xls").Sheets("张家边派出所")
    For i = 1 To .Cells(Rows.Count, 1).End(xlUp).Row
        .Cells(i, 4) = d(.Cells(i, 1).Value)
        Next
    End With
    Wb.Close False4
    Set Wb = Nothing
    Set d = Nothing
    Application.ScreenUpdating = True
End Sub
附件.rar (53.79 KB, 下载次数: 10)
发表于 2019-11-27 11:46 | 显示全部楼层
大方向没问题,有两个小错误,看你代码:
With Workbooks("test.xls").Sheets("张家边派出所")
    For i = 1 To .Cells(Rows.Count, 1).End(xlUp).Row
        .Cells(i, 4) = d(.Cells(i, 1).Value)
        Next
    End With
    Wb.Close False4

1、Wb.Close False4 单词拼错了;
2、For i = 1 To .Cells(Rows.Count, 1).End(xlUp).Row 写法上有问题:
     改成:
       For i = 1 To .range("a10000").End(xlUp).Row 就可以了

     你这么写复杂了,如果要这么写,需要加个句点,写成:
       For i = 1 To .Cells(.Rows.Count, 1).End(xlUp).Row


回复

使用道具 举报

 楼主| 发表于 2019-11-27 11:58 | 显示全部楼层
hfwufanhf2006 发表于 2019-11-27 11:46
大方向没问题,有两个小错误,看你代码:
With Workbooks("test.xls").Sheets("张家边派出所")
    For  ...

谢谢大神的解答,我再试试。
回复

使用道具 举报

 楼主| 发表于 2019-11-27 13:30 | 显示全部楼层
hfwufanhf2006 发表于 2019-11-27 11:46
大方向没问题,有两个小错误,看你代码:
With Workbooks("test.xls").Sheets("张家边派出所")
    For  ...

改了之后,程序是能运行了,但是实现不了查找的功能。
回复

使用道具 举报

发表于 2019-11-27 15:29 | 显示全部楼层
水吉空 发表于 2019-11-27 13:30
改了之后,程序是能运行了,但是实现不了查找的功能。

那我不知道你是要干什么?我只是帮你排除代码错误。
回复

使用道具 举报

 楼主| 发表于 2019-12-1 09:21 | 显示全部楼层
hfwufanhf2006 发表于 2019-11-27 15:29
那我不知道你是要干什么?我只是帮你排除代码错误。

从工作薄1引用数据对应项目填到工作薄2里面。
回复

使用道具 举报

发表于 2019-12-2 11:09 | 显示全部楼层
Sub cdsr()
    Dim Wb As Workbook
    Dim sht As Worksheet
    Dim d As Object
    Dim arr, i


    Application.ScreenUpdating = False
    Set d = CreateObject("scripting.dictionary")


    '1)
    Set Wb = Workbooks.Open(Filename:=ThisWorkbook.Path & "\附表3:前端点位材料明细清单.xlsx")
    For Each sht In Sheets
        arr = sht.[a1].CurrentRegion
        For i = 2 To UBound(arr)
            d(arr(i, 2)) = arr(i, 6) '2表示设备名称 , 6表示合计
        Next
    Next
    Wb.Close False


    '2)
    ThisWorkbook.Activate
    Sheets("张家边派出所").Activate
    For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row
        Cells(i, "E") = d(Cells(i, "B").Value)   'B表示设备名称 , E表示数量
    Next


End Sub



楼主自己再改吧

回复

使用道具 举报

 楼主| 发表于 2019-12-3 11:59 | 显示全部楼层
爱疯 发表于 2019-12-2 11:09
Sub cdsr()
    Dim Wb As Workbook
    Dim sht As Worksheet

版主出手,就知有没有。谢谢版主
回复

使用道具 举报

发表于 2019-12-3 14:37 | 显示全部楼层
如果说明的更清晰明了,可能会更快被解决的
回复

使用道具 举报

*滑块验证:
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2020-8-4 18:33 , Processed in 0.078000 second(s), 5 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表