PC Ekspert Forum

PC Ekspert Forum (http://forum.pcekspert.com/index.php)
-   Web dizajn, programiranje i ostalo (http://forum.pcekspert.com/forumdisplay.php?f=39)
-   -   Excel VBA (http://forum.pcekspert.com/showthread.php?t=291295)

dredger 05.03.2018. 07:54

Excel VBA
 
Imam jednu tablicu u Excel iz koje želim izvući podatke u drugi sheet.

Treba proći cijelu tablicu, naći određeni pojam (koji se ponavlja) i u odnosu na njegovu poziciju kopirati pet ćelija (offset nekoliko redova i kolona) u jedan red na novom sheetu.

Pokušao sam naći na netu neko slično rješenje ali kad ga krenem modificirati sve pokvarim. 🤔

Znam osnove programiranja ali ne puno o VBA.

Any idea?

Poslano sa mog EVA-L09 koristeći Tapatalk

Nikky 05.03.2018. 14:33

Nije to teško iskukićati, najveća gnjavaža je složiti search / pronalaženje "naći određeni pojam",
nekakvom kontrolom potvrditi da je TO ono šta se traži a onda ide copy u drugi sheet,
trebaš baš napisati rutinu, koristiti varijable, samim funkcijama u ćelijama je kompliciranije ...

mradovan 06.03.2018. 14:20

Priloži uzorak - ćemo pogledati

dredger 06.03.2018. 14:52

Pošaljem primjer kad dođem doma.

Znam da se to da lako srediti, samo treba znati. 😁
U principu jesam nešto napravio ali dobijem krive rezultate. 🤔

Poslano sa mog EVA-L09 koristeći Tapatalk

dredger 07.03.2018. 11:26

1 privitaka
Citiraj:

Autor mradovan (Post 3170734)
Priloži uzorak - ćemo pogledati

Evo u prilogu Excel file, na sheet 2 su podaci koje bi za svaku transakciju sa sheet 1 htio izvući.

mradovan 07.03.2018. 12:11

1 privitaka
Evo - u prilogu.
Provjeri si da li je napravilo kako treba, ja nisam.
Računa da su sva potrebna polja jednako udaljena od početka transakcije.

dredger 07.03.2018. 16:01

Citiraj:

Autor mradovan (Post 3171114)
Evo - u prilogu.
Provjeri si da li je napravilo kako treba, ja nisam.
Računa da su sva potrebna polja jednako udaljena od početka transakcije.

Ha, hvala, to je to! Sad izgleda jednostavno. :-)

mradovan 07.03.2018. 20:06

:goood:

dredger 09.03.2018. 20:45

Citiraj:

Autor mradovan (Post 3171377)
:goood:

Krenuo sam malo podešavati svoju proceduru i prvi zadatak bio je pretvoriti iznos rate (koji je u originalu string) u broj koristeći ovo:

Code:

s2.Cells(r2, 5) = Val(Left(s1.Cells(r1 + 6, 2), Len(s1.Cells(r1 + 6, 2)) - 4)) ' iznos rate
"Skoro" da radi dobro, međutim ne radi, zaokružuje mi originalni iznos na jedinice! :nono:
Zašto kroz formulu radi dobro a ovdje ne?

mradovan 09.03.2018. 21:18

Citiraj:

Autor dredger (Post 3172335)
"Skoro" da radi dobro, međutim ne radi, zaokružuje mi originalni iznos na jedinice! :nono:
Zašto kroz formulu radi dobro a ovdje ne?

Val radi samo sa točkom (kao u Americi), mi upotrebljavamo zarez...
Koristi radije CDbl umjesto Val, jer uzima u obzir regionalne postavke.

dredger 10.03.2018. 16:39

Citiraj:

Autor mradovan (Post 3172346)
Val radi samo sa točkom (kao u Americi), mi upotrebljavamo zarez...
Koristi radije CDbl umjesto Val, jer uzima u obzir regionalne postavke.

Thanks again! :chears:

stribor919 11.08.2020. 17:59

Da ne dizem novu temu, molim pomoc u vezi Excel makroa.
https://i.ibb.co/5GrTYmx/Excel-VBA.jpg
Macro treba na polje A1 (Ivan Ivic) ucitati sliku s hdd-a C:\slike\Ivan Ivic.jpg u comment (u novijem Excelu se zove Note) u velicini kao originalna slika, s dimenzijama commenta isto kao i slika.
Nakon toga se spusta jedno polje nize (A2) gdje pise Pero Peric i ucitava sliku C:\slike\Pero Peric.jpg itd., sve dok ne dodje do polja na kojem ne pise nista (A7) i tu staje.

Ukratko, zelim svakom polju u koloni A koje sadrzi ime i prezime dodati u comment pripadajucu sliku istog naziva iz mape C:\slike\, s tim da slika bude iste velicine kao original, a comment (Note) bude iste velicine kao slika.

Imam ovaj kod, samo sto moram rucno dodati sliku, slika nije iste velicine/omjera i nije ostra kao original (vjerojatno zato sto nije ista velicina).


Sub Pic()
'
' Pic Macro
'
With Application.FileDialog(msoFileDialogFilePicker)
.AllowMultiSelect = False 'Only one file
.InitialFileName = CurDir 'directory to open the window
.Filters.Clear 'Cancel the filter
.Filters.Add Description:="Images", Extensions:="*.jpg", Position:=1
.Title = "Choose image"

If .Show = -1 Then TheFile = .SelectedItems(1) Else TheFile = 0
End With
'No file selected
If TheFile = 0 Then
MsgBox ("No image selected")
Exit Sub
End If
Selection.ClearComments
Selection.AddComment
Selection.Comment.Visible = True
Selection.Comment.Shape.Fill.UserPicture TheFile
Selection.Comment.Shape.Select True
Selection.ShapeRange.ScaleWidth 1, msoFalse, msoScaleFromTopLeft
Selection.ShapeRange.ScaleHeight 1, msoFalse, msoScaleFromTopLeft
Selection.ShapeRange.LockAspectRatio = True
ActiveCell.Comment.Visible = True
End Sub


- Trebalo bi za svaku celiju sadrzaj kopirati u CLIPBOARD i onda ucitati sliku s lokacije C:\slike\CLIPBOARD.jpg u originalnoj velicini.
Hvala unaprijed

stribor919 22.08.2020. 14:43

Evo, rijesio sam problem 90%. Jedino ne mogu dobiti da mi je slika u originalnoj velicini pa sam automatski podesio sve slike, odredio dimenzije u excelu koje mi odgovaraju i to je to. Ako netko moze pomoci da ipak dobijem slike originalne velicine bio bih zahvalan.
Evo kod:

Sub PicFromCellNameColumnA()
Dim rngList As Range
Dim c As Range
Dim cmt As Comment
Dim strPic As String
On Error Resume Next
Range("A1").Select
Set rngList = Range(Selection, Selection.End(xlDown))
strPic = "C:\slike\"
For Each c In rngList
With c.Offset(0, 0)
Set cmt = c.Comment
If cmt Is Nothing Then
Set cmt = .AddComment
End If
With cmt
.Text Text:=""
.Shape.Fill.UserPicture strPic & c.Value & ".jpg"
.Shape.Select True
.Shape.width = 137
.Shape.height = 200
.Shape.LockAspectRatio = True
.Visible = False
End With
End With
Next c
End Sub

Roberto 07.09.2020. 13:06

krivi post :/

Slađa 13.09.2022. 13:31

Upadam ovdje s pitanjem da ne dizem novu temu:
Trebam pomoc oko oznacavanja checkboxeva na nekom sheetu. Vba kod koji imam mi oznaci sve checkboxeve na tom sheetu, a meni treba odredjeni broj ovisno o vrijednosti u jednoj celiji. Npr. U celiji B2 je vrijednost 15 i trebao bi mi oznaciti samo prvih 15 checkboxeva na tom sheetu, a ne sve. Ima netko ideju? Hvala

Ivo_Strojnica 13.09.2022. 13:40

pa obični counter napraviš i ideš po redu:
Sad je samo pitanje da li ideš A1, A2, A3.....B1,B2,B3 ili A1, B1, C1.....

mradovan 13.09.2022. 13:55

Citiraj:

Autor Slađa (Post 3623608)
Upadam ovdje s pitanjem da ne dizem novu temu:
Trebam pomoc oko oznacavanja checkboxeva na nekom sheetu. Vba kod koji imam mi oznaci sve checkboxeve na tom sheetu, a meni treba odredjeni broj ovisno o vrijednosti u jednoj celiji. Npr. U celiji B2 je vrijednost 15 i trebao bi mi oznaciti samo prvih 15 checkboxeva na tom sheetu, a ne sve. Ima netko ideju? Hvala

Priloži uzorak - ćemo pogledati

Slađa 13.09.2022. 15:25

Znaci, imam nekih 300 checkboxeva u excelu. Kod svake neke analize, moram poklikati drugi broj checkboxeva. Za pocetak sam napravila jedan checkbox koji ih oznaci sve da ne moram klikati 300 puta ako je za tu analizu potreban broj 300.
I to mi radi ako treba oznaciti sve.
Medutim, dogodi se da sljedeci put moram kliknuti samo prvih 30, a ostalih 270 ne.
Koliko ih moram kliknuti, govori mi vrijednost u celiji E16.

Moj kod je bio :

Sub SelectAll Click()
Dim xCheckBox As CheckBox

For Each xCheckBox In Application.ActiveSheet.CheckBoxes
If xCheckBox.Name <> Application.ActiveSheet.CheckBoxes (“Check Box 471”.Name Then
xCheckBox.Vakue= Application.ActiveSheet.CheckBoxes (Check Box 481”). Value
End If
Next
End Sub

Mislila sam da moram uglaviti funkciji for i=1 To Range (“E16”)
Samo kako nisam strucnjak u tome… ne znam kako da uglavim da kad kliknem na celiju Select All, da ih oznaci samo onoliko kolika je vrijednost u celiji E16, npr 15.

mradovan 13.09.2022. 16:14

Citiraj:

Autor Slađa (Post 3623669)
Znaci, imam nekih 300 checkboxeva u excelu. Kod svake neke analize, moram poklikati drugi broj checkboxeva. Za pocetak sam napravila jedan checkbox koji ih oznaci sve da ne moram klikati 300 puta ako je za tu analizu potreban broj 300.
I to mi radi ako treba oznaciti sve.
Medutim, dogodi se da sljedeci put moram kliknuti samo prvih 30, a ostalih 270 ne.
Koliko ih moram kliknuti, govori mi vrijednost u celiji E16.

Moj kod je bio :

Sub SelectAll Click()
Dim xCheckBox As CheckBox

For Each xCheckBox In Application.ActiveSheet.CheckBoxes
If xCheckBox.Name <> Application.ActiveSheet.CheckBoxes (“Check Box 471”.Name Then
xCheckBox.Vakue= Application.ActiveSheet.CheckBoxes (Check Box 481”). Value
End If
Next
End Sub

Mislila sam da moram uglaviti funkciji for i=1 To Range (“E16”)
Samo kako nisam strucnjak u tome… ne znam kako da uglavim da kad kliknem na celiju Select All, da ih oznaci samo onoliko kolika je vrijednost u celiji E16, npr 15.

Ako ne znaš kako se Check Boxes zovu, možeš na relativno neelegantan ali jednostavan način ubaciti counter koji prestaje označavati Check Boxove kad vrijednost pređe onu specificiranu u E16.

Code:

Sub SelectSome Click()
  Dim xCheckBox As CheckBox

  Dim i as Integer
  i = 0

  For Each xCheckBox In Application.ActiveSheet.CheckBoxes
    If (i < Range("E16").Value) Then
      xCheckBox.Value = True                       
    End If
    i = i + 1
  Next
End Sub


mradovan 13.09.2022. 16:17

Citiraj:

Autor Slađa (Post 3623669)
Znaci, imam nekih 300 checkboxeva u excelu. Kod svake neke analize, moram poklikati drugi broj checkboxeva. Za pocetak sam napravila jedan checkbox koji ih oznaci sve da ne moram klikati 300 puta ako je za tu analizu potreban broj 300.
I to mi radi ako treba oznaciti sve.
Medutim, dogodi se da sljedeci put moram kliknuti samo prvih 30, a ostalih 270 ne.
Koliko ih moram kliknuti, govori mi vrijednost u celiji E16.

Moj kod je bio :

Sub SelectAll Click()
Dim xCheckBox As CheckBox

For Each xCheckBox In Application.ActiveSheet.CheckBoxes
If xCheckBox.Name <> Application.ActiveSheet.CheckBoxes (“Check Box 471”.Name Then
xCheckBox.Vakue= Application.ActiveSheet.CheckBoxes (Check Box 481”). Value
End If
Next
End Sub

Mislila sam da moram uglaviti funkciji for i=1 To Range (“E16”)
Samo kako nisam strucnjak u tome… ne znam kako da uglavim da kad kliknem na celiju Select All, da ih oznaci samo onoliko kolika je vrijednost u celiji E16, npr 15.

A ako znaš kako se zovu, onda možeš for/next petlju po imenu:

Code:

Private Sub selectSome_Click()
  Dim i As Integer

  Application.ActiveSheet.CheckBoxes.Value = False

  For i = 1 To Range("E16").Value
    Application.ActiveSheet.CheckBoxes("Check Box " & i).Value = True
  Next i

End Sub


Slađa 14.09.2022. 10:33

Super, hvala, radi mi ovaj gornji prvi kod gdje nisam navela kako se Checkboxevi zovu. HVala!
Sad jedino mi jos fali ako ih sve oznaci na tom jednom Checkboxu da ih drugim klikom i odznaci. Znaci,jednim checkboxom ih mogu oznaciti (to sad radi ovim kodom) i odznaciti.

mradovan 14.09.2022. 14:45

Citiraj:

Autor Slađa (Post 3623883)
Super, hvala, radi mi ovaj gornji prvi kod gdje nisam navela kako se Checkboxevi zovu. HVala!
Sad jedino mi jos fali ako ih sve oznaci na tom jednom Checkboxu da ih drugim klikom i odznaci. Znaci,jednim checkboxom ih mogu oznaciti (to sad radi ovim kodom) i odznaciti.

Ako sam dobro razumio, to možeš postići pomoću statične varijable:

Code:

Private Sub selectSome_Click()

  Dim xCheckBox As CheckBox

  Dim i As Integer
  i = 0
 
  Static switch As Boolean
  switch = Not switch

  Application.ActiveSheet.CheckBoxes.Value = False

  If (switch) Then
    For Each xCheckBox In Application.ActiveSheet.CheckBoxes
      If (i < Range("E16").Value) Then
        xCheckBox.Value = True
      End If
      i = i + 1
    Next
  End If
 
End Sub


Slađa 15.09.2022. 12:21

Hvala vam puno!
Radi

mradovan 15.09.2022. 12:50

:goood:


Sva vremena su GMT +2. Sada je 10:18.

Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
© 1999-2023 PC Ekspert - Sva prava pridržana ISSN 1334-2940
Ad Management by RedTyger