後續問題之前回答的問題:Excel VBA - Delete Data from a Worksheet If Selection from Dropdown List is ChangedExcel的VBA - 複製數據,從下拉列表中選擇工作表。如果選擇更改
電流:這是一個個人的費用電子表格,我使用G列在我的主表分類從我的信用社提供的.csv導入的行項目費用。列G中的每個單元格都有一個下拉列表,這是我工作簿中其他工作表的名稱:電源,氣體,雜貨等。當前,當您從列G下拉列表中進行選擇時,它會複製A1:F1當前行並將其粘貼到任何工作表被選中的下一個空行,例如電力或煤氣或雜貨。
問題:
雖然我測試了我上一個問題的答案,但它工作正常。然而,現在有一些新問題並非我有一千行真實數據
問題1:將行復制並粘貼到其他工作表僅適用於前幾次我從工作表中選擇工作表落下。例如,在單元格G2中,我從下拉菜單中選擇「外出就餐」,它會將A1:F1複製到外出工作表中。但是,如果我去G11並選擇亞馬遜,它將不會執行任何操作。它似乎在我嘗試做的前3或4行工作,但對其餘部分無效。當我說它不起作用時,它不會複製到任何工作表。
問題2:我遇到了一個永無止境的消息框錯誤。當錯誤消息彈出,並說,
「你必須點擊另一個單元格」 & vbNewLine &「然後點擊後面的」 & Target.Address &「更改值」,」
我點擊確定,它會再次彈出,不會讓我做任何事情,它只是彈出並且唯一的方法來擺脫錯誤信息是強制退出Excel。
問題3:偶爾遇到複製/粘貼問題。(有時候會發生)是它會複製列A,B, C,D,E和F,然後將主工作表中的列A粘貼到選擇工作表中的列A,BUT將主工作表中的列C粘貼到選擇工作表中的列B,將主工作表中的列D粘貼到選擇工作表,從主工作表中的列E到選擇工作表中的列D以及從主工作表中的列F到選擇工作表中的列E.我不知道主工作表中列B發生了什麼(我的猜測是因爲主工作表中的列B始終爲空,它決定不將它複製到新工作表中?)?
這裏是運行一次下拉值被改變我當前的代碼:
Option Explicit
Public cbxOldVal As String
Dim PrevVal As Variant
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Rows.Count > 1 Then Exit Sub
If Target.Columns.Count > 1 Then Exit Sub
cbxOldVal = Target.Value
End Sub
Private Sub Worksheet_Activate()
If Selection.Rows.Count = 1 And Selection.Columns.Count = 1 Then
PrevVal = Selection.Value
Else
PrevVal = Selection
End If
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range, c As Range
Set rng = Intersect(Target, Range("G2:G30000"))
If Not Intersect(Target, Columns("G")) Is Nothing Then
If PrevVal <> "" Or cbxOldVal <> "" Then
If cbxOldVal = Target.Value Then
MsgBox "You have to click on another cell " & vbNewLine & "and then click back on " & Target.Address & " to change the value", vbExclamation, "Error"
Cells(Target.Row, Target.Column) = PrevVal
Exit Sub
ElseIf Target.Value = "" Or Target.Value = PrevVal Then Exit Sub
End If
End If
End If
If Not rng Is Nothing Then
For Each c In rng.Cells
Select Case c.Value
Case "Power": Power c
Case "Gas": Gas c
Case "Water": Water c
Case "Groceries, etc.": GroceriesEtc c
Case "Eating Out": EatingOut c
Case "Amazon": Amazon c
Case "Home": Home c
Case "Entertainment": Entertainment c
Case "Auto": Auto c
Case "Medical": Medical c
Case "Dental": Dental c
Case "Income": Income c
Case "Labor": Labor c
Case "Union Dues": UnionDues c
Case "Other": Other c
End Select
If cbxOldVal = "" Then
' do nothing
Else
With Worksheets(cbxOldVal)
Dim i As Integer
Dim strFindA As String, strFindB As String, strFindC As String
Dim strFindD As String, strFindE As String, strFindF As String
strFindA = Sheets("Master").Range("A" & c.Row)
strFindB = Sheets("Master").Range("B" & c.Row)
strFindC = Sheets("Master").Range("C" & c.Row)
strFindD = Sheets("Master").Range("D" & c.Row)
strFindE = Sheets("Master").Range("E" & c.Row)
strFindF = Sheets("Master").Range("F" & c.Row)
For i = 1 To 100 ' replace with lastrow
If .Cells(i, 1).Value = strFindA _
And .Cells(i, 2).Value = strFindB _
And .Cells(i, 3).Value = strFindC _
And .Cells(i, 4).Value = strFindD _
And .Cells(i, 5).Value = strFindE _
And .Cells(i, 6).Value = strFindF _
Then
.Rows(i).EntireRow.Delete
MsgBox "Deleted Row " & i
GoTo skip:
End If
Next i
End With
End If
skip:
Next c
End If
End Sub
這裏是從上面的代碼發射了的情況下的宏(存在用於每一種情況下的類似宏)。這些在模塊中:
Sub Power(c As Range)
Dim rng As Range
Set rng = Nothing
Set rng = Range("A" & c.Row & ":F" & c.Row) '<< A1:F1 here is *relative to c.EntireRow*
'copy the values
With Worksheets("Power").Cells(Rows.Count, 1).End(xlUp)
.Offset(1, 0).Resize(1, rng.Cells.Count).Value = rng.Value
' Copy formating from Master Sheet
With Worksheets("Master")
Range("A" & c.Row & ":F" & c.Row).Copy
End With
.Offset(1, 0).PasteSpecial xlPasteFormats
Application.CutCopyMode = False
End With
End Sub
以下是電子表格的鏈接:1drv.ms/x/s!Amd7vhcV4dnOcJsB3KUiCLn6kPI。
有什麼建議嗎?
雖然您已經有一段時間了,但我仍想指出本網站的以下網頁:[「我應避免詢問什麼類型的問題?」](http:// stackoverflow .COM /幫助/不-問)。您可能還想閱讀[Stack Overflow問題清單](http://meta.stackoverflow.com/questions/260648/stack-overflow-question-checklist)並瞭解[最小,完整和可驗證示例](http ://stackoverflow.com/help/mcve)所以我們實際上可以重現你的問題。之後,請考慮更新您的帖子。 – Ralph
@Ralph這段代碼是否更清晰?我希望這是您要求更新帖子時所指的內容? – Bobby
我想我已經修復了錯誤。但是,你能告訴我如何挑起問題#2嗎?你是做什麼? – Niclas