+ -
当前位置:首页 → 问答吧 → 求VBA高手优化for循环代码

求VBA高手优化for循环代码

时间:2011-09-09

来源:互联网

For l_lonY = 8 To l_lonLastY
  l_booFlag = False
  l_strFeeTyp = Trim(Sheets(CNT_SHEET_YUN).Cells(l_lonY, 2).Value)
   
  If l_strFeeTyp <> "" Then
  l_strCarNum = Trim(Sheets(CNT_SHEET_YUN).Cells(l_lonY, 5).Value)
  l_strTransTyp = Trim(Sheets(CNT_SHEET_YUN).Cells(l_lonY, 7).Value)
  l_strVbeln = Trim(Sheets(CNT_SHEET_YUN).Cells(l_lonY, 3).Value)
  l_strLfimg = Trim(Sheets(CNT_SHEET_YUN).Cells(l_lonY, 4).Value)
   
  End If
  If Trim(Sheets(CNT_SHEET_YUN).Cells(l_lonY, 12).Value) = "" Then
  l_douWight = 0
  Else
  l_douWight = CDbl(Trim(Sheets(CNT_SHEET_YUN).Cells(l_lonY, 12).Value))
  End If
  If Trim(Sheets(CNT_SHEET_YUN).Cells(l_lonY, 14).Value) = "" Then
  l_douTransFee = 0
  Else
  l_douTransFee = CDbl(Trim(Sheets(CNT_SHEET_YUN).Cells(l_lonY, 14).Value))
  End If

  l_strVbeln = Trim(Sheets(CNT_SHEET_YUN).Cells(l_lonY, 3).Value)
  aa = Trim(Sheets(CNT_SHEET_YUN).Cells(l_lonY, 12).Value)
  bb = Trim(Sheets(CNT_SHEET_YUN).Cells(l_lonY, 14).Value)

  l_strNextVbeln = Trim(Sheets(CNT_SHEET_YUN).Cells(l_lonY + 1, 3).Value

  If l_strFeeTyp = "代垫" Or l_strFeeTyp = "自提" Or l_strFeeTyp = "我方承担" Or l_strFeeTyp = "调整" Then

  If fm_getEachItem(l_strFeeTyp, l_strVbeln, obSAPExpTable15_TMP, l_lonY) = False Then
  MsgBox "第" & l_lonY & "行的系统提单信息与上传模板中填写的不一致。上传失败。"
  executeFunZTBWRG013 = CNT_RFC_ERR1
  Exit Function
  Else
  l_intIndex = l_intIndex + 1
  obSAPExpTable13.APPENDROW
  '集团
obSAPExpTable13.Columns("MANDT").Value(l_intIndex) = CNT_STR_CLIENT
' obSAPExpTable13.Columns("MANDT").Value = CNT_STR_CLIENT '
'公司代码
obSAPExpTable13.Columns("BUKRS").Value(l_intIndex) = g_strCop '用户登录输入的公司代码
'会计年度
obSAPExpTable13.Columns("GJAHR").Value(l_intIndex) = l_intYear
'期间
obSAPExpTable13.Columns("RPMAX").Value(l_intIndex) = l_intMonth
'科目号
obSAPExpTable13.Columns("SAKNR").Value(l_intIndex) = "7000002"
'备选科目号
obSAPExpTable13.Columns("LOKKT").Value(l_intIndex) = "6601"
'Sheet中的上传行号
obSAPExpTable13.Columns("ZESHROW").Value(l_intIndex) = l_lonY
'运费性质(编号)
obSAPExpTable13.Columns("ZTRID").Value(l_intIndex) = fm_checkTyp(l_strFeeTyp)
'运费性质(描述)
obSAPExpTable13.Columns("ZTRTP").Value(l_intIndex) = l_strFeeTyp
'更新人
obSAPExpTable13.Columns("ERNAM").Value(l_intIndex) = g_strUsr
'更新日期
obSAPExpTable13.Columns("ERDAT").Value(l_intIndex) = g_strSysDatum
'更新时间
obSAPExpTable13.Columns("ERTIM").Value(l_intIndex) = g_strSysUzeit
'提单
obSAPExpTable13.Columns("VBELN").Value(l_intIndex) = l_strVbeln
'提单行项目
obSAPExpTable13.Columns("POSNR").Value(l_intIndex) = l_strPosnr
'车号
obSAPExpTable13.Columns("ZTRAID").Value(l_intIndex) = l_strCarNum


End If
If l_strFeeTyp <> "调整" Then
'计费重量

obSAPExpTable13.Columns("TSL01").Value(l_intIndex) = aa
'计费重量单位
obSAPExpTable13.Columns("VRKME").Value(l_intIndex) = "MT"
Else
'计费重量
obSAPExpTable13.Columns("TSL01").Value(l_intIndex) = 0
'计费重量单位
obSAPExpTable13.Columns("VRKME").Value(l_intIndex) = ""
End If
'合计
obSAPExpTable13.Columns("TSL02").Value(l_intIndex) = bb

'合计金额单位
obSAPExpTable13.Columns("WAERS").Value(l_intIndex) = "CNY" l_booNflag = False
  End If
   
  End If
  End If
  End If

  Next



此代码是将excel里的记录一行一行赋值给obSAPExpTable13.Columns。如果数据量很大(5000条以上)时。这个循环相当的慢,有没有能优化下的办法呢?
(注:此程序相当于个接口,目的是把excel里的数据上传到我某个系统(SAP系统)的表里去)

作者: luoping007   发布时间: 2011-09-09

用EXCEL本身就慢,试下用ACCESS或SQL SERVER

作者: xiaoyao961   发布时间: 2011-09-09

热门下载

更多