Таблицы заказов на основе ввода в электронную таблицу Excel - PullRequest
0 голосов
/ 03 июля 2018

В электронной таблице Excel пользователь может определить порядок листов в пределах Столбец A :

       A        B
1   Sheet3
2   Sheet4
3   Sheet1
4   Sheet2
5

Как только пользователь ввел заказ в Столбец A , он / она может нажать кнопку, связанную с этим кодом VBA:

Sub Move()
Sheets(Sheet1.Range("A2").Value).Move After:=Sheets(Sheet1.Range("A1").Value)
Sheets(Sheet1.Range("A3").Value).Move After:=Sheets(Sheet1.Range("A2").Value)
Sheets(Sheet1.Range("A4").Value).Move After:=Sheets(Sheet1.Range("A3").Value)
End Sub

Этот VBA размещает листы в порядке, основанном на входах пользователя в Столбец A . Пока все отлично работает


Теперь у меня проблема в том, что количество листов меняется, поэтому может случиться так, что вместо 4 листов будет 8, 10 или 15 и так далее. В этом случае необходимо будет добавить все эти листы вручную в код VBA.

Можно ли сделать код VBA более динамичным. Что-то вроде массива для значений в Столбец A и VBA, например:

Sub Move()
MoveSheets based on Array {Sheet1.Range("A1:A5")}
End Sub

1 Ответ

0 голосов
/ 03 июля 2018

Я думаю, что это сработает, если имена ваших листов на «Лист1» в B4 будут снижаться.

Sub x()

Dim n As Long, i As Long, r As Range

Application.ScreenUpdating = False

With Sheets("Sheet1")
    Set r = .Range("B4", .Range("B" & Rows.Count).End(xlUp))
    For n = r.Count To 1 Step -1
        Sheets(r.Cells(n).Value).Move after:=Sheets(Sheets.Count - i)
        i = i + 1
    Next n
    Application.Goto .Range("A1")
End With

Application.ScreenUpdating = True

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...