To Pavolc
Ja som to tiež skúšal pri naťahovaní kurzov z NIKE. A tiež sa mi to zdalo najjednoduchšie. Len to prepínanie treba robiť manuálne.Makro sa mi nepodarilo.
No zrejme tam bude dátum kedy bol súbor uložený.
To by išlo možno v assembleri, ale do pola môžeš ukladať iba hodnoty(čísla alebo reťazce).
príkaz pole=array(x,y,z)
uloží do poľa aktuálne hodnoty premenných x,y,z.
Ak sa zmení x to neznamená že sa automaticky zmení aj hodnota v pole(0).
Tá sa zmení až po príkaze ARRAY. Inverzná funkcia k ARRAY nie je. to by si musel priraďovať manuálne. Teda v podprograme tých 120 priradení k tvojim premenným OK1...OK120.
Názov premennej je vlastne informácia pre prekladač a ten priradí tej premennej určité miesto v pamäti a stou bunkou sa potom pracuje.
Príkaz pole=array(x,y,z)
urobí to isté ako
pole(0)=x
pole(1)=y
pole(2)=z
a urobí to iba raz
ak sa neskôr zmenia hodnoty x,y,z, tak hodnoty v poli zostanú pôvodné, ako boli priradené príkazom array.
' mam vypocet ktory mi naplni premenne OK1 = 12, OK2 = 15, OK3 = 45 ...................... (v dalsom cykle sa zmenia)
pole = Array(OK1, OK2, OK3, OK4, OK5, OK6, OK7, OK8, OK9, OK10, OK11, OK12, OK13, OK14, OK15, OK16, OK17, OK18, OK19, OK20, OK21, OK22, OK23, OK24, OK25, OK26, OK27, OK28, OK29, OK30, OK31, OK32, OK33, OK34, OK35, OK36, OK37, OK38, OK39, OK40, OK41, OK42, OK43, OK44, OK45, OK46, OK47, OK48, OK49, OK50, OK51, OK52, OK53, OK54, OK55, OK56, OK57, OK58, OK59, OK60, OK61, OK62, OK63, OK64, OK65, OK66, OK67, OK68, OK69, OK70, OK71, OK72, OK73, OK74, OK75, OK76, OK77, OK78, OK79, OK80, OK81, OK82, OK83, OK84, OK85, OK86, OK87, OK88, OK89, OK90, OK91, OK92, OK93, OK94, OK95, OK96, OK97, OK98, OK99, OK100, OK101, OK102, OK103, OK104, OK105, OK106, OK107, OK108, OK109, OK110, OK111, OK112, OK113, OK114, OK115, OK116, OK117, OK118, OK119, OK120)
' tu potrebujem vypisat hodnoty premenných do buniek (nie premenne ale ich skutocne hodnoty)
Myslím, že najjednoduchšie by bolo upraviť ten tvoj výpočet a naplniť OK(i) namiesto OKi.
Teda OK(1), OK(2),OK(3).....OK(100) namiesto OK1,OK2,OK3,....OK100
Sub vypocet1()
Dim OD As Double
Dim CO As Double
Dim KDE As Range
Dim PO As Double
Dim sh As Worksheet
Dim bunka As Range
Set sh = Workbooks("Predbezny pozadavek.xls").Worksheets("Žádanka")
'Set sh = Worksheets("hárok1")
OD = sh.Range("B10").Value
Set KDE = sh.Range("T:T")
PO = sh.Range("B11").Value
If sh.Range("B11").Value = "" Then PO = OD
For i = OD To PO Step 1
CO = i
For Each bunka In KDE
If bunka = CO Then
sh.Range("C10") = 0
sh.Range("C10").Font.ColorIndex = 2
sh.CommandButton1.Enabled = True
Exit Sub
End If
Next bunka
Next i
sh.Range("C10") = 1
sh.Range("C10").Font.ColorIndex = 2
sh.CommandButton1.Enabled = False
End Sub
Tá kombinácia MATCH s ON ERROR asi nebude najvhodnejšia.
A kde máš to vypínanie tlačítka?
Keď to nevidím, tak neviem povedať, čo to robí.
To Jeza:
Ale ak tam budú aj dátumy s bodkami, tak budú zase tie dátumy pošahané.
i=3.2.12 je druhá premenná v poradí. A v cykle je splnená podmienka, teda vyskočí z cyklu.
For i = OD To PO Step 1
If (Application.WorksheetFunction.Match(i, KDE, 0) > 0) = True Then GoTo vypnuti1
If i >= PO Then Exit For
Next i
To zvýraznené je tam načo?
i=2.2.12 nie je v zozname
i=3.2.12 je v zozname a vyskočí z cyklu
na i=4.2.12 sa už nedostane
ani na i=5.2.12
Presne tak ako píše AL.
K možnosti d) iba poznámka
Netreba v ovládacích paneloch.
Stačí v exceli(2007 a vyššie. V 2003 je to obdobné) v možnostiach -> rozšírené dať ako oddeľovač desatinných miest "."
To je pre vkladanie cez CTRL+C a CTRL+V.
A potom samozrejme vrátiť naspäť ",".
Skús funkciu automatický filter. Možno bude vyhovovať.
No vlastne si to vymyslel ty. Mne iba vŕtalo, prečo by to nešlo vylepšiť. :)
Tak som niečo poskúšal. Na konci stačí prázdny ENTER
Option Explicit
Dim Isect As Range
Dim x As String
Dim Nad As Range
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Set Isect = Application.Intersect(Range("C2:C500"), Range(ActiveCell.Address))
If Not Isect Is Nothing Then
Set Nad = Isect.Offset(-1, 0)
If Nad <> "" And Isect = "" Then
Isect = "'" & Right(Nad, Len(Nad) - InStr(Nad, "-") - 1) & " - "
x = InputBox(Isect)
Isect = Isect & x
If x = "" Then
ActiveCell.Offset(0, 0).Clear
Else
ActiveCell.Offset(1, 0).Select
End If
End If
End If
End Sub
A čo tak vložiť tam INPUTBOX? Nie je to veľmi praktické, ale na tento účel snáď použiteľné.
Option Explicit
Dim Isect As Range
Dim Nad As Range
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Set Isect = Application.Intersect(Range("C2:C500"), Range(ActiveCell.Address))
If Not Isect Is Nothing Then
Set Nad = Isect.Offset(-1, 0)
If Nad <> "" And Isect = "" Then
Isect = "' " & WorksheetFunction.Text(Right(Nad, Len(Nad) - InStr(Nad, "-") - 1), "h:mm") & " - "
Isect = Isect & InputBox(Isect)
End If
End If
End Sub
No niečo sa mi podarilo aj bez makra.
Treba si označiť poslednú bunku v stlpci A
Je to pomenovaná bunka "posledná" a je to vlastne číslo posledného riadku.
No neviem, či sa tam tá hodnota bude vyskytovať viackrát. Ak áno potom je najlepšie urobiť to makrom.
A možno by si mohol vyskúšať automatický filter. Dáš si zobraziť potrebnú hodnotu a potom to ručne skopíruješ, kam budeš chcieť. Tých 10 listov si môžeš spojiť do jedného listu, alebo si to 10 krát zopakuješ.
Skús priložiť nejakú ukážku.
Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.
Používáte podnikový systém Helios iNuvio? Potřebujete pomoci se správou nebo vyvinout SQL proceduru? Více informací naleznete na stránce Helios iNuvio.