Keresés

Részletes keresés

SQLkerdes Creative Commons License 2011.07.21 0 0 15518

http://chandoo.org/wp/2011/07/20/interactive-dashboard-using-hyperlinks/

 

Na, ezek azok amitől leteszem a hajamat:

 

"Do you know that you can use a UDF as source for hyperlink.

Just like we can write =HYPERLINK(“http://chandoo.org/”,”Click here”)
we can also write =HYPERLINK(myFunction(),”Click here”)

And Excel would run your function when user clicks on the link.
But, there is more to it.
Excel would also run the function, when you place your mouse on the link. No need to click!"

 

"But, seasoned VBA programmers would know that Functions are not allowed to change values in other cells or format them. Well, that restriction does not apply if you use a function from Hyperlink!!!"

 

Most komolyan, ezeket a trükköket ki találja meg?

Ilyenkor jövök rá, hogy van okom szerénynek lenni excel témakörben...

 

Sznida Creative Commons License 2011.07.21 0 0 15517

Szia,

 

Azt a legördülős részt nem értem, de az oszlopra így tudod korlátozni a makrót:

 

Private Sub Worksheet_Change(ByVal Target As Range)
Dim OldVal As Variant, NewVal As Variant
If Not Intersect(Target, Range("F:F,L:L")) Is Nothing Then
    If Target.Count > 1 Then Exit Sub
    Application.EnableEvents = False
    NewVal = Target.Value
    Application.Undo
    OldVal = Target.Value
    If IsNumeric(OldVal) And IsNumeric(NewVal) Then
        Target.Value = NewVal + OldVal
    End If
    Application.EnableEvents = True
End If
End Sub

 

Van még egy hátránya ennek a makrónak, hogy egy cella értékét nem tudsz törölni, csak ha tartományt jelölsz ki. Ez nem tudom jó-e vagy rossz, lehet Neked éppen így jó!

 

Üdv: Sznido

Előzmény: Xooo (15512)
wawabagus Creative Commons License 2011.07.21 0 0 15516

Szia Jimmy,

Köszi!!

Hát majdnem ezt, de végül ez lett:

TransferSpreadsheet, itt klasszul lehet tovább részletezni, hogy hova mentse pontosan.

Tökjó, persze mindig jönnek újabb kihivások...

 

Pl miért tűnnek el a nulla értékek, amik még megvannak a kereszttáblában, de ha már egy táblát csinálok belőle ugyenbből a kersezttáblából, akkor már csak üres cellát ad...

 

Apró bosszúságok, amit idegesítőek :-DDD

 

:-)

Előzmény: Törölt nick (15499)
tt65 Creative Commons License 2011.07.21 0 0 15515

aha. akkor nekem se

Előzmény: Gavriel (15513)
Törölt nick Creative Commons License 2011.07.21 0 0 15514

Nekem nem fogja meg.

Előzmény: Gavriel (15508)
Xooo Creative Commons License 2011.07.21 0 0 15512

Sziasztok !

 

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim OldVal As Variant, NewVal As Variant
  If Target.Count > 1 Then Exit Sub
   Application.EnableEvents = False
    NewVal = Target.Value
    Application.Undo
    OldVal = Target.Value
     If IsNumeric(OldVal) And IsNumeric(NewVal) Then
       Target.Value = NewVal + OldVal
    End If
  Application.EnableEvents = True
End Sub

 

Az előző kérdésemhez találtam ezt a makrót, ami tökéletesen megfelel a célra amit írtam. Ha bármelyik aktív cellába beírok egy számot hozzáadja a cella aktuális étékéhez. Tehát ha a cella 2, én beírok 3-at akkor 5-öt mutat. Egy gondom van vele, hogy a táblázatom felső sorában van legördülő lista, stb ami ezzel a makróval nem működik. Lehet valahogy csak az F és az L oszlopra megadni neki egy range-t....

 

Köszönöm szépen ! :)

tt65 Creative Commons License 2011.07.21 0 0 15511

a vízszintes elválasztó valamit, ami megosztja a táblázatot.

sajna képet most nem tudok beszúrni, ami megmutatná mire gondoltam

Előzmény: Gavriel (15510)
tt65 Creative Commons License 2011.07.21 0 0 15509

a sort húzd le az ablak aljáig is 'voila eltűnik!

Előzmény: Gavriel (15508)
Törölt nick Creative Commons License 2011.07.21 0 0 15507

Jelölj ki egy oszlopot, és utána rögzítsd az ablakot.

Előzmény: Gavriel (15506)
Törölt nick Creative Commons License 2011.07.21 0 0 15505

Igen, attól függ, hogy mi az aktív cella a FreezePanes parancs kiadásakor.

Ha pl. E11, akkor 1-10. sorok ill. A-D oszlopok rögzítettek.

Előzmény: Gavriel (15503)
Xooo Creative Commons License 2011.07.21 0 0 15504

Sziasztok !

 

Az alábbi dologban szeretném a segítségeteket kérni:

 

Adott pl A1, B1, C1 cella

 

A1-be írok több számot, ami C1-ben összegződne úgy, hogy B1-ben mindig megjelenne mi volt az utolsó szám amit A1-be írtam, egyfajta önellenőrzés céljául. Az A1-be írt szám nem kellene hogy ott maradjon, hasonlóan működne mint egy számológép. Ez egy havi összesítő táblázatomhoz kellene de nem jövök rá hogyan lehetne megoldani. Nyilván ennél bonyolultabb a dolog, ez csak egy szegmense az egész táblázatnak.

 

Köszönöm a segítséget / ötleteket !

 

Üdv mindenkinek.

Törölt nick Creative Commons License 2011.07.21 0 0 15502

"Szóval másik workbook munkalapjára így már nem tudsz hivatkozni..."

 

... csak kerülő úton:

 

Dim wb As Workbook, ws As Worksheet

Set wb = Workbooks("Másik workbook.xls")

Set ws = wb.Sheets(wb.VBProject.VBComponents("Sheet2 kódnév").Properties("Name").Value)

Előzmény: SQLkerdes (15501)
SQLkerdes Creative Commons License 2011.07.20 0 0 15501

A Sheet2 az adott munkalap kódneve, ami nem változik bárhanyadik lesz is a munkalap a workbookon belül illetve bármire is változtatják a nevét.

Szerintem hasznos dolog ezt használni, egyetlen általam ismert korlátozása van:  csak a makrót tartalmazó workbookon belül működik.  Szóval másik workbook munkalapjára így már nem tudsz hivatkozni.

Előzmény: wawabagus (15489)
wawabagus Creative Commons License 2011.07.20 0 0 15500

Szia Jimmy,

Hááát, lehet hogy erre.

Kipróbálom...

Köszi szépen!!

Y

Előzmény: Törölt nick (15499)
Törölt nick Creative Commons License 2011.07.20 0 0 15499

Van itt ez a módszer:

DoCmd.OutputTo acOutputQuery, "query neve", acFormatXLS, "D:\teszt.xls", True

 

Erre gondoltál?

Előzmény: wawabagus (15498)
wawabagus Creative Commons License 2011.07.20 0 0 15498

Sziasztok!

Ért esetleg valaki Access quiery exportálásához konkrét excel templétbe VBA segitségével?

 

Tehát pl. lefut XY quiery amit a macro kiexportál a TEMPLÉT-be pl b4-es cellába mint value...

Nehéz ügy ez?

 

Köszi a segtséget!

Sznida Creative Commons License 2011.07.20 0 0 15497

Köszönöm az infókat, Neked is Jimmy!

Megfontolom, s így fogok tenni.

Jimmy, ezt kipróbáltam, s működik védett módban is lefut a kód!

 

Köszönöm még egyszer!

 

Üdv: Sznido

Előzmény: Gavriel (15496)
Törölt nick Creative Commons License 2011.07.20 0 0 15495

Sajnálom, ebben a kérdésben nem tudok segíteni.

Utánakerestem én is, és egybehangzóan állítják mindenütt, hogy a VBA project védelme kódból nem érhető el, nem módosítható. Amit belinkeltél, az a SendKeys művelettel operál, ami tulajdonképpen, szimulálni próbálja a billentyűleütéseket, mintha manuálisan csinálnád a védelem beállítását. A SendKeys nagyon megbízhatatlan dolog, aki szakértőket én ismerek, mindenki fújol rá. Bármi történhet a billentyűkódok elküldése közben, ami megváltoztatja az aktív ablakot, vagy ilyesmi, és máris hibás eredményt kapsz. Vagy pl. ha az első x darab billentyűkód feldolgozásához kell egy kis idő, mielőtt következőt is fogadni tudja az alkalmazás, a SendKeys meg nyomatja a kódokat rendületlenül...

 

Szóval a SendKeys semmiképpen nem ajánlott olyan kényes műveletek elvégzésére, mint pl. egy jelszó beállítása. Ha valami hiba csúszik a műveletbe, megeshet, hogy ott állsz egy levédett projekttel, és nem tudod a jelszót.

 

A másik dolog, hogy úgy hírlik, egyes makrók nem is futnak le, ha a VBA projekt le van védve.

 

Sznida Creative Commons License 2011.07.19 0 0 15494

Bámulatos!!!

Köszönöm szépen!!!! Nagyon jó, nem is gondoltam volna, hogy ezt így meg lehet csinálni!

 

Van még egy kérdés, hogyan lehet ezek a file-ok VB project-jeit védeni, tehát programozni akarom a:

Look project for viewing = True

Password="teszt"

 

Ezt találtam a google-ban:

http://www.mrexcel.com/archive/VBA/29825.html

 

Lefut szépen, de nem történik meg a védelem beállítása, lehet nem is csinálja?

 

Köszönettel: Sznido

Előzmény: Törölt nick (15490)
Delila10 Creative Commons License 2011.07.19 0 0 15493

Nincs mit.

 

Szia

Delila

Előzmény: wawabagus (15492)
wawabagus Creative Commons License 2011.07.19 0 0 15492

Köszi szépen a segítséget Delila10 :-)!!!

 

Előzmény: Delila10 (15491)
Delila10 Creative Commons License 2011.07.19 0 0 15491

Nem figyeltem fel a With-es sorodra,  nálam kiakadt.

 

A mindenkori 2. lapra történő hivakozás Sheets(2).

Előzmény: wawabagus (15489)
Törölt nick Creative Commons License 2011.07.19 0 0 15490

Sub teszt()
    Dim FPath As String, FName As String
    Dim wb As Workbook, LineCount As Long
    Dim WBModule As VBIDE.CodeModule
    
    FPath = "D:\"
    FName = Dir(FPath & "\*.xls", vbNormal)
    While Not FName = ""
        Set wb = Workbooks.Open(FPath & "" & FName)
        Set WBModule = wb.VBProject.VBComponents("ThisWorkbook").CodeModule
        With WBModule
            LineCount = .CountOfLines + 1
            .InsertLines LineCount, "Private Sub Workbook_BeforePrint(Cancel As Boolean)"
            LineCount = LineCount + 1
            .InsertLines LineCount, "    Cancel = True"
            LineCount = LineCount + 1
            .InsertLines LineCount, "    MsgBox (""Nem nyomtatható dokumentum!"")"
            LineCount = LineCount + 1
            .InsertLines LineCount, "End Sub"
        End With
        wb.Close savechanges:=True
        FName = Dir()
    Wend  
End Sub

Pár dolog kiegészítésképpen:

1. A "kezelendő" fájlokat gyűjtsd egy mappába, és azt a mappát add meg FPath változó értékeként.

2. A Tools->References menüben kapcsold be a hivatkozást a Microsoft Visual Basic for Applications Extensibility komponensre.

3. Az Excel Eszközök->Beállítások->Biztonság->Makróvédelem->Megbízható közzétevők lapon tedd be a pipát a "Visual Basic Projekthez való hozzáférés megbízható" beállítás elé.

 

 

Előzmény: Sznida (15485)
wawabagus Creative Commons License 2011.07.19 0 0 15489

:-). értem. De működik a sima With Sheet2 is :-)...

 

Én ezt úgy értelmeztem, hogy ez abból a szempontból jó, hogy a mindenkori Sheet2-t fogja venni, még ha nem is ez a neve...

 

Ilyet kategórikusan nem szabad csinálni?

 

:-)

 

 

Előzmény: Delila10 (15488)
Delila10 Creative Commons License 2011.07.19 0 0 15488

Mert ez a helyes szintaktika, így kell hivatkozni egy lapra. :-)

A With Sheet2-nél hibát jelez. Azt hiszem, változónak értelmezi a Sheet2-t.

 

Az előző hsz-ban With Sheets2-t írtam véletlenül.

Előzmény: wawabagus (15487)
wawabagus Creative Commons License 2011.07.19 0 0 15487

Szia!

Nagyon köszönöm a segítséget. Közben már elkezdett működni a macro :-), de kijavítottam a YEAR-t Period-ra...remélem azt szabad használni.

 

Miért kell így írni?

"A With Sheets2 helyett With Sheets("Sheet2")-t írj."

 

 

Előzmény: Delila10 (15486)
Delila10 Creative Commons License 2011.07.19 0 0 15486

A Year VB-s kulcsszó, nem szabad ilyen nevet adni egy változónak. Legyen pl. Yearr - mert múlt idő :)

 

BusinessType = ThisWorkbook.Names("business").RefersTo

sor értéke "=Sheets1!$J$1" (ha ennek a cellának adtad a business nevet).

 

Az értékadásnál le kell venned a kezdő = jelet. Az értékadó sor ezután

BusinessType = Range(Right(ThisWorkbook.Names("business").RefersTo, Len(ThisWorkbook.Names("business").RefersTo) - 1))

 

A With Sheets2 helyett With Sheets("Sheet2")-t írj.

 

Etekkel a változtatásokkal működik, kipróbáltam.

Előzmény: wawabagus (15484)
Sznida Creative Commons License 2011.07.19 0 0 15485

Sziasztok,

 

Ismét van egy kérdésem:

Van nagyon sok excel file-om (kb. 500 db), ezeket kell megnyitnom, és minden egyes file VBA-ja belemásolni a következő kódot:

 

Private Sub Workbook_BeforePrint(Cancel As Boolean)
Cancel = True
MsgBox ("Nem nyomtatható dokumentum!")
End Sub

 

Az a kérdés, hogy hogyan lehet ezt egyszerűen megcsinálni, hogy ne kelljen manuálisan egyesével megnyitni a file-t, aztán VBA felület, This workbook, ctrl+v, ... stb.

 

Ötleteiteket előre is köszönöm!

 

Üdv: Sznido

wawabagus Creative Commons License 2011.07.19 0 0 15484

Sziasztok!

A munkafüzetben definiált namerange-et szeretnék használni VBA-ban.

Pl. B2 = "year" name range

Aztán a VBA-ban erre a name rangere szeretnék hivatkozni.

Így próbálkoztam vele. Van ennek így értelme?

Köszi a segítséget :-)!!!

 

 

-------

Dim Year As Variant
Dim BusinessType As Variant
Dim Country As Variant

Year = ThisWorkbook.Names("year").RefersTo
BusinessType = ThisWorkbook.Names("business").RefersTo
Country = ThisWorkbook.Names("country").RefersTo

With Sheet2
            .AutoFilterMode = False
                With .Range("A1:G1")
                     .AutoFilter
                     .AutoFilter Field:=1, Criteria1:= Country
                     .AutoFilter Field:=6, Criteria1:= BusinessType
                     .AutoFilter Field:=7, Criteria1:= Year
                End With
    End With
    
With Sheet3
            .AutoFilterMode = False
                With .Range("A3:E3")
                     .AutoFilter
                     .AutoFilter Field:=1, Criteria1:= Country
                     .AutoFilter Field:=4, Criteria1:= BusinessType
                End With
End With
End Sub

pimre Creative Commons License 2011.07.18 0 0 15483

Kösz, most már étem. Ld: #15482.

Előzmény: Sznida (15481)

Ha kedveled azért, ha nem azért nyomj egy lájkot a Fórumért!