|
本帖最后由 hehex 于 2012-11-30 19:47 编辑
月满西楼雪 发表于 2012-11-30 19:10
我也是刚在学习,慢慢一步一步来的
首先sub ,function 之类的代码应该放在模块里,而不应该放在工作表的代码区,工作表代码区应该放工作表事件或者工作表控件事件响应的代码。
你应该插入一个模块然后把sub 那部分剪切到模块里。
其次,初学的时候一定要养成定义变量的习惯,可以选择强制声明变量,这样不容易出错,而且用变量的时候脑子会很清楚。
以上2点貌似和写代码没有直接关系,但是这种好习惯是很重要的。
看你的代码(红色是给你修改的):
Private Sub cmdbaocun_Click() '单击“保存”按钮时运行程序 dim nrow as Long '声明变量为长整数型
'判断在对话框中按下哪个按钮
If MsgBox("确定保存此凭证录吗?", vbQuestion + vbYesNo, "询问") = vbYes Then
'取得第一条空行行号
' 因为你的凭证 录入表不是连续区域用这种Currentregion 的方法去找最终行不准确
nrow = Worksheets("凭证录入").Range("a65536").End(xlup).row + 1 ' 这种方法书上有自己去查
Call findi(nrow) '运行edit过程,nrow 是你在本过程内定义的变量,离开本过程就被释放了,所以必须作为参数传递到sub 子过程里
End If
End Sub
'同理在sub 过程内需要定义你传进来的参数
Sub findi(nrow As Long) '子过程, 注意这里的nrow 虽然和传进来的参数同名,但是这个nrow 只能在findi 子过程起作用,离开就失效了,是用来接收你传进来的参数
'将“记账凭证”中nrow行的记录写入“凭证录入”表中,nrow 是凭证录入表的第一条空行,不是记账凭证表,这里看出来你脑子是混乱的
Sheets("凭证录入").Select '你要往第2张表里写,当然要先选中它,否则后面的Range 引用都是默认第一张表的
With Worksheets("记账凭证")
Range("C7:C16").Value = .Cells(nrow, 5).Value
Range("H5").Value = .Cells(nrow, 1).Value
Range("H6").Value = .Cells(nrow, 2).Value
Range("H7").Value = .Cells(nrow, 3).Value
Range("C17").Value = .Cells(nrow, 4).Value
Range("G4").Value = .Cells(nrow, 5).Value
End With
End Sub
后面不分析了,你自己根据我的意见,想办法改好它,就不替你写了,自己不亲自动手一点点调试,是学不会的。
|
评分
-
1
查看全部评分
-
|