这一段VBA错误代码 103错在那

求写一段VBA代码,在 Excel 实现自动排序,该怎么解决_百度知道
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。
求写一段VBA代码,在 Excel 实现自动排序,该怎么解决
我有更好的答案
楼主这个可以自行录制一段排序的宏然后针对性修改即可没有什么难度的另外可以直接按f1打开帮助窗体,查看sort的用法
采纳率:91%
来自团队:
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包VBA代码运行结果有错误,找不出来:【excel吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:158,012贴子:
VBA代码运行结果有错误,找不出来:收藏
问题:无法判断 日期 是否在 查询的日期 区间,即代码中“If Cells(3, 14) &= Sheets("原始数据库").Cells(xhz, 3) &= Cells(4, 14) Then
'确定“发货日期”的是否属于查询日期区间”部分,也就是说在运行后,将第一关键检索字“发货单位”的所有日期的数据全部显示出来了,而设定的对于日期的筛选被忽略了……说明:我相信这段代码还有其他的优化方案,但这是我目前所能理解的代码,所以请各位老师在修改时尽量不要改动整体结构。当然,也希望在修改后,把其他的优化方案发出来,留待我慢慢消化,先谢谢各位老师!代码如下:Dim xhz
'声明 xhz (新行值)Dim ch, fhdw, fhrq, fcph, fcmz, fcpz, fcjz, shdw, shrq, ysph, shmz, shpz, shjz, sh, kh, qtsh, jsdw, bz1, bz2For xhz = 2 To hz - 1
'新行值(xhz)的取值区间为2~行值-1,即“原始数据库”工作表的最后一行
If Mid(Cells(6, 3), 1, 4) = Sheets("原始数据库").Cells(xhz, 8) Then
'核对关键字“发货单位”
If Cells(3, 14) &= Sheets("原始数据库").Cells(xhz, 3) &= Cells(4, 14) Then
'确定“发货日期”的是否属于查询日期区间
ch = Sheets("原始数据库").Cells(xhz, 1)
fhdw = Sheets("原始数据库").Cells(xhz, 2)
fhrq = Sheets("原始数据库").Cells(xhz, 3)
fcph = Sheets("原始数据库").Cells(xhz, 4)
fcmz = Sheets("原始数据库").Cells(xhz, 5)
fcpz = Sheets("原始数据库").Cells(xhz, 6)
fcjz = Sheets("原始数据库").Cells(xhz, 7)
shdw = Sheets("原始数据库").Cells(xhz, 8)
shrq = Sheets("原始数据库").Cells(xhz, 9)
ysph = Sheets("原始数据库").Cells(xhz, 10)
shmz = Sheets("原始数据库").Cells(xhz, 11)
shpz = Sheets("原始数据库").Cells(xhz, 12)
shjz = Sheets("原始数据库").Cells(xhz, 13)
sh = Sheets("原始数据库").Cells(xhz, 14)
kh = Sheets("原始数据库").Cells(xhz, 15)
qtsh = Sheets("原始数据库").Cells(xhz, 16)
jsdw = Sheets("原始数据库").Cells(xhz, 17)
bz1 = Sheets("原始数据库").Cells(xhz, 18)
bz2 = Sheets("原始数据库").Cells(xhz, 19)
'寻找本表末行
While Cells(bbhz, 2) && ""
bbhz = bbhz + 1
If Cells(3, 9) = "吨" Then
Cells(bbhz, 1) = bbhz - 9
Cells(bbhz, 2) = ch
Cells(bbhz, 3) = fhrq
Cells(bbhz, 4) = fcph
Cells(bbhz, 5) = fcmz / 1000
Cells(bbhz, 6) = fcpz / 1000
Cells(bbhz, 7) = fcjz / 1000
Cells(bbhz, 8) = shmz / 1000
Cells(bbhz, 9) = shpz / 1000
Cells(bbhz, 10) = shjz / 1000
Cells(bbhz, 11) = sh / 1000
If Cells(bbhz, 11) & 0.2 Then
'计算损耗是否超标,超标多少
Cells(bbhz, 12) = Cells(bbhz, 11) - 0.2
End IfNext xhz
FoxTable 2017上市, 轻松输入, 轻松统计, 轻松生成Excel报表, 快速搭建管理软件.
首先说错误问题:>>If Cells(3, 14) &= Sheets("原始数据库").Cells(xhz, 3) &= Cells(4, 14) Thenvba 不能够这写法(许多其他程式语言也不可以),须要分2段写,用and分隔。这是对的方法:If Cells(3, 14) &= Sheets("原始数据库").Cells(xhz, 3) and Sheets("原始数据库").Cells(xhz, 3) &= Cells(4, 14) Then~~~~跟著是给你一个意见:你这样写法:  ch = Sheets("原始数据库").Cells(xhz, 1)
  fhdw = Sheets("原始数据库").Cells(xhz, 2)  fhrq = Sheets("原始数据库").Cells(xhz, 3)  。  。  。  bz1 = Sheets("原始数据库").Cells(xhz, 18)
  bz2 = Sheets("原始数据库").Cells(xhz, 19)
我建议用数组变量代替这19个变量,可以用一个回圈(3行指令)搅定dim i(1 to 19) '须要先宣告变量for i = 1 to 19ar(i)=Sheets("原始数据库").Cells(xhz, i)next
谢谢老师!昨晚发帖后测试发现:If Mid(Cells(6, 3), 1, 4) = Sheets("原始数据库").Cells(xhz, 8) Then '核对关键字“发货单位”这行代码实际也未被执行,也就是当我更换其他发货单位时,始终提取的是一个发货单位的数据……是否我的逻辑不正确,请指正。
呵呵全部解决了昨晚头昏了,把发货单位和收货单位搞混了,输入的错误数据导致计算错误,加入其他的提示即可解决。谢谢siaojuen 老师。您的优化代码我需要继续研究,那个ar是什么意思?随机?
或者:ar仅仅是这个所谓变量组的前缀?不知道我的表达老师是否明白?
我在2楼这样写:dim i(1 to 19) '须要先宣告变量for i = 1 to 19ar(i)=Sheets("原始数据库").Cells(xhz, i)next宣告句错了,应该是dim ar(1 to 19) '须要先宣告变量ar 是变量名称,任由你取甚麼字都可以。例如dim asfdasfefewf(1 to 19) '宣告变量for i = 1 to 19asfdasfefewf(i)=Sheets("原始数据库").Cells(xhz, i)next甚至用汉字也可以Dim 一(1 To 19) '宣告变量For i = 1 To 19
一(i) = Sheets("原始数据库").Cells(xhz, i)Next
学习了老师的方法,但新问题又出来了,写的2段测试代码如下:第一段:Dim 数据(1 To 24)For i = 1 To 24数据(i) = Cells(3, i)MsgBox (数据(i))Next第二段:Dim 数据(1 To 24)For i = 1 To 24数据(i) = Cells(3, i)NextMsgBox (数据(i))问题:第一段测试正常,连续显示24个值。第二段按照我的理解应该显示第24个值才对,为什么下界超标,i值等于25?循环体内不是已经限定了变量最大值为24么?并且循环已经结束的情况下为什么变量仍然增加?
我想我理解了:先执行next,再判断for的条件,y则执行循环体,n则执行之后的语句不知道我的理解对否?
当然,首次进入是先执行for的初值的
会Excel,就能做在线excel.勤哲excel服务器学习和下载.
你一定花了许多时间得到此结论了,而且还不敢确定。试试看:Sub xxx()For i = 1 To 24NextMsgBox iEnd Sub
谢谢老师指导,已经测试,证明是正确滴无法表达感激,把俺的完整代码向老师汇报一下,这个代码主要学习了从数据库提取数据的方法,当然,也希望老师给予我所能理解的优化,时间随意,代码如下:Private Sub 查询_Click()Select Case ""
'检测关键参数的完整性Case Cells(3, 14).Text, Cells(4, 14).Text, Cells(4, 3).Text, Cells(6, 3).TextMsgBox ("信息输入不完整,请重新输入!")Exit SubEnd SelectDim hz
'计算“原始数据库”表格的有效行数hz = 2While Sheets("原始数据库").Cells(hz, 1) && ""
hz = hz + 1WendDim xhzFor xhz = 2 To hz - 1
If Cells(4, 3) = Sheets("原始数据库").Cells(xhz, 3) And Cells(6, 3) = Sheets("原始数据库").Cells(xhz, 10) Then
'筛选查询条件
If Cells(3, 14) &= Sheets("原始数据库").Cells(xhz, 5) And Sheets("原始数据库").Cells(xhz, 12) &= Cells(4, 14) Then
'筛选查询条件
Dim jcsj(1 To 24)
'提取24个基础数据
For sjlz = 1 To 24
jcsj(sjlz) = Sheets("原始数据库").Cells(xhz, sjlz)
'求出本表末行
While Cells(bbhz, 2) && ""
bbhz = bbhz + 1
Cells(bbhz, 1) = bbhz - 9
'输出查询值
Cells(bbhz, 2) = jcsj(1) & jcsj(2)
Cells(bbhz, 3) = jcsj(5)
Cells(bbhz, 4) = jcsj(6)
Cells(bbhz, 5) = jcsj(7) / 1000
Cells(bbhz, 6) = jcsj(8) / 1000
Cells(bbhz, 7) = jcsj(9) / 1000
Cells(bbhz, 8) = jcsj(14) / 1000
Cells(bbhz, 9) = jcsj(15) / 1000
Cells(bbhz, 10) = jcsj(16) / 1000
Cells(bbhz, 11) = jcsj(17) / 1000
If Cells(bbhz, 11) & 0.2 Then
'输出辅助数据值
Cells(bbhz, 12) = Cells(bbhz, 11) - 0.2
End IfNext xhzDim lshz, sumzds
'计算统计值lshz = 10While Cells(lshz, 10) && ""
sumzds = sumzds + Cells(lshz, 10)
lshz = lshz + 1WendCells(6, 9) = sumzds
'输出统计值Cells(5, 9) = lshz - 10Cells(3, 3) = Cells(3, 14) & "至" & Cells(4, 14)
'输出其他值End Sub
看别人的长长问题很易晕倒,为了不太浪费药油,请问你可否将问题拆细,逐个来问?
嘿嘿,就是表达一下对老师的感激,顺便把完整的代码向老师汇报一下,
待老师贴个膏药,再来看看。
>Dim hz
'计算“原始数据库”表格的有效行数>hz = 2>While Sheets("原始数据库").Cells(hz, 1) && ""
>hz = hz + 1>Wendmsgbox hz这几行骤眼看好像有错,你试试加一行在其下看看查一列有效行最底行hz = [A2].End(xlDown).RowMsgBox hz
还真碰上了一个新问题:Dim jcsj(1 To 24) '提取24个基础数据Dim sjlzFor sjlz = 1 To 24jcsj(sjlz) = Sheets("原始数据库").Cells(xhz, sjlz)Next sjlz问题:我打算把这段代码放到“模块”里面,因为有不同的查询口径的查询表都需要这些基础数据,模块名称“提取基础数据”,使用代码:call 提取基础数据,无法识别变量?
呵呵,老师果然火眼金睛,这个求出的末行行值 = 实际值 + 1所以后面的xhz的终值才会是 hz - 1有老师带真好,又学了求有效行值的方法
根本的问题已经解决,剩下的都是优化的问题了,请老师注意身体!
优化的问题就是使用回圈了,利用回圈柄算出各个不同的值for i = 3 to 11
j = i + iif(i&8,2,6)
k = iif(i&5,1,1000)
Cells(bbhz, i) = jcsj(j) / knext这例子省不了多少行,可是如果你有一百几十行,就非回圈不可了。Cells(bbhz, 3) = jcsj(5)
Cells(bbhz, 4) = jcsj(6)
Cells(bbhz, 5) = jcsj(7) / 1000
Cells(bbhz, 6) = jcsj(8) / 1000
Cells(bbhz, 7) = jcsj(9) / 1000
Cells(bbhz, 8) = jcsj(14) / 1000
Cells(bbhz, 9) = jcsj(15) / 1000
Cells(bbhz, 10) = jcsj(16) / 1000
Cells(bbhz, 11) = jcsj(17) / 1000
谢谢老师指导,这个与您上面2、7楼有同等效果不过这段不打算改动了,原因:1、确实如老师所说,省不了几行2、还有其他的查询表需要提取不同的jcsj(i)值,并且每个查询表所提取的数据也没有规律,按照现在的写法,只需要粘贴过去,略加改动即可,而不必写每一个查询表的该段代码。灰常感谢!!!另:如果老师有空,帮我解决一下17楼的问题好么?虽然也节约不了几行代码,但这对我来说又是一个技术节点。
17楼?我有看过,看不懂。>把代码放到“模块”里面,因为有不同的查询口径的查询表都需要这些基础数据,>模块名称“提取基础数据”,使用代码:call 提取基础数据,无法识别变量?句末说的 "变量" 是指甚麼?会不会是你说错了?是程序名称罢?你可否抄一些有关材料来看看。搅清楚才好说话。
登录百度帐号推荐应用求用VBA编一段代码,详细如下_百度知道
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。
求用VBA编一段代码,详细如下
么把一列的数据,156-170,193-207,分别填到另一列8行-22行,45-59,119-133
我有更好的答案
Long,&k&ExplicitSub&test()&&&&Dim&a&&&&&nbsp.[a60000].End(3);ln&&&&+&14).Copy&;&nbspOption&Long,&i&&&nbsp.Range(&quot.Range(&&&k&=&&&37&&1&To&ln&Step&15&&&&&&&&&&&&;&i&&&&End&k&=&8&&&&With&ActiveSheet&&i&=&k)&:a&&&&&As&&&&&=&.Row&&&&&&&&For&&i&&Long&As&e&&&&&&As&&k&+&&Next&ln&&&&&&i&&nbsp
大神,能给一段以8行-22行,45-59,119-133,156-170,193-207为主导的FOR吗?=。=
采纳率:33%
来自团队:
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包怎样查找这个VBA代码出错在哪里 要过程要解析_百度知道
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。
怎样查找这个VBA代码出错在哪里 要过程要解析
怎样查找这个VBA代码出错在哪里
要过程要解析只知道代码错误原因:D6有个空格,删除D6这个空格; 代码就正常了但问题是:如何找出这个代码错误
用什么方法
我有更好的答案
代码出错后,会有对话框让你选择“结束”或者“调试”,选择调试后,就会转到程序出错的位置,就可以分析出错原因,进而解决
完全不会啊
采纳率:85%
来自团队:
在代码开始处加入断点,运行代码,中断后按F8逐行执行,出现错误提示的行就是出错行。
来自:求助得到的回答
1条折叠回答
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包一段excel vba代码 错误_百度知道
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。
一段excel vba代码 错误
写一个自定义函数,实现
&如果lookup_value被包含在table_array中第一列的某个单元格,则返回该单元格右边的第col_index_num个单元格的值&
Public Function ILOOKUP(lookup_value As Range, table_array As Range, col_index_num As Integer)
Applica...
我有更好的答案
Str作为一个专用的函数名词,不可作为变量名
采纳率:76%
来自团队:
不是个变量..因为&Color&quot..Cells(r, 2).I & i是个字符串,变量名不能直接这么用你还不如定义个数组color(0 to 6),然后color(0)=0 color(1)=36..
本回答被网友采纳
为您推荐:
其他类似问题
您可能关注的内容
excel的相关知识
换一换
回答问题,赢新手礼包

我要回帖

更多关于 steam错误代码 107 的文章

 

随机推荐