/ / VBA Преминаване на клетки / диапазон от клетки към множество субсидии - excel, vba, excel-vba

VBA Преминаване на клетки / диапазон от клетки към множество подменюта - excel, vba, excel-vba

Здравейте, имам проблем, определящ кръга от клетки катопроменлива в зависимост от това, коя група клетки са се променили. Досега имам това, но изпраща няколко грешки, опитах да ги предам като низ и да създам временни променливи, за да задържим стойностите и да преминем това, но независимо от това, което не изглежда да работи.

    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

Никога не съм работил в VBA с макроси на Excel, така че съм съвсем нов в това, така че всяка помощ ще бъде оценена!

Отговори:

3 за отговор № 1

Вижте моя коригиран код по-долу. Вижте моите коментари за обяснение.

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

0 за отговор № 2

Можете да предадете данните като Структура срещу Обхват:

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