Daniel Klimowicz

Daniel Klimowicz Programista
Aplikacji
Internetowych

Temat: Pole kombi

Witam mam pytanie czy istnieje możliwość by np:
mamy pole kombi z lista 10 opcji i teraz chciałbym by jak wybiorę na opcję 2 to żeby przełączyło mnie na arkusz2
Mariusz Jankowski

Mariusz Jankowski Programista
Excel/VBA

Temat: Pole kombi

Witaj. Oczywiście, że jest taka możliwość. Musimy tylko wiedzieć gdzie masz to pole kombi. W arkuszu (jaki typ kontrolki?) czy na formularzu?
Daniel Klimowicz

Daniel Klimowicz Programista
Aplikacji
Internetowych

Temat: Pole kombi

pole kombi znajduje sie w arkuszu1 a chciałbym poprzez niego dostać się do innych arkuszy. Z tego pola kombi chce zrobić takie menu nawigacyjne
Maciej Bartosiak

Maciej Bartosiak IT CONSULTANT

Temat: Pole kombi

Panu Mariuszowi chodzi przede wszystkim o to czy:
1. pole kombi to "sprawdzenie poprawności"?
2. pole kombi to obiekt ActiveX?
3. pole kombi to obiekt formularza?

od tego zależy w jaki sposób będziemy mogli wywołać kod odpowiedzialny za zmianę arkusza.
Daniel Klimowicz

Daniel Klimowicz Programista
Aplikacji
Internetowych

Temat: Pole kombi

napewno nie sprawdzanie poprawności,
prawdopodobnie jest to obiekt formularza
Maciej Bartosiak

Maciej Bartosiak IT CONSULTANT

Temat: Pole kombi


Obrazek


pytanie teraz jaki obiekt?
Formanty formularza, czy Formanty ActiveXMaciej Bartosiak edytował(a) ten post dnia 16.02.12 o godzinie 20:22
Daniel Klimowicz

Daniel Klimowicz Programista
Aplikacji
Internetowych

Temat: Pole kombi

formant formularza

Temat: Pole kombi

zakładam że na liście kombo są nazwy arkusza
podepnij taką procedurkę:
Sub PrzelaczArkusz()

With ActiveSheet.Shapes(Application.Caller).ControlFormat

On Error Resume Next
ThisWorkbook.Worksheets(.List(.Value)).Activate

If Err.Number <> 0 Then
MsgBox "Brak arkusza o nazwie " & .List(.Value)
End If

On Error GoTo 0

End With

End Sub
Mariusz Jankowski

Mariusz Jankowski Programista
Excel/VBA

Temat: Pole kombi

Ja bym to zrobił tak:

1. Rysujemy formant w arkuszu.
2. Ustalamy dowolny zakres wejściowy (mogą być nazwy arkusza).
3. Jako łącze przypisujemy komórkę A1.
4. W komórce B1 wstawiamy formułę =A1 (chodzi o przeliczenie arkusza po zmianie wyboru na polu kombi).
5. Do modułu arkusza wrzucamy taki kod:

Option Explicit

Private Sub Worksheet_Calculate()
Dim iComboPos As Integer
Dim iSheetsCount As Integer

'Sczytaj pozycję pola kombi i liczbę arkuszy w skoroszycie
iComboPos = Me.Range("A1")
iSheetsCount = ThisWorkbook.Sheets.Count

'Jeżeli arkuszy jest mniej niż danych na liście wówczas zaznacz ostatni arkusz.
'W przeciwnym razie wybierz arkusz na podstawie pozycji
If iComboPos <= iSheetsCount Then
ThisWorkbook.Sheets(iComboPos).Activate
Else
ThisWorkbook.Sheets(iSheetsCount).Activate
End If

End Sub


W momencie zmiany wyboru na polu kombi nastąpi przeliczenie arkusza, a wraz z nim uruchomione zostanie makro, które aktywuje właściwy arkusz.Mariusz Jankowski edytował(a) ten post dnia 17.02.12 o godzinie 09:37
Maciej Bartosiak

Maciej Bartosiak IT CONSULTANT

Temat: Pole kombi

a nie prościej zastosować po prostu formant ActiveX w tym przypadku?
Mariusz Jankowski

Mariusz Jankowski Programista
Excel/VBA

Temat: Pole kombi

Pewnie, że prościej bo formant ten ma wbudowane zdarzenia.
Maciej Bartosiak

Maciej Bartosiak IT CONSULTANT

Temat: Pole kombi

Pytanie teraz do Daniela czemu zastosował formant formularza i czy nie może zamienić go na ActiveX

Temat: Pole kombi

Nie powinien ;)
http://www.goldenline.pl/forum/2789044/kontrolki-activ...

formanty formularza są równiż proste w oprogramowywaniu :)

Mario....przekombinowałeś :D
Mariusz Jankowski

Mariusz Jankowski Programista
Excel/VBA

Temat: Pole kombi

Czemu? Jak dla mnie to moje jest prostsze od Twojego ;-)).
Maciej Bartosiak

Maciej Bartosiak IT CONSULTANT

Temat: Pole kombi

Mariusz Jankowski:
Czemu? Jak dla mnie to moje jest prostsze od Twojego ;-)).

No moim zdaniem też;) jedyny minus, że trzeba wykorzystywać pomocniczą komórkę/pomocniczy arkusz.

Temat: Pole kombi

Mariusz Jankowski:
Czemu? Jak dla mnie to moje jest prostsze od Twojego ;-)).


Pozwól że się nie zgodzę ;)
Twój kod, jak dla mnie odpada z powodów:

1. Więcej lini kodu :D
2. Procedura niepotrzebnie się uruchamiana kilkadziesiąt lub kilkaset razy (każde przeliczenie!)
3. Potrzeba zaangażowania dodatkowych komórek
4. Jak np plik jest ciężki, albo po prostu ja tak lubię...mam wyłączone automatyczne przeliczanie...przeliczam ręcznie, to co?

:)
Maciej Bartosiak

Maciej Bartosiak IT CONSULTANT

Temat: Pole kombi

Zbigniew Budziewicz:
Mariusz Jankowski:
Czemu? Jak dla mnie to moje jest prostsze od Twojego ;-)).


Pozwól że się nie zgodzę ;)
Twój kod, jak dla mnie odpada z powodów:

1. Więcej lini kodu :D
2. Procedura niepotrzebnie się uruchamiana kilkadziesiąt lub kilkaset razy (każde przeliczenie!)
3. Potrzeba zaangażowania dodatkowych komórek
4. Jak np plik jest ciężki, albo po prostu ja tak lubię...mam wyłączone automatyczne przeliczanie...przeliczam ręcznie, to co?

:)

to w takim razie lepiej zasosować

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Then
'procedura Mariusza
End If

Maciej Bartosiak edytował(a) ten post dnia 17.02.12 o godzinie 13:08

Temat: Pole kombi

Maciek....przecież zdarzenie Change nie będzie aktywowane ;)
Maciej Bartosiak

Maciej Bartosiak IT CONSULTANT

Temat: Pole kombi

Zbigniew Budziewicz:
Maciek....przecież zdarzenie Change nie będzie aktywowane ;)

dobra za bardzo popłynołem:p
Mariusz Jankowski

Mariusz Jankowski Programista
Excel/VBA

Temat: Pole kombi

Zbigniew Budziewicz:
Mariusz Jankowski:
Czemu? Jak dla mnie to moje jest prostsze od Twojego ;-)).


Pozwól że się nie zgodzę ;)
Twój kod, jak dla mnie odpada z powodów:

1. Więcej lini kodu :D

Ale przez to, że korzystam ze zmiennych kod jest znacznie czytelniejszy od Twojego :-).
Kto z forumowiczów wie za co odpowiada właściowść/obiekt ControlFormat?
2. Procedura niepotrzebnie się uruchamiana kilkadziesiąt lub kilkaset razy (każde przeliczenie!)

Z tym się zgadzam i jest to najtrafniejszy argument. Ale taka jest specyfika kontrolek tego typu - kontroli ActiveX mają właśnie wbudowane zdarzenia i nie ma z tym problemu - tutaj musimy się posiłkować protezą podobną jak w przypadku zmiany wyboru przy autofiltrze.
3. Potrzeba zaangażowania dodatkowych komórek

Ale to nawet lepiej bo przez to rozwiązanie jest czytelniejsze :-).
Oczywiście ta formuła w komórce B1 nie musi być taka jak podałem. Świetnie będzie gdy zastosujemy INDEKS aby sczytać faktyczną wartość z listy.
4. Jak np plik jest ciężki, albo po prostu ja tak lubię...mam wyłączone automatyczne przeliczanie...przeliczam ręcznie, to co?

:)

Też dobra uwaga, ale przeliczanie jest uzależnione od aplikacji, a nie od pliku :-).
Czy zawsze pracujesz na plikach, które zawierają mnóstwo formuł i arkuszy? Wiem, że niektórzy mają ustawione domyślnie przeliczanie ręczne - ale to głównie w firmach gdzie operuje się tylk na plikach ważących po 100MB (notabene bardzo źle zaprojektowanych), które i tak szybko się rozrastają.

Pozdro Zbyszek

Następna dyskusja:

Pole kombi a ochrona arkusz...




Wyślij zaproszenie do