VBA代码问题?

Sub剔除退货()DimpinmAsString,shulAsInteger,jineAsInteger,str1AsStringDimmAsIntegerFori=3T... Sub 剔除退货()
Dim pinm As String, shul As Integer, jine As Integer, str1 As String
Dim m As Integer
For i = 3 To 400
Worksheets("Sheet2").Activate
If Application.Search("供应商", Cells(i, 2)) > 0 Then
'取汉字以外的字符
For k = 1 To Len(Cells(i, 2))
If Not Asc(Mid(Cells(i, 2), k, 1)) < 0 Then
str1 = ""
str1=str1&mid(cells(i,2),k,1)
End If
Next k
m = i
lp1:
pinm=str1&cells(m+5,3)
shul = Cells(m + 5, 8)
jine = Cells(m + 5, 11)
Worksheets("Sheet1").Activate
'↓找到同名行 剔除
For j = 2 To ActiveSheet.UsedRange.Rows.Count
If Cells(j, 7) = pinm Then
Cells(j, 7).EntireRow.Interior.ColorIndex = 43
Cells(j, 11) = Cells(j, 11) - shul
Cells(j, 15) = Cells(j, 15) - jine
Exit For
End If
Next j
Worksheets("Sheet2").Activate
While Cells(m + 6, 3) <> ""
m = m + 1
GoTo lp1
Wend
'↑找到同名行 剔除
End If
Next i
End Sub

请高手帮看看,上面代码问题在哪里,总提示str1=str1&mid(cells(i,2),k,1) 这行报红色
展开
 我来答
阳光上的桥
2021-11-01
知道答主
回答量:0
采纳率:0%
帮助的人:0
展开全部

语法错误的原因:&的前后需要添加空格,下面这样可以通过语法检查:

str1 = str1 & Mid(Cells(i, 2), k, 1)

后面还有类似的语句。

此外str1=""的初始化语句应该放在循环的前面;

还有,反复循环中访问Cells(i,2)会造成代码很慢,一般应该先提取到变量再访问。

追问

str1 = str1 & Mid(Cells(i, 2), k, 1) 我的低级错误,现在好了谢谢。

又有问题了,什么下标越界,我是不是应该不要来回切换表页,用sheets(1).cells()和sheets(2).cells()比较好?

追答
最好的办法把全表数据读入数组里面,这样速度会快许多许多,例如:
arr1 = Sheets(1).UsedRange
以后使用arr1(i, 2)速度会非常快,而且不受切换工作表的影响。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式