簡體   English   中英

VBA將細胞/細胞范圍傳遞給多個亞細胞

[英]VBA Passing cells/range of cells to multiple subs

您好我將一系列細胞定義為變量的問題取決於哪些細胞組已經改變。 到目前為止,我有這個,但它發送了多個錯誤,我已經嘗試將它們作為字符串傳遞並創建臨時變量來保存值並傳遞它但無論它看起來不起作用。

    Private Sub Worksheet_Change(ByVal Target As Range)
If Not (Application.Intersect(Worksheets("Sheet1").Range("A:E"), Target) Is Nothing) Then
    DoSort("A3:F100", "A4")
End If
If Not (Application.Intersect(Worksheets("Sheet1").Range("H:L"), Target) Is Nothing) Then
    DoSort("H3:M100", "H4)
End If
End Sub

Sub DoSort(x As Range, y As Range)
With ThisWorkbook.Sheets("Sheet1")
.Range(x).Sort Key1:=.Range(y), Order1:=xlAscending, Header:=xlYes
End With
End Sub

我之前有工作,當我像這樣對單元格進行硬編碼時:

Private Sub DoSort2()
With ThisWorkbook.Sheets("Sheet1")
.Range("H3:M100").Sort Key1:=.Range("H4"), Order1:=xlAscending, Header:=xlYes
End With
End Sub

從來沒有真正使用excel宏在VBA中工作,所以我對此非常新,所以任何幫助都將不勝感激!

請參閱下面的重構代碼。 請參閱我的評論以獲得解釋

Private Sub Worksheet_Change(ByVal Target As Range)

    'I used "Me." in place of "Worksheets("Sheet1")." assuming that the Worksheet_Change event is already on Sheet1    
    If Not Intersect(Me.Range("A:E"), Target) Is Nothing Then
         DoSort "A3:F100", "A4"
    End If

    If Not Intersect(Me.Range("H:L"), Target) Is Nothing Then
        DoSort "H3:M100", "H4"  'you were missing a close " here
    End If

End Sub

'define x and y as String to pass the string address of the range reference
Sub DoSort(x As String, y As String)
    With ThisWorkbook.Sheets("Sheet1")
        .Range(x).Sort Key1:=.Range(y), Order1:=xlAscending, Header:=xlYes
    End With
End Sub

如果你願意,也可以通過范圍。 這看起來像這樣:

   DoSort Me.Range("A3:F100"), Me.Range("A4")

   Sub DoSort(x as Range, y as Range)
      x.Sort Key1:=y, Order1:=xlAscending, Header:=xlYes
   End Sub

您可以將數據作為字符串傳遞,而不是作為范圍傳遞:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not (Application.Intersect(Worksheets("Sheet1").Range("A:E"), Target) Is Nothing) Then
        DoSort("A3:F100", "A4")
    End If
    If Not (Application.Intersect(Worksheets("Sheet1").Range("H:L"), Target) Is Nothing) Then
        DoSort("H3:M100", "H4")
    End If
End Sub

Sub DoSort(x As String, y As String)
    With ThisWorkbook.Sheets("Sheet1")
        .Range(x).Sort Key1:=.Range(y), Order1:=xlAscending, Header:=xlYes
    End With
End Sub

暫無
暫無

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

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