Excel精英培训网

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

请教各位老师,有句代码老卡上

[复制链接]
发表于 2020-11-2 11:28 | 显示全部楼层 |阅读模式
本帖最后由 ck03w11 于 2020-11-2 11:31 编辑

请教各位老师,这句代码老卡上 Cells(n, 1).Resize(1, UBound(brr, 2)) = Application.Index(brr, i, 0)是什么原因!Sub lqxs()
Dim d, arr, i&, brr, n&
Set d = CreateObject("scripting.Dictionary")
Sheet3.Activate
[a2:CR200].ClearContents
n = 1
arr = Sheet2.[a1:CR200]
For i = 2 To UBound(arr)
d(arr(i, 18)) = " "
Next
brr = Sheet1.[a1:CR200]
For i = 2 To UBound(brr)
If Not d.exists(brr(i, 18)) Then
n = n + 1
  Cells(n, 1).Resize(1, UBound(brr, 2)) = Application.Index(brr, i, 0)
End If
Next
End Sub请哪位老师能不能帮我把红色的换成意思和效果一样的。谢谢!!


发表于 2020-11-3 09:58 | 显示全部楼层
如果你是想用工作表函数,你就拼错了,在index前要加上 worksheetfunction
回复

使用道具 举报

 楼主| 发表于 2020-11-3 10:25 | 显示全部楼层
本帖最后由 ck03w11 于 2020-11-3 10:26 编辑
hfwufanhf2006 发表于 2020-11-3 09:58
如果你是想用工作表函数,你就拼错了,在index前要加上 worksheetfunction

老师好!这句在好几张表中出错,有几张在用时相对好改我调试改了,但这张表中不知什么原因,我在调试表中用了很多乱打信息都能通过,但我从正表中复制就不行,麻烦老师帮我想想有没有可代替的语句,谢谢!我先传个图这种情况到底是什么引起的C:\Documents
回复

使用道具 举报

 楼主| 发表于 2020-11-3 10:30 | 显示全部楼层
不好意思上传图不会,用附件
12.jpg
回复

使用道具 举报

发表于 2020-11-3 10:51 | 显示全部楼层
ck03w11 发表于 2020-11-3 10:25
老师好!这句在好几张表中出错,有几张在用时相对好改我调试改了,但这张表中不知什么原因,我在调试表中 ...

你要上传文件,有文件就能做完整的测试,能确保代码正确,没文件只能猜测着写,可能会有意外发生。
你现在的代码,我大概能看出你是要把sheet1与sheet2的数据作比较,如果sheet1在sheet2中不存在,就在sheet3填写不存在的数据。
下面是猜测写的代码:

对于数组填充单元格,我认为有两者写法:
1、用循环,大致就是:
    for m=1 to 96   '我看到你数组定义到了cr列,我数了下大约是96列,如不对你就改下
         cells(n,m)=brr(i,m)    'n和i都是你源代码的参数,n是sheet3的行,i是brr的行
    next m
2、用另外一个数组:
   dim crr  '这个定义要放在代码前面
   crr=sheet2.range("a" & i & ":cr" & i)   '把不同的那一行单独读出来写入crr
   cells(n,1).resize(1,ubound(crr,2))=crr

评分

参与人数 1学分 +3 收起 理由
ck03w11 + 3 学习

查看全部评分

回复

使用道具 举报

发表于 2020-11-3 10:58 | 显示全部楼层
用.copy也能达到目的,但需要先激活sheet2:
sheet2.activate
sheet2.sheet2.range("a" & i & ":cr" & i).copy sheet3.cells(n,1)
sheet3.activate
估计能行,没实测。
还有就是,你要明确知道你所在的当前表是哪一个,这对于数据读写非常重要。.copy只能对当前表进行操作,所以需要先激活,但复制完成后还是需要再回到sheet3,否则对其他代码可能会有干扰;
回复

使用道具 举报

 楼主| 发表于 2020-11-3 12:09 | 显示全部楼层
hfwufanhf2006 发表于 2020-11-3 10:51
你要上传文件,有文件就能做完整的测试,能确保代码正确,没文件只能猜测着写,可能会有意外发生。
你现 ...

是的完全正确是这意思,我想问问那老师你给的代我应写在啊儿?
回复

使用道具 举报

 楼主| 发表于 2020-11-3 12:31 | 显示全部楼层
本帖最后由 ck03w11 于 2020-11-3 12:44 编辑
hfwufanhf2006 发表于 2020-11-3 10:51
你要上传文件,有文件就能做完整的测试,能确保代码正确,没文件只能猜测着写,可能会有意外发生。
你现 ...

老师好!我刚刚在我调试表中试了你给我的代码第二种可以,现在我拿到正表中去试试。谢谢!强强
顺便问一句为什么我那种会出问题?
回复

使用道具 举报

发表于 2020-11-3 13:14 | 显示全部楼层
ck03w11 发表于 2020-11-3 12:31
老师好!我刚刚在我调试表中试了你给我的代码第二种可以,现在我拿到正表中去试试。谢谢!强强
...

数组填充单元格在语法上只能是整体填充,不能截取其中的一部分,看下面语法:  cells(n,1).resize()=arr

你无法对数组arr做截取。能够限制填充范围的只能是.resize,但它也只能限制填充的区域大小,却不能挑选数组的内容,即使填充的区域比数组小,也是从数组的开头部分算起,数组后半部分超越填充区域的内容永远无法填充上,所以最好是定义一个与填充区域相同的数组,这样就完美了;

评分

参与人数 1学分 +2 收起 理由
ck03w11 + 2 学习

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2020-11-3 13:43 | 显示全部楼层
hfwufanhf2006 发表于 2020-11-3 10:58
用.copy也能达到目的,但需要先激活sheet2:
sheet2.activate
sheet2.sheet2.range("a" & i & ":cr" & i). ...

谢谢老师!
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 01:54 , Processed in 0.318741 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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