Stránka 1 z 2

Excel VBA - zákaz spuštění makra

Napsal: 16 lis 2010 14:20
od Branscombe
Ahoj, mám trošku problém s Userform.

Mám formulář kde mám spoustu comboboxů, textboxů, labelů atd... Dole mám tlačítko které by mi mělo přenést hodnoty ze všech polí do buněk na listu. Problém je v tom že když chci uložit tyto data, tak se mi aktualizuje hlavní combobox a ten mi přepíše hodnoty v polích. Mohl bych přiložit sešit s chybou, ale musel bych ho sáhodlouze upravovat, jelikož jsou v něm loga a data zákazníků takže se raděj ptám - jde po kliknutí na tlačítko spustit makro "Private Sub Save_Click()" které zakáže spouštění dalších maker jako je například "Combobox_change()" ?? Díky předem za rady ...

Re: Excel VBA - zákaz spuštění makra

Napsal: 16 lis 2010 17:29
od navstevnik
Popis problemu neni dostatecne jasny.
Vskutku by bylo vhodne pripojit UserForm, ve kterem jsi vytvoril kladnou zpetnou vazbu, aby bylo mozno overit reseni na realu.

Lze sice pouzit vlastnost EnableEvents, ktera zabrani vyvolani udalosti pri operacich VBA na listu Excelu:

Kód: Vybrat vše

Application.EnableEvents = False
' zde je prislusna procedura
Application.EnableEvents = True

ale pokud bude zmenen obsah bunkek ComboBox.RowSource, tak ke zmene v seznamu stejne dojde.

Re: Excel VBA - zákaz spuštění makra

Napsal: 16 lis 2010 18:11
od Poki
tenhle problem jsem jednou resil tak, ze jsem si vytvoril verejnou promennou as Boolean, pri jejiz hodnote True se mohly vykonat vsechny procedury, ktere ovlivnovaly userform (ve vsech techto procedurach jsem mel if Verejna = True then...).
Na zacatku ulozeni dat Button_click jsem vsak nastavil Verejnou na False, cim se dotcene procedury neprovedly a na konci _click jsem Verejnou zase nastavil na True)

Re: Excel VBA - zákaz spuštění makra

Napsal: 16 lis 2010 20:59
od Branscombe
to navstevnik: nefunguje, asi opravdu budu muset vytvořit userform znovu bez firemních chráněných dat abych ho zde mohl publikovat ...

to Poki: Dobrej nápad, ale asi až jako krajní řešení ... Ale díky, když selžou rady od návštěvníka, tak tohle by fungovat mohlo ... ;-)

Re: Excel VBA - zákaz spuštění makra

Napsal: 18 lis 2010 07:58
od Branscombe
Tak přikládám soubor s Userform...

Po zobrazení formuláře, kliknu na první combobox, vyberu který záznam chci zobrazit, cokoliv upravím (třeba text: místo PC-Help napíšu PC) a kliknu na SAVE. Formulář se pouze aktualizuje a hodnoty se neuloží. Kde je chyba ??

Re: Excel VBA - zákaz spuštění makra

Napsal: 18 lis 2010 08:06
od navstevnik
a co takhle heslo k VBA?
Jen tak naokraj, v uvodnim dotazu problem spociva v necem jinem, nez uvadis nyni.

Re: Excel VBA - zákaz spuštění makra

Napsal: 18 lis 2010 08:40
od Branscombe
Ups, sorry ... V příloze bez hesla ...

Psal jsem: "Problém je v tom že když chci uložit tyto data, tak se mi aktualizuje hlavní combobox a ten mi přepíše hodnoty v polích."
A to přetrvává. Prostě se nové hodnoty v polích neuloží na list, jelikož se aktualizuje hlavní combobox1 a ten zaktualizuje celý formulář ...

Re: Excel VBA - zákaz spuštění makra

Napsal: 18 lis 2010 14:28
od navstevnik
Nahledni do prilohy.

Re: Excel VBA - zákaz spuštění makra

Napsal: 18 lis 2010 14:38
od Branscombe
Super, funguje jak má ... Ještě to budu muset prozkoumat a pochopit abych to napasoval na svoje data ... Zatím díky a případně budu mít doplňující otázky ;-)

Re: Excel VBA - zákaz spuštění makra

Napsal: 19 lis 2010 09:28
od Branscombe
Super, funguje to jako má... Ještě si to postupně upravuji, jelikož tvůj zápis VBA je o level výš než ten můj ... ;-)

Mám tam další překážku:
1. Chci napsat:

Kód: Vybrat vše

If ComboBox6.Value = "Materiál / Material / Material / Materiales / 材料" Then

Ale VBA mi nebere čínské znaky... Lze nějak zapsat podmínku když ComboBox6.Value (ale pouze pro prvních 8 znaků) ??

2. Nešlo by nějak upravit zápis VBA ComboBox3_Change() kde jsem to napsal dost složitě ??

Re: Excel VBA - zákaz spuštění makra

Napsal: 19 lis 2010 11:37
od navstevnik
ad 1. Left(ComboBox6.Value, 8) = "Materiál" Then
ad 2.

Kód: Vybrat vše

Private Sub ComboBox3_Change()

  Dim wsh As Worksheet, zakaznik As Variant
  Dim HBlk As Range, HCll As Range, CB4RowSrcAddr As String
 
  Set wsh = ThisWorkbook.Worksheets("zdroj")
  Set HBlk = wsh.Range("g1:o1")
  zakaznik = ComboBox3.Value
  With HBlk
    Set HCll = .Find(zakaznik, LookIn:=xlValues, LookAt:=xlWhole)
    If Not HCll Is Nothing Then
      If HCll.Offset(3, 0).Value = vbNullString Then
        CB4RowSrcAddr = HCll.Resize(2, 1).Offset(1, 0).Address
      Else
        CB4RowSrcAddr = wsh.Range(HCll.Offset(1, 0), HCll.Offset(2, 0).End(xlDown)).Address
      End If
      Me.ComboBox4.RowSource = wsh.Name & "!" & CB4RowSrcAddr
    End If
  End With
End Sub

V tebou predlozenem souboru je skryto nekolik "min", ktere nejsou deaktivovany, reseni salamovou metodou, ktere jsi zvolil k tomu nejspis nevede.

Re: Excel VBA - zákaz spuštění makra

Napsal: 19 lis 2010 11:58
od Branscombe
Díky za rady...

Psal jsem to nejlépe jak umím ... Nejsem v tom žádný expert ani se tím neživím, pouze se snažím firmě trochu pomoci ... Jaké největší miny tam jsou ??

EDIT: Ještě jedna otázka: Když otevřu soubor a pracuji s formulářem, tak je ze začátku všechno OK, ale po nějaké době když chci znovu otevřít formulář, tak mi vyskočí chybová hláška "Type mismatch" .... Proč ??