[ ivanivan94 @ 19.08.2016. 08:16 ] @
Kolege, potrebna mi je pomoć u Excel-u, naime na radnom listu postoji često potreba da se "skriva" i "otkriva" određeni broj redova (jedan ili u rasponu više njih odjednom). Naravno da znam da se to može lako uraditi selektovanjem nekog reda ili više njih i onda na traci alata na Format/Hide & Unhide...ali to mi zbog specifične situacije neradi posao pa da na to netrošim vreme.
Znači potreban mi je VBA code, ja na radnom listu imam Button, koji klikom otvara formu, na formi naravno imam jedan Button i jedan TextBox1. E sada ja hoću da kada u taj TextBox1 upišem redni broj nekog reda npr. 8 / klik na Button1 i da se u tom momentu red 8 "sakrije".
Naravno nije teško napisati jednostavan code koji to radi bez problema:

Code:
Private Sub CommandButton1_Click()
If (TextBox1.Text = "8") Then
Rows("8").EntireRow.Hidden = True
End If
End Sub

i naravno ako želim taj red da "otkrijem" koristim drugu formu na kojoj je takođe TextBox1 i Button:
Code:
Private Sub CommandButton1_Click()
If (TextBox1.Text = "8") Then
Rows("8").EntireRow.Hidden = False
End If
End Sub

Ali problem je što se tu neradi samo recimo desetak redova ili sl. već što to moše biti i red 8 ali i red 508, pa da nebi morao pisati posebno za svaki red (kod od kilometar, kao primer ispod):
Code:
Private Sub CommandButton1_Click()
If (TextBox1.Text = "8") Then
Rows("8").EntireRow.Hidden = True
ElseIf (TextBox1.Text = "9") Then
Rows("9").EntireRow.Hidden = True
ElseIf (TextBox1.Text = "10") Then
Rows("10").EntireRow.Hidden = True
.
.
.
ElseIf (TextBox1.Text = "508") Then
Rows("508").EntireRow.Hidden = True
End If
End Sub

Meni treba Code kada na Formi1 u TextBox1 upišem bilo koji red da klikom na Button1 te forme on biva "skriven" ili ako u TextBox1 unesem raspon npr. od 58:66 da ti redovi iz raspona budu "sakriveni" !
Naravno druga Forma2 izgleda isto samo što ona radi Unhide onog ili onih redova koji budu uneseni u TextBox1 druge forme. Svakako ukoliko je ovo moguće kako sam ja zamislio. Ako nije izvinjavam se. Hvala unapred.
[ Jpeca @ 19.08.2016. 09:39 ] @
Za raspon nije problem upišeš kao što si naveo sa : i onda uzmeš text iz textboxa kao parametar za range
Range(TextBox1.Text).Rows.Hidden = True

Ako želiš da u istom textboxu upišeš više redova koje treba sakriti (razdvojeno zarezom) npr
"5:8, 11:11, 18:25"
Onda možeš koristiti Split za deljenje stringa na osnovu zareza i Union za spajanje više opsega (range)

Code:

Private Sub cmdOK_Click()
 Dim i As Integer
 Dim RowsToHide() As String
 Dim rng As Range
 RowsToHide = Split(Me.TextBox1.Text, ",")
 Set rng = ActiveSheet.Range(Trim(RowsToHide(0)))
 For i = 1 To UBound(RowsToHide)
    Set rng = Union(rng, ActiveSheet.Range(Trim(RowsToHide(i))))
 Next i
 rng.EntireRow.Hidden = True
End Sub


Obrati pažnju da za pojedinačne redove upisuješ kao opseg "11:11". Ako ti to ne odgovara možeš napraviti pomoćnu funkciju koja ako ne nađe ":" u stringu dodaje na kraju stringa ":" i prethodni string i tu funkciju pozivaš iza Trim
Tako da posle toga (vidi prilog) možeš uneti npr.
5:8, 11, 18:25


[Ovu poruku je menjao Jpeca dana 19.08.2016. u 11:11 GMT+1]
[ ivanivan94 @ 19.08.2016. 11:22 ] @
Veliko hvala Jpeca, radi baš kako sam hteo! Svaka čast!
E sad neželim biti navalentan ali još bih zamolio nešto a da ne otvaram novu temu, a to je kako da se u TextBox1 dozvoli unos samo određenih znakova ( 0-9, : ,) (brojevi od 0-9, dvotačka i zarez) i ništa više tj. ako pokušam sa tastaure uneti bilo koji drugi znak, ili slovo... da "izađe" MsgBox i "kaže da to nemože....". U VBA nisam se mnogo bavio pa nisam siguran baš kako bi to izgledalo, a npr. u C# to što mi treba otprilike izgleda npr.ovako.Hvala.:
Znači meni ovo treba U VBA !
Code:
private void textBox1_TextChanged(object sender, EventArgs e)
        {           
            if (System.Text.RegularExpressions.Regex.IsMatch(textBox1.Text, "  ^ [0-9] "))
            {
                textBox1.Text = "";
            }
            
        }

        private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            char keypress = e.KeyChar;
            if (char.IsDigit(keypress) || e.KeyChar == Convert.ToChar(Keys.Back))
            {

            }
            else
            {
                
                MsgBox.Show("U ovo text polje možete uneti samo to i to i to...!",
                   this.Text, MsgBox.Buttons.OK, MsgBox.Icon.Info);
                e.Handled = true;
            }
        }

[ jaskojsako @ 19.08.2016. 11:46 ] @
pozdrav
evo kod za samo brojeve

Code:
Private Sub TextBox1_Change()
  samobroj
End Sub

Private Sub samobroj()
    If TypeName(Me.ActiveControl) = "TextBox" Then
        With Me.ActiveControl
            If Not IsNumeric(.Value) And .Value <> vbNullString Then
                MsgBox "mogu samo brojevi"
                .Value = vbNullString
            End If
        End With
    End If

End Sub


http://www.ozgrid.com/VBA/validate-numbers.htm

ali mozes staviti i combox i unijeti podatke koje može combox povlaciti tj koje ti uneseš
poz

[Ovu poruku je menjao Jpeca dana 19.08.2016. u 15:52 GMT+1]

Ja se izvinjavam sto nisam stavio stranicu odakle je kod prenesen.

[Ovu poruku je menjao jaskojsako dana 19.08.2016. u 16:21 GMT+1]
[ ivanivan94 @ 22.08.2016. 21:19 ] @
Hvala puno jaskojsako, uspeo sam odraditi.

Imao bi samo još jedno pitanje pa ću pokušati ovako da neotvaram novu temu. Naime sve sam odradio i programče u Excelu radi kako treba. Međutim imam jedan mali problemčić. Program ima mogućnost da klikom na button sačuva radni list na određenu lokaciju (particija D), i sve je to u redu sem što ćelija u kojoj se upisuje suma bodova slovima (znači program ima Module - funkciju koja ukupnu sumu čita slovima...ono kao na fakturama).
Problem je u tome kada snimim radni list na particiju D, sve je OK sem što ćelija u kojoj je suma bodova upisana slovima na tom "izlaznom" fajlu se ne vidi tj stoji greška #Name?, što je i normalno jer u izlaznom dokumentu nema funkcije - Modula - slovima.
Pitanje je dali se u ovaj kod ispod za snimanje radnog lista može dodati da sačuva pomenuti Module (slovima), ili ima neki drugi način da se ova ćelija slovima prenese i na izlazni fajl (jer na "glavnom radnom listu programa sve radi odlično)?
Primer koda za snimanje radnog lista: ( Nadam se da ste me razumeli).Hvala...

Code:
Sub Snimanje()
Dim putanja As String, Folder As String
putanja = "D:\Izvestaji\"
Folder = Dir(putanja, vbDirectory)
If (Folder = "") Then MkDir (putanja)

Dim txtNaziv As String
Dim wbkSacuvati As Workbook

  txtNaziv = "C:\Izvestaji\" & Range("C4") & Range("C5") & ".xls"
   Set wbkSacuvati = Application.Workbooks.Add

ThisWorkbook.Sheets("Izvestaj").Copy Before:=wbkSacuvati.Sheets(1)
Application.DisplayAlerts = False

wbkSacuvati.Sheets(1).Shapes("CommandButton11").Delete
wbkSacuvati.Sheets(1).Shapes("CommandButton2").Delete
wbkSacuvati.Sheets(1).Shapes("CommandButton1").Delete
wbkSacuvati.Sheets(1).Shapes("CommandButton5").Delete
wbkSacuvati.Sheets(1).Shapes("CommandButton6").Delete
wbkSacuvati.Sheets(1).Shapes("CommandButton4").Delete
wbkSacuvati.Sheets(1).Shapes("CommandButton3").Delete
wbkSacuvati.Sheets(1).Range("K1:U6").Clear
wbkSacuvati.Sheets(1).Range("K1:W6").Interior.ColorIndex = 2
wbkSacuvati.Sheets(1).Range("K7").Select
wbkSacuvati.Sheets(1).Range("L:W").EntireColumn.Hidden = True

wbkSacuvati.SaveAs txtNaziv
wbkSacuvati.Close

End Sub


Code:
Private Sub CommandButton7_Click()
 Call Snimanje
 ActiveWorkbook.Save
End Sub

Znači ovo je slika na izlaznom dokumentu a na "glavnom" sve radi kako treba...
[ jaskojsako @ 22.08.2016. 22:02 ] @
pozdrav
nema na cemu i drugi put sta bude trebalo

sto se tice tvog pitanja
ako ti ne predstavlja nista izlazni format u kojem snimas svoj fajl evo ti kod za snimanje u PDF format
za tvoj primjer i snimat ce sve kako treba

Kod:

SaveAsStr = "D:\Izvestaji\" & "\" & ActiveSheet.Range("C4").Value & "-" & ActiveSheet.Range("C5").Value

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
Filename:=SaveAsStr & ".pdf", _
OpenAfterPublish:=False
[ ivanivan94 @ 22.08.2016. 22:36 ] @
Bilo bi to dobro ali radi se o Excel-u 2003(nisam naveo taj podatak izvinjavam se), pa je nemoguće snimiti u PDF (makar ja tako mislim), a mora biti u Excel 2003 tj Office 2003, znam da je "zastareo..." ali...U svakom slučaju još jednom hvala.

[Ovu poruku je menjao ivanivan94 dana 22.08.2016. u 23:54 GMT+1]
[ Jpeca @ 23.08.2016. 09:36 ] @
Ako treba da snimiš samo zbog arhive možeš da snimiš kao csv format.
Code:
Sub SnimanjeCSV()
Dim putanja As String, Folder As String

putanja = "T:\Izvestaji\"
Folder = Dir(putanja, vbDirectory)
If (Folder = "") Then MkDir (putanja)

Dim txtNaziv As String
txtNaziv = putanja & Range("C4") & Range("C5") & ".csv"

ThisWorkbook.Sheets("Izvestaj").SaveAs txtNaziv, FileFormat:=xlCSV

End Sub


U tom slučaju sve formule biće zamenjene vrednostima, ali će se izgubiti formatiranja. Takođe možeš da snimiš i u PDF formatu i u office 2003 ako imaš istaliran neki "PDF printer" http://www.elitesecurity.org/t478405-0#3474924

Na kraju, možeš da snimiš i u Excel formatu ako prilikom copy/paste zameniš formule sa vrednostima
Code:

ThisWorkbook.Sheets("Izvestaj").Cells.Copy
wbkSacuvati.Sheets(1).Range("A1").PasteSpecial Paste:=xlPasteFormats
wbkSacuvati.Sheets(1).Range("A1").PasteSpecial Paste:=xlPasteValues