我在使用vba时遇到了一些问题。我在excell中有一个按钮,如果我从excell运行makro,那么比从VBA开发者运行需要两倍的时间。如果我从VBA开发者运行它会设置我的边框和背景颜色corectlly(我尝试从按钮运行makro几次)。如果我从按钮excel运行代码它只是格式化(bg颜色,边框)前20行,但vba开发人员格式化所有行。以下是我的代码。此致
Sheets("Master plan").Cells.Clear
lrm = 1
With Worksheets("Mater plan")
For Each ws In Sheets(Array("1L", "5L", "20L"))
LR = ws.Range("A" & Rows.Count).End(xlUp).Row
.Range("D" & lrm).Resize(LR, 1) = ws.Range("C12:C" & LR).Value2
.Range("A" & lrm).Resize(LR, 1) = ws.Range("A12:A" & LR).Value2
.Range("B" & lrm).Resize(LR, 1) = ws.Range("L12:L" & LR).Value2
.Range("C" & lrm).Resize(LR, 1) = ws.Range("L12:L" & LR).Value2
lrm = lrm + Range("A1:A" & LR).Rows.Count
Next
End With
我认为问题从这里开始......
Dim c As Range
Dim SrchRng
For Each ws In Sheets(Array("Master plan"))
lastRow = ws.Range("A" & Rows.Count).End(xlUp).Row
For i = lastRow To 1 Step -1
If ws.Cells(i, 1).Text = "#N/V" Or ws.Cells(i, 1).Text = "stop" Then
ws.Cells(i, 1).EntireRow.Delete
End If
Next i
Next
Dim LR3 As Long
LR3 = Range("B" & Rows.Count).End(xlUp).Row
Sheets("master plan").Range("A1:A" & LR3).Borders(xlEdgeRight).LineStyle = xlContinuous
Sheets("master plan").Range("B1:B" & LR3).Borders(xlEdgeRight).LineStyle = xlContinuous
Sheets("master plan").Range("C1:C" & LR3).Borders(xlEdgeRight).LineStyle = xlContinuous
Sheets("master plan").Range("D1:D" & LR3).Borders(xlEdgeRight).LineStyle = xlContinuous
Sheets("master plan").Range("B1:B" & LR3).NumberFormat = "ddd dd.mm"
Sheets("master plan").Range("C1:C" & LR3).NumberFormat = "ddd dd.mm"
Sheets("master plan").Range("A1:A" & LR3).Interior.Color = RGB(253, 233, 217)
Sheets("master plan").Range("B1:B" & LR3).Interior.Color = RGB(218, 238, 243)
Sheets("master plan").Range("C1:C" & LR3).Interior.Color = RGB(218, 238, 243)
Sheets("master plan").Range("D1:D" & LR3).Interior.Color = RGB(235, 241, 222)
Sheets("master plan").Columns("A:E").ColumnWidth = 15
答案 0 :(得分:0)
这里有一个不合格的范围:
lrm = lrm + Range("A1:A" & LR).Rows.Count
你指的是哪个表格?
默认情况下,它将指向ActiveSheet
答案 1 :(得分:0)
变化的速度可能是因为代码实际上做了不同的工作。
您必须确保您的代码引用您想要的工作表。例如,以下行将引用活动工作表上的单元格,因为这是Range对象将执行的操作。
lrm = lrm + Range("A1:A" & LR).Rows.Count
您需要更改此内容。
此外,代码有点难以阅读,例如:
lrm = lrm + LR
可以替换为
For Each ws In Sheets(Array("Master plan"))
也是这个循环
Set ws = Sheets("Master plan")
可以替换为
new
<!/ P>
答案 2 :(得分:0)
我找到了。谢谢大家的提议。这一切对我有所帮助。但问题在于
LR3 = Range("A" & Rows.Count).End(xlUp).row
我用
更改了它LR3 = Sheets("Podatki plana").Range("A" & Rows.Count).End(xlUp).row