新手小白求助
vba吧
全部回复
仅看楼主
level 1
yy929277470 楼主
学习vba一个星期了,写了一串代码,用来复制采购入库单里的数据保存到采购明细表里,采购明细表是超级表,复制过去的数据超级表不能识别,超级表不自动扩展,选定A1单元格按ctrl+↓键只能定位到原来已有的数据,超级表没扩展的地方就像没有数据似的,求各位大神给看看是哪里出了问题
2024年03月04日 23点03分 1
level 2
先说你代码可能出现问题的地方,可能是.pastespecial xlpastevalues这里错了,把括号去掉看看。
另外我点评和指导一下,就不给你详细写你的具体要求了
1、多个SHEET处理的话,最好SET成独立的对象,这样不容易出错,而且除非你是使用select这个方法,否则都不需要先用SELECT或者ACTIVE来切换工作表后再处理数据,例如
DIM WsA as worksheet, WsB as worksheet
with Thisworkbook
set WsA = .sheets("采购录入")
set WsB = .sheets("采购明细表")
end with
2、超级表非常好用,但不是像你这样用,要把它SET成ListObject对象,然后需要学会怎么写入数据,例如
dim ListObj as Listobject
wsa.range("C4:N4").copy
set listobj = wsa.listobjects("超级表名字")
‘超级表在哪行哪列根本不需要管,只需要你定好了表的字段名字就可以直接引用,假设超级表第一个字段叫字段1
listobj.ListColumns("字段1").range.rows(2).pastespecial xlpastevalues
'Listobject的表后如果没写入过数据的话,DataBodyRange是nothing的状态,所以需要用ListColumns("字段1").range.rows(2)才能写入数据(这里面的ROWS数字不管你这个超级表是在第几行开始,只要是字段名行的下一行都是2,如此类推),如果是已经写入过数据的话,则可以使用DataBodyRange.rows(1)来写入(如果是要在DataBodyRange范围的外的下一行写入数据,则可以先用.ListColumns("BUKRS").DataBodyRange.Rows.Count取得最后的数据行数,然后用.ListColumns("BUKRS").DataBodyRange.Rows(N+1)的方法写入
虽然listobject写起数据来可以完全无视表所在的行列位置,但写法会比较复杂,所以最好学会运用好with 来减少代码量,也可以使用ListColumn来定义需要高频使用的字段。
2024年03月05日 01点03分 2
才研究这个一个星期,看不懂这些代码[狂汗]
2024年03月05日 04点03分
在下边了
2024年03月05日 08点03分
level 7
下面的语句可以扩展超级表的范围:
ActiveSheet.ListObjects("表1").Resize ActiveSheet.UsedRange
注意:
一是看你自己的超级表名称,不一定是“表1”;
二是如果不是全表为超级表,需要使用Range("a1").CurrentRegion等实现。
2024年03月05日 01点03分 3
不太明白为什么要用RESIZE,如果是扩列,那用LISTCOLUMNS.ADD就可以了,如果是扩行,那直接在结尾贴数据就可以了,表会自动扩展
2024年03月05日 02点03分
不是简单的扩展超级表,是在表1里复制到表2(表2是超级表)的数据粘贴过去了,但是不识别,金额那一列里求和是0,超级表的行列颜色也没变化,但是数据是存在的,数据透视表里也没有这些新添加的数据
2024年03月05日 05点03分
@yy929277470 你方便把做好的表发到网盘上共享来看一下不
2024年03月05日 06点03分
level 1
中间出现空行了吧
2024年03月05日 05点03分 4
level 1
yy929277470 楼主
链接:网页链接
提取码:o9bd
2024年03月05日 08点03分 5
我看了一下,没明白你说的哪里有问题,你加我说一下吧
2024年03月06日 02点03分
2024年03月06日 02点03分
2024年03月06日 02点03分
@ISD_狮子座 就是一键录入完成后,采购明细表里的添加的数据,它和我以前的数据是分开的,新添加的数据用ctrl+A选择,它不会把以前的数据选上,新复制过去的和以前的数据就像是两个表格
2024年03月06日 04点03分
1