Deklarace proměnné PRIVATE Vyřešeno

Programy pro práci v kanceláři (Word, Excel, Access…=>Office)

Moderátor: Mods_senior

VALL
Level 1
Level 1
Příspěvky: 95
Registrován: únor 12
Pohlaví: Nespecifikováno
Stav:
Offline

Deklarace proměnné PRIVATE

Příspěvekod VALL » 03 črc 2012 14:29

Ahoj,
mám proceduru, v které používám proměnnou, kterou deklaruji v jiné proceduře v rámci modulu.
Potřebuji pomocí procedury deklarovat proměnou pro jinou proceduru, kde ji používám jako definici pro Sheets("proměnná"). V podstatě kliknu na tlačítko, které mě spustí makro v kterém deklaruji proměnnou (cestu k listu v sešitě) a vyvolám druhou proceduru, v které bude figurovat tato proměnná.
Potom kliknu na jiné tlačítko (jiná procedura), a deklaruji zase jinou proměnnou, která má ovšem stále stejné označení.

Příklad kódu vyvolávajícího makra - háže to chybu:(

Kód: Vybrat vše

Sub vyvolaniEi0()
'Procedura pro vyvolání makra VlozeniDoTermPrehledReal pro list Ei=0
'----------------------------------------------------------------------------------------
Private Const Ei As String = "Ei=0"
  Call VlozeniDoTermPrehledReal
End Sub

Reklama
cmuch
Level 4.5
Level 4.5
Příspěvky: 1547
Registrován: březen 11
Bydliště: Drsná Vysočina :D
Pohlaví: Muž
Stav:
Offline

Re: Deklarace proměnné PRIVATE

Příspěvekod cmuch » 03 črc 2012 19:15

Deklarace proměnných a constant se dává úplně na začátek, pro přehlednost.
Potom jsou samostatná makra.

Takže by to vypadalo takto:

Kód: Vybrat vše

Private Const Ei As String = "Ei=0"

Sub vyvolaniEi0()
'Procedura pro vyvolání makra VlozeniDoTermPrehledReal pro list Ei=0
'----------------------------------------------------------------------------------------
  Call VlozeniDoTermPrehledReal
End Sub

Pokud by se jednalo jen o proměnnou která se používá ve více makrech
Tak takto:

Kód: Vybrat vše

Dim Ei As String

Sub vyvolaniEi0()
.
.
.
.
End Sub

a deklaruji zase jinou proměnnou, která má ovšem stále stejné označení.

Toto nechápu :?

VALL
Level 1
Level 1
Příspěvky: 95
Registrován: únor 12
Pohlaví: Nespecifikováno
Stav:
Offline

Re: Deklarace proměnné PRIVATE

Příspěvekod VALL » 04 črc 2012 07:34

Díky za radu. Dovysvětlím.
Mám dva listy v xls, které se jmenují jinak. U těchto dvou listů chci spouštět stejné makro, které pracuje v každém listě samostatně. Tzn., Spustím makro pro list 1 - tam něco vykoná. Jindy spustím pro list2 stejné makro, které v listě 2 vykoná stejnou činnost jako v listě1. toto makro je spuštěno z třetího listu. Makro pracuje i s jinými listy, takže ho mám napsané způsobem Workbook("").Sheets("").Range("").......
Abych nemusel mít dvě stejné makra, pouze s jinou adresou listu, potřebuji tuto adresu vložit do proměnné ve vyvolávajícím makru. Podle toho, které vyvolávající makro je spuštěno, tak se deklaruje proměnná adresy listu.
Pro lepší názornost zasílám i kód.

1.Vyvolávající makro

Kód: Vybrat vše

Sub vyvolaniEi0()
'Procedura pro vyvolání makra VlozeniDoTermPrehledReal pro oba sešity a to Ei=0
'----------------------------------------------------------------------------------------
Private Const Ei As Variant = "Ei=0"  'zde chyba, potřebuji deklarovat proměnou pro proceduru VlozeniDoTermPrehledReal
  Call VlozeniDoTermPrehledReal
End Sub


2.Vyvolávající makro

Kód: Vybrat vše

Sub vyvolaniEi00()
'Procedura pro vyvolání makra VlozeniDoTermPrehledReal pro oba sešity a to Ei=0
'----------------------------------------------------------------------------------------
Private Const Ei As Variant = "Ei>0"  'zde chyba, potřebuji deklarovat proměnou pro proceduru VlozeniDoTermPrehledReal
  Call VlozeniDoTermPrehledReal
End Sub


3.Společné makro pro dva listy:

Kód: Vybrat vše

Sub VlozeniDoTermPrehledReal()

'Makro vloží označené řádky do hlavního přehledu TermPrehlůedReal
'Odstarní se záznam z výchozího listu
'Označení (projekt, Ei) vkládaného projektu se vloží do listu DbPartaci sl., E,F,G
'----------------------------------------------------------------------------------------

  Sheets("EI>0").Select
  Range("A2").Select

rwP = Workbooks("TermPrehled_v1").Sheets(Ei > 0).Cells(Rows.Count, "P").End(xlUp).Row
rwM = Workbooks("TermPrehled_v1").Sheets(Ei > 0).Cells(Rows.Count, "M").End(xlUp).Row


  For i = 2 To rwP
 
    Dim Project As Range
    Set Project = Sheets("Ei>0").Range("S" & i)
    PocetVyskytu = Application.WorksheetFunction.CountIf(Range("M2", "M" & rwM), Project)
     
    If Range("P" & i) = "Ano" Then
      'Vložím všechny se vyskytující položky pro daný projekt
          For ii = 1 To PocetVyskytu
              Sheets("EI>0").Select
              Range("A2").Select
                 
              Cells.Find(What:=Project, After:=ActiveCell, LookIn:=xlValues, _
               LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
               MatchCase:=False, SearchFormat:=False).Activate
               
          clF = ActiveCell.Column
          rwF = ActiveCell.Row
     
              Range(Cells(rwF, clF - 1), Cells(rwF, 1)).Copy
              Sheets("TermPrehledReal").Select
              Range("A1").End(xlDown).Select
              ActiveCell.Offset(1, 0).Select
              ActiveSheet.Paste
              Sheets("EI>0").Select
              Sheets("Ei>0").Range(Cells(rwF, clF), Cells(rwF, 1)).Delete (xlShiftUp)
          Next
      End If
     
'vymažu všechny se vyskytující položky pro daný projekt

        If Range("P" & i) = "NE" Then
          For ii = 1 To PocetVyskytu
            Sheets("EI>0").Select
            Range("A2").Select
               
            Cells.Find(What:=Project, After:=ActiveCell, LookIn:=xlValues, _
             LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
             MatchCase:=False, SearchFormat:=False).Activate
             
          clF = ActiveCell.Column
          rwF = ActiveCell.Row
          Sheets("Ei>0").Range(Cells(rwF, clF), Cells(rwF, 1)).Delete (xlShiftUp)
        Next
    End If
  Next
 
'Odstranění položek ze sledovačky - pouze vložené položky, tzn., s příznakem ANO
   For A = 2 To rwP
     If Range("P" & A) = "Ano" Then
        Sheets("Ei>0").Range("Q" & A, "R" & A).Copy
       rwDbE = Sheets("DbPartaci").Cells(Rows.Count, "E").End(xlUp).Row + 1
         Sheets("DbPartaci").Select
         Range("E" & rwDbE).Select
         ActiveSheet.Paste
         Sheets("Ei>0").Range("P" & A, "S" & A).Delete (xlShiftUp)
      End If
     
      If Range("P" & A) = "Ne" Then
        Sheets("Ei>0").Range("Q" & A, "R" & A).Copy
       rwDbI = Sheets("DbPartaci").Cells(Rows.Count, "I").End(xlUp).Row + 1
         Sheets("DbPartaci").Select
         Range("I" & rwDbI).Select
         ActiveSheet.Paste
         Sheets("Ei>0").Range("P" & A, "S" & A).Delete (xlShiftUp)
      End If
    Next

End Sub

cmuch
Level 4.5
Level 4.5
Příspěvky: 1547
Registrován: březen 11
Bydliště: Drsná Vysočina :D
Pohlaví: Muž
Stav:
Offline

Re: Deklarace proměnné PRIVATE  Vyřešeno

Příspěvekod cmuch » 04 črc 2012 10:53

Tak proměnnou deklaruj pro všechny makra v modulu na začátku
a pak v každém makru ji přiřaď hodnotu.

Kód: Vybrat vše

Dim Ei As Variant

    Sub vyvolaniEi0()
    'Procedura pro vyvolání makra VlozeniDoTermPrehledReal pro oba sešity a to Ei=0
     Ei  = "Ei=0"
    '----------------------------------------------------------------------------------------
      Call VlozeniDoTermPrehledReal
    End Sub

    Sub vyvolaniEi00()
    'Procedura pro vyvolání makra VlozeniDoTermPrehledReal pro oba sešity a to Ei=0
    Ei = "Ei>0"
    '---------------------------------------------------------------------------------------- 
      Call VlozeniDoTermPrehledReal
    End Sub

VALL
Level 1
Level 1
Příspěvky: 95
Registrován: únor 12
Pohlaví: Nespecifikováno
Stav:
Offline

Re: Deklarace proměnné PRIVATE

Příspěvekod VALL » 04 črc 2012 11:20

Dík, nevím, proč jsem se upnul na private.


  • Mohlo by vás zajímat
    Odpovědi
    Zobrazení
    Poslední příspěvek
  • Hledáme spoluhráče Call Of Duty: Modern Warfare/Black Ops Cold War/Vanguard/Black Ops 6 (private matches)
    od Kogaku » 08 srp 2024 14:22 » v Hry
    38
    80673
    od Kogaku Zobrazit poslední příspěvek
    15 čer 2025 04:53

Zpět na “Kancelářské balíky”

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 1 host