是否有可能,如果在excell按钮makro行为不同于你在vba dev中运行?

时间:2015-08-24 15:19:58

标签: excel vba excel-vba

我在使用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

3 个答案:

答案 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