Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 7152|回复: 11

[已解决]vba 运行时有时提示:“运行时错误‘13’,类型不匹配”,有时没有,请教?

[复制链接]
发表于 2016-1-14 12:27 | 显示全部楼层 |阅读模式
宏是这样的:

Sub 名称()
    Dim arr, brr(), i
    arr = Range("A5:A" & [A666].End(3).Row)
    For i = 1 To UBound(arr)
        Set wb = Workbooks.Open(Filename:=ActiveWorkbook.Path & "\" & arr(i, 1) & ".xlsm", ReadOnly:=True)
        Set wb = GetObject(ActiveWorkbook.Path & "\" & arr(i, 1) & ".xlsm")
        ReDim Preserve brr(1 To UBound(arr), 1 To 1)
        brr(i, 1) = wb.Sheets("Deckblatt Blatt 1").Range("B5")
        wb.Close False
    Next
    Range("B5").Resize(UBound(brr), 1) = brr
End Sub
---------------------------------------------------------------------------------------------
Sub 批量()
    Dim arr, brr(), i
    arr = Range("A5:A" & [A666].End(3).Row)
    For i = 1 To UBound(arr)
        Set wb = Workbooks.Open(Filename:=ActiveWorkbook.Path & "\" & arr(i, 1) & ".xlsm", ReadOnly:=True)
        Set wb = GetObject(ActiveWorkbook.Path & "\" & arr(i, 1) & ".xlsm")
        ReDim Preserve brr(1 To UBound(arr), 1 To 1)
        brr(i, 1) = wb.Sheets("Deckblatt Blatt 1").Range("D10")
        wb.Close False
    Next
    Range("C5").Resize(UBound(brr), 1) = brr
End Sub


一个工作薄里像上面的宏有十个甚至更多,附图淡蓝色部分每一列是一个宏;我是把它们连起来运行。

有两个问题:
1、一个工作薄里引用几十个数据(附图淡蓝色部分),得好几分钟,跟不要说更多的数据了,太慢了,请高人指点,有无高招?

2、A列A5往下的数据是引用数据的源头(即每个单元格就是被引用单元格的文件名),我是采用粘贴的办法,上午还行,下午就不行了,也不知道怎么回事;但如果我用格式刷将“上午粘贴的单元格内容”的属性刷到钢粘贴的单元格后,再计算就没问题。
    我又用“常规”、“数值”、“文本”等来设置粘贴的单元格内容的属性,也不行。请高手指点。谢谢。
最佳答案
2016-1-15 13:44
本帖最后由 这儿有肥猫 于 2016-1-15 16:54 编辑
arter_2006 发表于 2016-1-15 11:47
请见“vba问题.rar”里的“成本统计——OK,但“只读”弹窗弹出时要点确认.xlsm”,非常感谢。
  1. Sub a()
  2.    Dim arr, brr, i&, s, wb As Workbook   
  3.     s = Cells(Rows.Count, 1).End(3).Row
  4.     ReDim brr(1 To s - 4, 1 To 1)
  5.     For i = 5 To s
  6.          Set wb = Workbooks.Open(Filename:=ThisWorkbook.Path & "" & Cells(i, 1) & ".xlsm", ReadOnly:=True)
  7.                brr(i - 4, 1) = ActiveWorkbook.Sheets("Deckblatt Blatt 1").Range("D10")
  8.               wb.Close False
  9.     Next
  10.     Range("C5").Resize(UBound(brr), 1) = brr
  11. End Sub
复制代码
问题.PNG
计算示例1.PNG

vba 运行时有时提示:“运行时错误‘13’,类型不匹配”,有时没有,请教?.rar

82.68 KB, 下载次数: 16

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
 楼主| 发表于 2016-1-14 12:28 | 显示全部楼层
补充:压缩文件里的两个宏完全一模一样,但一个可以、一个不可以。
回复

使用道具 举报

发表于 2016-1-14 14:38 | 显示全部楼层
  1. Sub Ãû³Æ()
  2.     Dim arr, brr, i&, s
  3.     s = Cells(Rows.Count, 1).End(3).Row
  4.     ReDim brr(1 To s - 4, 1 To 1)
  5.     For i = 5 To s
  6.         With GetObject(ThisWorkbook.Path & "" & Cells(i, 1) & ".xlsm")
  7.              brr(i - 4, 1) = .Sheets("Deckblatt Blatt 1").Range("B5")
  8.             .Close False
  9.         End With
  10.     Next
  11.     Range("B5").Resize(UBound(brr), 1) = brr
  12. End Sub
复制代码

评分

参与人数 1 +1 收起 理由
arter_2006 + 1 很给力

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2016-1-14 20:53 | 显示全部楼层
非常感谢您的指教,问题解决了,但又有一个新问题,
比如附件中  
       “成本统计——OK,但“只读”弹窗弹出时要点确认.xlsm”
  要弹出很多弹窗,为解决此问题,我加了一句,如
     ”成本统计——加了一句以避免“只读”弹窗弹出时要点确认,但不能用.xlsm“;

宏如下:
Sub 名称()
    Dim arr, brr, i&, s
    s = Cells(Rows.Count, 1).End(3).Row
    ReDim brr(1 To s - 4, 1 To 1)
    For i = 5 To s
        Set wb = Workbooks.Open(Filename:=ActiveWorkbook.Path & "\" & arr(i, 1) & ".xlsm", ReadOnly:=True)
        With GetObject(ThisWorkbook.Path & "\" & Cells(i, 1) & ".xlsm")
             brr(i - 4, 1) = .Sheets("Deckblatt Blatt 1").Range("B5")
            .Close False
        End With
    Next
    Range("B5").Resize(UBound(brr), 1) = brr
End Sub


请指教,非常感谢。



vba问题.rar

194.81 KB, 下载次数: 13

回复

使用道具 举报

发表于 2016-1-15 09:05 | 显示全部楼层
Set wb = Workbooks.Open(Filename:=ActiveWorkbook.Path & "\" & arr(i, 1) & ".xlsm", ReadOnly:=True)
这句没有必要加
回复

使用道具 举报

 楼主| 发表于 2016-1-15 11:45 | 显示全部楼层
但是不加的话,如附件“vba问题.rar”里  “成本统计——OK,但“只读”弹窗弹出时要点确认.xlsm””所计算的情况,老是跳出弹窗啊?
回复

使用道具 举报

 楼主| 发表于 2016-1-15 11:47 | 显示全部楼层
这儿有肥猫 发表于 2016-1-15 09:05
Set wb = Workbooks.Open(Filename:=ActiveWorkbook.Path & "\" & arr(i, 1) & ".xlsm", ReadOnly:=True)
...

请见“vba问题.rar”里的“成本统计——OK,但“只读”弹窗弹出时要点确认.xlsm”,非常感谢。
回复

使用道具 举报

发表于 2016-1-15 13:44 | 显示全部楼层    本楼为最佳答案   
本帖最后由 这儿有肥猫 于 2016-1-15 16:54 编辑
arter_2006 发表于 2016-1-15 11:47
请见“vba问题.rar”里的“成本统计——OK,但“只读”弹窗弹出时要点确认.xlsm”,非常感谢。
  1. Sub a()
  2.    Dim arr, brr, i&, s, wb As Workbook   
  3.     s = Cells(Rows.Count, 1).End(3).Row
  4.     ReDim brr(1 To s - 4, 1 To 1)
  5.     For i = 5 To s
  6.          Set wb = Workbooks.Open(Filename:=ThisWorkbook.Path & "" & Cells(i, 1) & ".xlsm", ReadOnly:=True)
  7.                brr(i - 4, 1) = ActiveWorkbook.Sheets("Deckblatt Blatt 1").Range("D10")
  8.               wb.Close False
  9.     Next
  10.     Range("C5").Resize(UBound(brr), 1) = brr
  11. End Sub
复制代码

评分

参与人数 1 +1 收起 理由
arter_2006 + 1 很给力

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2016-1-15 20:41 | 显示全部楼层
这儿有肥猫 发表于 2016-1-15 13:44

非常感谢您 的帮助,问题得到了解决。可惜的是我想多加些分,但加不了,只能加1分,很遗憾。

另外,我想请教下,您可以看出来,A列单元格中对应的表,有13个数据要被引用,那么在引用的过程中,这个表要被打开13次;
如果有100个表,所有的表要被打开1300次。非常耗时,不知有无好的办法。

见笑我的贪心了,对目前我已经很满意了,没有更好的办法也没关系。

再次感谢您的指点。

点评

因为你加了密码,所以只能用open避免只读提示,相对来讲,getobject的效率要高些,另外如果单张表多个数据被引用,可以考虑读入数组,最后一次性导入到目标表  发表于 2016-1-16 12:30
回复

使用道具 举报

 楼主| 发表于 2016-1-17 14:06 | 显示全部楼层
非常感谢。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-25 03:17 , Processed in 0.711692 second(s), 12 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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