[英]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.