Отваряне на предварително зададен шийт с падащо меню

1 одобрение 0 неодобрения
попитан 2018 март 13 в VBA от ИВАН ученик (37 точки)

Мъча се от падащия списък да закача към него шийт ? Така изглежда 1 шийт.

След като дам на падащия списък 

Искам да ми се отвори шийт 3. Като замени самата таблица от шийт 1.

 

2 коментари

коментиран 2018 март 13 от Tormozko експерт (164 точки)
Аз не се сещам как може да стане без да се ползва макрос (VBA).
коментиран 2018 март 13 от ИВАН ученик (37 точки)
А с макрос (VBA) ще стане ли ???
И ако става по този начин ще може ли малко инфо какво да направя . Мерси

2 отговори

2 одобрения 0 неодобрения
отговорени 2018 март 14 от Mitaka88 учител (128 точки)
редактиран 2018 март 16 от Mitaka88

Виж дали това дали няма да ти свърши работа: https://www.extendoffice.com/documents/excel/3571-excel-select-sheet-based-on-cell-value.html

В примера, който е показан се избират различни шийтове, според това какво си натиснал в падащото меню. Вместо sheet1, sheet2 можеш да преименуваш шийтовете на лада, москвич и т.н и би трябвало да работи. 

Ъпдейт: Ето ти примерно решение, с което можеш да копираш съдържанието на шийта, който си избрал от падащото меню в шийт 1.

1. Създаваш комбо бокс (специално падащо меню, което да работи с макроси)

Първо трябва да активираш developer таба в ексел (file-> options ->customise ribbon)

След това developer -> insert ->combobox

excel combo box

 

 

 

 

 

2. След като създадеш падащото меню, даваш десен бутон върху него и assign macro

3. Това ще те отведе на правилното място във vba editora на ексел. Триеш всичко, което е там и поставяш следния код. Сложим съм подробни обяснения, така че всичко да е ясно:

Private Sub ComboBox1_Change()
'if a sheet is selected from the dropdown list
    If ComboBox1.ListIndex > -1 Then
        'copy the selected worksheet
        Sheet = ComboBox1.Value
        Set ws = Worksheets(Sheet)
        'Choose the range you want to copy
        ws.Range("A1:B10").Copy
        'Activate Sheet1. Change "Sheet1" with the corresponding sheet name
        Sheets("Sheet1").Activate
        'Select the target range
        Range("A1").Select
        'Paste in the target destination
        ActiveSheet.Paste
        Application.CutCopyMode = False
        Range("A1").Select
    End If
End Sub

Private Sub ComboBox1_DropButtonClick()
    Dim xSheet As Worksheet
    On Error Resume Next
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    If ComboBox1.ListCount <> ThisWorkbook.Sheets.Count Then
        ComboBox1.Clear
        For Each xSheet In ThisWorkbook.Sheets
            ComboBox1.AddItem xSheet.Name
        Next xSheet
    End If
    Application.EnableEvents = True
    Application.ScreenUpdating = True
End Sub

Private Sub ComboBox1_GotFocus()
    If ComboBox1.ListCount <> 0 Then ComboBox1.DropDown
End Sub

Необходимо е да замениш "Sheet1"  в най-горното макро (Combobox1_Change) с името на първия ти шийт. Имай предвид, че това макро няма да "отваря" отделните листи, а просто ще копира информацията от тях, т.е., когато ъпдейтваш информацията, тя ще се променя само в sheet1. Ако искаш просто да "отваряш" другия шийт е достатъчно просто да замениш първото макро (Combobox1_Change) със следния код:

 Private Sub ComboBox1_Change()
    If ComboBox1.ListIndex > -1 Then Sheets(ComboBox1.Text).Select 
 End Sub

Другите макроси трябва да останат непроменени. Не забравяй и да запазиш екселския файл като macro-enabled(.xlsm), за да можеш да ползваш и друг път този код. 

3 коментари

коментиран 2018 март 14 от ИВАН ученик (37 точки)
Мерси.
Но работата излиза по-сложна от колкото си мислех :(
А познанията ми не достигат за работа с кодове и макроси.
И все пак ако на някой му се струва че за него е лесно и може да ми помогне мога да му пратя файла да види за какво става дума.
Мерси на всички.
коментиран 2018 март 14 от ИВАН ученик (37 точки)
Всичко това го правя за да има само един шийт за по-удобно използване. Другите ще бъдат скрити.
коментиран 2018 март 16 от Mitaka88 учител (128 точки)
Промених си отговора, ако искаш мога да ти пратя и файла с примерното решение, да видиш какво точно съм направил и дали ще можеш да го пригодиш за това, което ти трябва.
1 одобрение 0 неодобрения
отговорени 2018 март 17 от ИВАН ученик (37 точки)

Здравейте отново,

По начина по-който се мъчих нищо не стана.

Затова редактирах цялата таблица и го направих по друг начин.

1 лист е главният, а във втория съм вкарал всички данни, след това с формулата vlookup и стана работата.

Чак тогава си направих дефинирано име и всичко си работи. Е, не е точно това, което исках, но пак ще свърши работа.

Добре дошли в българския форум за Ексел и Майкрософт офис! Тук можете да питате хора със знания и опит, както и да споделите знанията и опита си с другите.
...