Office 板


LINE

软体:Excel 版本:2013 各位版上的大大早安。我有一个观念性的问题想不通。 我刚写好一个Module,为了让Code好读,我进行了顺序的编排。 但是,重新编排後的执行结果却与想像中的不同。 想请大大指导一下,我的观念哪里出了问题。感恩。 这是一个游走在两个档案间的复制与贴上动作模组 我把"找该工作页最後一笔资料"这一段程式码放入"写入档案"下的With fileA後面。 该Module是存在於B档案 我尝试着把每一段是在A档案还是B档案工作的关系标示出来。 但是还是不知道为什麽移了位置後,执行结果跟预期的不同。 以这段Code的结果应该是从最後一笔(row)往下写。 但是一旦移了,他就一直写第18 row. 我有尝试用监看式去看index_row确实是17。 但我就不明白,为什麽index_row会是17,而且一直在17。 移位置之前的执行结果是正确的。 因为找最後一笔资料是在A档案中寻找。 而以我的设定方式With fileA之後的操作不是应该在A档案中了吗? 以下是该Module的Code。 '=======================找寻绝对路径与读档============ B档案 dpath = ThisWorkbook.Path MsgBox ThisWorkbook.Path Fname = Range("B1").Value Workbooks.Open Filename:=dpath & "\" & Fname & ".xlsx" Set fileA = Workbooks(Fname & ".xlsx") '===================================================== '=======================找该工作页最後一笔资料======== A档案 Application.Goto reference:=ActiveSheet.Range("A1") ActiveSheet.Range("A1").End(xlDown).Select index_row = Selection.Row index_column = Selection.Column '===================================================== '=======================复制资料====================== B档案 ThisWorkbook.Activate Head(1) = Range("B2").Value Head(2) = Range("B1").Value Head(3) = Range("B3").Value Head(4) = Range("H2").Value Head(5) = Range("H1").Value Head(6) = Range("L1").Value For m = 0 To 12 For n = 0 To 11 DataArray(m, n) = Cells(5 + m, 2 + n).Value Next n Next m 'dim DataArray as variant 'DataArray = activesheet.range("B5:M17") '===================================================== '=======================写入档案====================== A档案 With fileA array_counter = index_row + 1 For i = 1 To 6 .ActiveSheet.Cells(array_counter, i) = Head(i) Next i For m = 0 To 12 For n = 0 To 11 .ActiveSheet.Cells(array_counter, i) = DataArray(m, n) i = i + 1 Next n Next m Application.DisplayAlerts = False '关闭提醒 .Close True '关闭档案 End With '===================================================== End Sub --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 123.195.98.141
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Office/M.1536463487.A.3D7.html
1F:→ soyoso: 会一直写在18的话,应是变数array_counter没有累加 09/09 11:34
2F:→ soyoso: 只有在array_counter只有在回圈外做了一次的index_row+1 09/09 11:35
3F:→ soyoso: index_row为17+1=18 09/09 11:36
4F:→ soyoso: .activesheet.cells(array_counter,i)方面改为 09/09 11:37
5F:→ soyoso: .activesheet.cells(array_counter+m,n)=....的方式试试 09/09 11:38
感谢soyoso大大的回应,arraycounter的用处其实是在找下一个资料的其始点 下图是B档案的资料内容 https://imgur.com/b6GL4qP 其中灰色所选取的部分就是巢状回圈所读取的资料,是一个2维阵列 下图是A档案的资料内容 https://imgur.com/8iyeWnO arraycounter用於找最後一笔资料的所在位置+1後变成资料写入的起始点,而资料从2维 阵列变成1维阵列。所以理当,arraycounter不需要参与回圈叠加才是。 我核心的问题是为什麽找最後一列的Code放在原来的位置跟With A会有不一样的结果。 不管档案A的资料量有多少,不管中间是否有空白他都会从第18行开始写。 https://imgur.com/4ph5m4q 感谢您一直耐心地回应问题。 ※ 编辑: yimean (123.195.98.141), 09/09/2018 12:03:19
6F:→ yimean: Soyoso大大我有更新资料了喔。 09/09 12:04
7F:→ soyoso: 那a档案从储存格a1,按下ctrl+↓(向下键)是10还是17 09/09 12:43
8F:→ soyoso: 测试从b栏执行原文巨集,开启a档,可取得储存格a1往下的连 09/09 12:58
9F:→ soyoso: 续储存格的最後一个,如有公式的话也会取到 09/09 12:58
10F:→ soyoso: 从原po提供的连结来看,看不出是否有公式已在a栏内 09/09 12:59
11F:→ yimean: 按下ctrl+↓所得到的是10,没有公式,下方连结是录影。 09/09 14:33
12F:→ yimean: https://imgur.com/LRi6DI4 09/09 14:33
13F:→ yimean: 感谢您 09/09 14:33
※ 编辑: yimean (123.195.98.141), 09/09/2018 14:36:13
14F:→ soyoso: 那将index_row = fileA.ActiveSheet.Range("A1"). 09/09 14:36
15F:→ soyoso: End(xlDown).Row 来抓看是否是10 09/09 14:36
※ 编辑: yimean (123.195.98.141), 09/09/2018 14:44:28
16F:→ soyoso: 回文打的是end().row不是end().select 09/09 14:44
17F:→ soyoso: 如果写在这里的话,上面thisworkbook.activate就回到b档 09/09 14:46
18F:→ yimean: https://imgur.com/cbejPA0 09/09 14:46
19F:→ soyoso: with fileA...end with内不一定是作用活页簿就是在a档 09/09 14:47
20F:→ yimean: https://imgur.com/wMV95eH 09/09 14:47
21F:→ yimean: 喔喔喔 我改一下,Sorry 09/09 14:48
22F:→ soyoso: 错误是,不是用range.select要用range.row来回传列号给变 09/09 14:48
23F:→ soyoso: 数index_row 09/09 14:48
24F:→ soyoso: 所以有可能回传17是因为作用活页簿於b档内 09/09 14:49
25F:→ yimean: https://imgur.com/gvEWvag 09/09 14:50
26F:→ yimean: 正确的写进去第11列了 09/09 14:50
27F:→ soyoso: 如果已经在with fileA...end with的话,则以 .activesheet 09/09 14:50
28F:→ soyoso: .range("a1").end(xldown).row,index_column亦同 09/09 14:51
29F:→ yimean: 太神奇了,所以,请教一下With所有作用的不是在指定范围? 09/09 14:51
30F:→ soyoso: 或是将作用活页簿调整到a档,於with fileA下方打上 09/09 14:52
31F:→ yimean: 这个观念我不是很懂,如果是这样With的功能不就弱化了? 09/09 14:52
32F:→ soyoso: .activate 这时作用活页簿为a档 09/09 14:52
33F:→ soyoso: with...end with是用来简化语法用 09/09 14:54
34F:→ soyoso: 当作用活页簿为a档时,就可以原本activesheet.range(..). 09/09 14:56
35F:→ yimean: 学到了一个技巧,感谢您。确实可以这样使用。 09/09 14:56
36F:→ soyoso: end(xldown).select,index_row=selection.row来取得列号 09/09 14:57
37F:→ yimean: 所以如果後面要切回B档时只要加上thisworkbook.activate 09/09 14:58
38F:→ soyoso: 因此'=====写入档案====的这个部分也可不用with..end with 09/09 14:58
39F:→ yimean: 就可以了,对吗? 09/09 14:58
40F:→ soyoso: 就只要是fileA.activate那之後就都在a档案内操作 09/09 14:59
41F:→ soyoso: 也无需 .activesheet前面的.(点号)了 09/09 14:59
42F:→ soyoso: 如原po所述,要回b档时加上该activate来切回 09/09 15:00
43F:→ yimean: 感恩指导,谢谢。 09/09 15:04







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:WOW站内搜寻

TOP