簡體   English   中英

宏上的命令按鈕的作用不同於從列表中選擇宏

[英]Command Button on macro acts differnet than selecting macro from list

我不明白為什么會這樣,但我有一個宏,可以根據國家名稱將數據從一個工作表移動到其他各種工作表。 如果我 select 命令功能區中的宏(開發人員選項卡/宏/從列表中選擇),則宏可以完美運行。 如果我使用分配了宏的命令按鈕,或者使用調用宏的 button_click 方法,則結果只是部分的。 宏沒有完成這項工作,但代碼一直運行並且沒有錯誤。 我什至可以 select 列表中的 button_click 方法,它工作正常。 為什么按鈕與從宏列表中選擇會有不同的行為?

Sub MoveButton_Click()

Call MoveDataToWorksheet

End Sub
Sub MoveDataToWorksheet()

Dim i As Variant
Dim pname As String
Dim rng As Range
Dim lastrow As Long
Dim wslastrow As Long
Dim ws As Worksheet
Dim count As Long
Dim rawdata As Worksheet

For Each ws In ThisWorkbook.Worksheets
    If ws.Name = "Raw_Data" Or ws.Name = "Charts" Or _
    ws.Name = "Tables" Then
    'skips the sheets I want to keep
    Else
        wslastrow = ws.Cells(Rows.count, "a").End(xlUp).Row
        If wslastrow >= 5 Then
            ws.Range("a5:r" & wslastrow).Delete
        Else
            ws.Range("a5:r" & 6).Delete
        End If
    End If
Next ws

Set rawdata = ThisWorkbook.Worksheets("Raw_Data")
lastrow = rawdata.Cells(Rows.count, "a").End(xlUp).Row
Set rng = rawdata.Range("a5:a" & lastrow)

For Each i In rng
    pname = Cells(i.Row, "a").Value

    For Each ws In ThisWorkbook.Worksheets
        If pname = ws.Name Then
            wslastrow = ws.Cells(Rows.count, "a").End(xlUp).Row + 1
            i.EntireRow.Copy
            If wslastrow >= 5 Then
                ws.Cells(wslastrow, "a").PasteSpecial
            Else
                ws.Cells(5, "a").PasteSpecial
            End If
        End If
    Next ws

        If pname = "South Carolina" Then
            i.EntireRow.Copy
            wslastrow = ThisWorkbook.Worksheets("SC").Cells(Rows.count, "a").End(xlUp).Row + 1
            If wslastrow >= 5 Then
                ThisWorkbook.Worksheets("SC").Cells(wslastrow, "a").PasteSpecial
            Else
                ThisWorkbook.Worksheets("SC").Cells(5, "a").PasteSpecial
            End If
        End If

        If pname = "Saudi Arabia" Then
            i.EntireRow.Copy
            wslastrow = ThisWorkbook.Worksheets("KSA").Cells(Rows.count, "a").End(xlUp).Row + 1
            If wslastrow >= 5 Then
                ThisWorkbook.Worksheets("KSA").Cells(wslastrow, "a").PasteSpecial
            Else
                ThisWorkbook.Worksheets("KSA").Cells(5, "a").PasteSpecial
            End If
        End If

        If pname = "United Arab Emirates" Then
            i.EntireRow.Copy
            wslastrow = ThisWorkbook.Worksheets("UAE").Cells(Rows.count, "a").End(xlUp).Row + 1
            If wslastrow >= 5 Then
                ThisWorkbook.Worksheets("UAE").Cells(wslastrow, "a").PasteSpecial
            Else
                ThisWorkbook.Worksheets("UAE").Cells(5, "a").PasteSpecial
            End If
        End If
Next i

Call FixWSFormulas

End Sub

要結束這個問題:

pname = Cells(i.Row, "a").Value中有一個隱含的ActiveSheet ,這意味着這可能針對不同的工作表運行,具體取決於您是從宏列表還是命令按鈕運行它。

更改為pname = rawdata.Cells(i.Row, "a").Value

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM