A Microsoft Excel topic célja segítséget kérni és nyújtani Excellel kapcsolatos problémákra.
Kérdés felvetése előtt olvasd el, ha még nem tetted.
Gyorskeresés
Legfrissebb anyagok
- Bemutató Route 66 Chicagotól Los Angelesig 2. rész
- Helyszíni riport Alfa Giulia Q-val a Balaton Park Circiut-en
- Bemutató A használt VGA piac kincsei - Július I
- Bemutató Bakancslista: Route 66 Chicagotól Los Angelesig
- Tudástár AMD Radeon undervolt/overclock
Általános témák
LOGOUT.hu témák
- [Re:] eBay-es kütyük kis pénzért
- [Re:] [Luck Dragon:] Asszociációs játék. :)
- [Re:] [D1Rect:] Nagy "hülyétkapokazapróktól" topik
- [Re:] [attilasd:] A laposföld elmebaj: Vissza a jövőbe!
- [Re:] [antikomcsi:] Való Világ: A piszkos 12 - VV12 - Való Világ 12
- [Re:] [sziku69:] Fűzzük össze a szavakat :)
- [Re:] [Sub-ZeRo:] Euro Truck Simulator 2 & American Truck Simulator 1 (esetleg 2 majd, ha lesz) :)
- [Re:] [koxx:] Bloons TD5 - Tower Defense játék
- [Re:] [ldave:] New Game Blitz - 2024
- [Re:] [gban:] Ingyen kellene, de tegnapra
Szakmai témák
PROHARDVER! témák
Mobilarena témák
IT café témák
Téma összefoglaló
- Utoljára frissítve: 2023-11-13 08:31:56
LOGOUT.hu
Hozzászólások
"Fel lehet valahogy használni egy funkción belüli változót a főmakróban?"
Nem. Bővebben.
Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
Czmorek
aktív tag
Így Lett jó:
=HA(D35-H45<0;" ";D35-H45)
Most ha negatívban lennénk akkor üres a mező.
Azt be tudjuk állítani, hogy 0,0 legyen ott?
Fferi50
őstag
Szia!
Megfelelő kódfelépítéssel igen, de nem kifejezetten ajánlatos. A példát látod a képen:
Itt egy modulban van a függvény és a főprogram.
Ahhoz, hogy egy függvényben számolt változó értéket kapjon, a változót publikusnak kell definálni a modul elején, eljáráson kívül, majd meg kell hívni hozzá a függvényt, ezt látod a sárgával jelölt sorban.
Üdv.
Fferi50
őstag
Szia!
Téves az az információd, hogy a modul elején publikusnak definiált változót csak az a modul tudja használni, amelyben definiálták. Mivel publikus, így valamennyi eljárás hozzá tud férni, ehhez meg kell adni a teljes nevét, ami Modulnév.Változónév forma és így bármilyen másik modul is tudja használni, sőt a globális modulok, amelyek nem egy-egy objektumhoz (munkalap, userform stb.) kapcsolódnak, a Modulnév nélküli változót is tudják használni.
Amire te gondolsz az a modul elején DIM utasítással létrehozott modulszintű változó. Az valóban csak az adott modulban használható.
Üdv.
Amit itt a képeden bemutatsz, azt raktam ki én is képben (Public deklaráció (meg még mást is))... Persze, hogy úgy már lehet vele dolgozni bárhonnan
"Téves az az információd, hogy a modul elején publikusnak definiált változót csak az a modul tudja használni, amelyben definiálták. Mivel publikus,... "
Ööö a MyGlobalVariable_2 az Private deklaráció(tehát NEM Publikus, szvsz ezen átsiklottál ), ergó sem más modulból, sem woorksheet kódból nem lehet elérni, csak abból a modulból, ahol deklarálva van (Én erről írtam, azt, amit, nem a publikus változóról)...
Modulnév.változónév formában sem (szerkesztő el fogja fogadni, engedi beírni, nem nyaffog miatta, de ha futtatni próbálod a makrót, akkor jön a hiba
[ Szerkesztve ]
Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
Czmorek
aktív tag
Köszönöm!
Megoldottam a maradékot.
Fferi50
őstag
Szia!
Lehet, hogy félreértettem valamit.
Volt egy ilyen mondatod: A modulban deklarált ugyanilyen nevű változó, csak a modulban található kódok számára látható.
Üdv.
Igen, azt értetted félre, amit most leírtál...
A Module1-ben Private-ként deklarált MyGlobalVariable_2 változóhoz, csak a Module1-ben található funkciók/eljárások férnek hozzá, Module1-en kívüli kódok (bárhol is legyenek) meg nem.
Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
Hello srácok!
Van nekem egy szép nagy táblázatom, sok oszloppal és sorral, benne sok képlettel.
Milyen módon tudnám egyszerűbben ellenőrizni, hogy valamely oszlopban van-e esetleg #HIÁNYZIK képlethiba, a szűrős egyesével lenyitogatós és legalulra tekergetés helyett?
Köszi előre is a segítséget!
lappy
őstag
Bámulatos hol tart már a tudomány!
(#47911) Fire/SOUL/CD válasza NdrewSunix (#47909) üzenetére
HAHIÁNYZIK függvény.
Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
Ez magyarul hogy néz ki? =MIN(IF(ISERROR(A1:Z100),ROW(A1:A100)))
#47911Fire/SOUL/CDNdrewSunix
Nekem úgy kellene igazából, hogy egy cellába írja be, hogy talált #HIÁNYZIK eredményt egy adott tartományban.
Ennél a hahiányziknál az összes cellát eredményül adta egy újabb óriási táblázatban.
(#47913) Fire/SOUL/CD válasza NdrewSunix (#47912) üzenetére
Ja, hogy ja...
Megszámolod, hogy az adott tartományban hány cella tartalmaz #HIÁNYZIK hibát, nyilván ha 0, akkor nincs egy sem a tartományban, ha meg nagyobb mint 0, akkor meg van.
=HA(DARABTELI(B1:B5;HIÁNYZIK());"Van hiba";"Nincs hiba")
[ Szerkesztve ]
Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
(#47914) NdrewSunix válasza Fire/SOUL/CD (#47913) üzenetére
Köszönöm, ez így megfelelő lesz nekem!
eszgé100
őstag
1.) pontosan, ott nem kell bezárni a fájlt, mert még a ciklus későbbi lépéseiben még szükség lesz rájuk, pl amikor egy workbookban van 20 worksheet, de nem egyszerre ömlesztve akarom őket kinyomtatni, mert utána akkor még kézzel is le kell válogatnom később, amit nem szeretnék. A Save&Close oszlop celláinak értéke az =IF(COUNTIF(D2:INDIRECT("D" & COUNTIF(D,"<>")),D2)>1,"no","yes") függvénnyel van meghatározva, ami eddigi tesztjeim alapján dinamikusan változik, amikor ugyanaz az elérési útvonal kerül a Path oszlop celláiba. Amennyiben az adott elérési útvonal nem ismétlődik többet a maradék cellatartományban az érték Save&Close "yes"-re változik és a workbook ment és bezárul
2a.) mi pontosan a hátránya, hogyha GoTo-val ugrálok?
2b.) Másik ezzel kapcsolatban, hogy a Mod funkció működését nem teljesen értem, legalábbis az én esetemben. Pl ha "6 monthly"-t keresem, akkor azokat a hónapokat keresem, amelyeket 6-al oszthatóak maradék 1-el? Ez január és július esetében (1/6= 0 maradék 1) és (7/6=1 maradék 1), "yearly" pedig (1/12=0 maradék 1)?
2c.) címkéket megszűntettem if - end if-eket használva
3.) hibakezelés, pl valami létfontosságú cella nincs kitöltve. Szűrést pedig úgy értem, hogy kézzel leszűröm az adatokat, majd arra eresztem rá a makrót, hiba a Save&Close-nál van, mert olyankor is a maradék tartományt figyeli, mikor az egyébként a szűrés miatt nem látszik.
+ A kódhoz hozzáadtam egy response-t, ami a user arcába tolja, hogy a makró milyen nyomtatókat fog használni, mindkettőt le kell okézni, csak így kerül az ellenörző cellába, ahonnan a makró majd használja. Ha valamelyik cella üres, akkor a kód megáll, és informálja a usert. Ezen kívül még hozzáadtam egy manual update oszlopot is az adattáblán, alapból ki van kapcsolva, de ha "yes" az értéke, akkor csak megnyitja a workbookot, majd megy tovább a ciklus, valamint egy néhány sort, hogy szűrést és manual update-et alaphelyzetbe állítsa miután a fájl megnyílik.
így néznek ki:
Sub Auto_Open()
Dim start As Date
Dim weekcom As Date
Dim today As Date
Dim response As VbMsgBoxResult
Dim lo As ListObject
Dim ws As Worksheet, ma As Worksheet
Dim lastrow As Long
Set lo = Worksheets("OpenClose").ListObjects(1)
lo.AutoFilter.ShowAllData
Set ma = Workbooks("FillerPrinter.xlsm").Worksheets("MainAssembly")
'ma.Unprotect "123"
Set ws = Workbooks("FillerPrinter.xlsm").Worksheets("OpenClose")
lastrow = ws.Range("A" & ws.Rows.Count).End(xlUp).Row
ws.Range("P2:P" & lastrow) = "no"
Worksheets("MainAssembly").Activate
Range("A1").Select
start = Sheets("MainAssembly").Range("F3").Value
today = Sheets("MainAssembly").Range("F7").Value
weekcom = start
Do While weekcom < today
weekcom = weekcom + 28
Loop
Sheets("MainAssembly").Range("F6").Value = weekcom
Dim Printers() As String
Dim N As Long
Dim S As String
Dim col As String
Dim bw As String
Printers = GetPrinterFullNames()
Sheets("MainAssembly").Range("F8:F9").Value = ""
For N = LBound(Printers) To UBound(Printers)
S = Printers(N) 'S & Printers(N) & vbNewLine
If InStr(S, "Microsoft") <> 0 And InStr(S, "Print") <> 0 Then col = S
If InStr(S, "HP Photosmart Wireless B109n-z") <> 0 And InStr(S, "Print") = 0 Then bw = S
Next N
response = MsgBox(col, vbOKCancel, "Confirm the Colour Printer")
If response = vbOK Then
Sheets("MainAssembly").Range("F8").Value = col
Else: MsgBox "Stop-Call-Wait", vbOKOnly
Exit Sub
End If
response = MsgBox(bw, vbOKCancel, "Confirm the B&W Printer")
If response = vbOK Then
Sheets("MainAssembly").Range("F9").Value = bw
Else: MsgBox "Stop-Call-Wait", vbOKOnly
Exit Sub
End If
'ma.Protect "123"
End Sub
Sub EOM_Main_Assy_Workbooks()
'loop:
Dim sPath As String, ssheet As String, fileName As String
Dim lastrow As Long, counter As Long
Dim ws As Worksheet, tp As Worksheet, ma As Worksheet
'print:
Dim bw As String, col As String
Dim toprint As Boolean
'from main worksheet:
Dim sDate As String
Dim sWeek As String
Dim sWkcom As String
Dim nextmonth As Date
'from Table:
Dim freq As String
Dim area As String
Dim loc As String
Dim dat As String
Dim week As String
Dim wkcom As String
Dim procloc As String
Dim procname As String
Dim machloc As String
Dim machname As String
Dim printer As String
Dim copies As Integer
Dim saveandclose As String
Dim manual As String
Dim manualcheck As Boolean
sDate = "=[FillerPrinter.xlsm]MainAssembly!$F$4"
sWeek = "=[FillerPrinter.xlsm]MainAssembly!$F$5"
sWkcom = "=[FillerPrinter.xlsm]MainAssembly!$F$6"
Set ma = Workbooks("FillerPrinter.xlsm").Worksheets("MainAssembly")
nextmonth = ma.Range("F4")
col = ma.Range("F9")
bw = ma.Range("F9")
'1st condition
If ma.Range("F8") = "" Or ma.Range("F9") = "" Then
MsgBox prompt:="One or both printers are not selected." & VBA.Constants.vbNewLine & "Please click on Update / Reset button!" & VBA.Constants.vbNewLine & "If not sure, please S-C-W!"
Exit Sub
End If
'End of 1st condition
Set ws = Workbooks("FillerPrinter.xlsm").Worksheets("OpenClose")
lastrow = ws.Range("A" & ws.Rows.Count).End(xlUp).Row
counter = 2
manualcheck = False
Do While counter <= lastrow
'2nd condition
If Not ws.Range("A" & counter).EntireRow.Hidden Then
freq = ws.Range("A" & counter)
area = ws.Range("B" & counter)
loc = ws.Range("C" & counter)
sPath = ws.Range("D" & counter)
ssheet = ws.Range("E" & counter)
dat = ws.Range("F" & counter)
week = ws.Range("G" & counter)
wkcom = ws.Range("H" & counter)
procloc = ws.Range("I" & counter)
procname = ws.Range("J" & counter)
machloc = ws.Range("K" & counter)
machname = ws.Range("L" & counter)
printer = ws.Range("M" & counter)
copies = ws.Range("N" & counter)
saveandclose = ws.Range("O" & counter)
manual = ws.Range("P" & counter)
'freq check
Select Case CStr(freq)
Case "4 weekly", "monthly"
toprint = True
Case "2 monthly"
toprint = Month(nextmonth) Mod 2 = 1
Case "3 monthly"
toprint = Month(nextmonth) Mod 3 = 1
Case "6 monthly"
toprint = Month(nextmonth) Mod 6 = 1
Case "yearly"
toprint = Month(nextmonth) Mod 12 = 1
End Select
'open sheets
'3rd condition
If toprint Then
Application.ScreenUpdating = True
ma.Visible = True
fileName = Right(sPath, Len(sPath) - InStrRev(sPath, "\"))
Application.StatusBar = "Processing File: " & fileName
Application.ScreenUpdating = False
Workbooks.Open sPath
Windows(fileName).Visible = False
'4th condition
If CStr(manual) = "no" Then
'update sheets if necessary
If CStr(dat) <> "" Then Workbooks(fileName).Sheets(ssheet).Range(dat).Formula = sDate
If CStr(week) <> "" Then Workbooks(fileName).Sheets(ssheet).Range(week).Formula = sWeek
If CStr(wkcom) <> "" Then Workbooks(fileName).Sheets(ssheet).Range(wkcom).Formula = sWkcom
If CStr(procloc) <> "" Then Workbooks(fileName).Sheets(ssheet).Range(procloc).Formula = procname
If CStr(machloc) <> "" Then Workbooks(fileName).Sheets(ssheet).Range(machloc).Formula = machname
'print sheets
Set tp = Workbooks(fileName).Worksheets(CStr(ssheet))
Select Case CStr(printer)
Case "col"
Application.ActivePrinter = col
tp.PrintOut copies:=CStr(copies)
Case "bw"
Application.ActivePrinter = bw
tp.PrintOut copies:=CStr(copies)
Case Else
MsgBox "No printer selected"
End Select
'wait here a bit
Do While ActiveWindow.View = xlPrint
Loop
'time to save&close
If CStr(saveandclose) = "yes" Then Excel.Workbooks(fileName).Close SaveChanges:=True
Else:
'Windows(fileName).Visible = True
manualcheck = True
'End of 4th condition
End If
'End of 3rd condition
End If
'End of 2nd condition
End If
counter = counter + 1
Loop
Application.StatusBar = "Done!"
Application.ScreenUpdating = True
ma.Activate
Range("A1").Select
If manualcheck = True Then
MsgBox "Update and print the sheets manually"
Else: MsgBox "Done!"
End If
End Sub
"-Meddig tart a játék? -Amíg mindenkinek ki nem verik a fogát..."
Fferi50
őstag
Szia!
1.)"a ciklus későbbi lépéseiben még szükség lesz rájuk, pl amikor egy workbookban van 20 worksheet, de nem egyszerre ömlesztve akarom őket kinyomtatni,"
ugyanakkor a ciklusban minden sornál ott van a Workbooks.Open, anélkül, hogy megnéznéd, nincs-e már megnyitva az adott file.
"mert utána akkor még kézzel is le kell válogatnom később"
másrészt, ha egy következő file másik munkalapját nyomtatod utána, akkor nem kell kézzel leválogatni az előzőtől?
2.a) szerintem alapvetően akkor van szükség GoTo utasításra, ha a makró/folyamat rosszul van megtervezve, megszervezve. Az ugrálás rontja az áttekinthetőséget és szerintem lassítja is a végrehajtást. Egy esetben látom indokoltnak, a futási hibák kezelésénél, ott ahol a hiba természete miatt külön hibakezelési rutinra van szükség az adott makrón belül. (Lásd: On Error Goto .. utasítás ).
2.b) Mod funkció -> egy osztás maradék eredményét adja vissza. Nálad azért 1 a feltétel értéke, mert mindig az adott ciklus utáni első hónapban nyomtatod a munkafüzetet (vagy ha úgy jobban tetszik, a ciklus első hónapjában). 3 havonta esetén az 1,4,7,10 hónapban. De mondhatnád azt is, hogy a 3,6,9,12 hónapban akarod nyomtatni, akkor a 0 maradék lenne a feltétel. Tehát te döntöd el, melyik hónapban kezdődjön a nyomtatási ciklus és a maradékot annak megfelelően használod feltételnek. Ugyanez igaz a többi ciklikus feltételre is.
3.a) Hibakezelésen tehát a felhasználói hibák vizsgálatát érted (amivel egyrészt megelőzheted fals adatok dokumentálását, másrészt program futási hibák keletkezését). Azt gondolom, erre az esetre érdemes egy külön függvényt írni, ami megizsgálja a kritikus összefüggéseket és logikai értéket ad vissza a vizsgálat eredményéről, amitől függően megy tovább a ciklus vagy elengedi azt a munkafüzetet/lapot.
Érdemes ettől függően azon is gondolkodni, hogyan kezeljük a futás idejű hibákat, mivel nem szeretnénk, ha ezek miatt utólag kellene a felhasználókkal hibát javíttatni.
3.b) Szűrés esetén a Darabteli függvény nincs tekintettel a szűrt állapotra valóban. Ebben az esetben a Save&close cella tartalma helyett meg kell nézned a szűrt területet makróval.
A D oszlop szűrt tartományát a következőképpen kapod meg:ActiveSheet.UsedRange.Columns("D").SpecialCells (xlCellTypeVisible)
A Find metódussal meghatározhatod a keresett érték helyét.Dim scrange As Range
Majd a nyomtatás után:Set scrange=ActiveSheet.UsedRange.Columns("D").SpecialCells (xlCellTypeVisible).Find(what:=sPath,after:=Range("D" & counter))
If scrange.Row<=counter then --- save & close
Mivel nincs további találalat a szűrt tartományban, ezért az első találatra fog visszaugrani.
Üdv.
Delila_1
Topikgazda
Szerintem semmi gond a Go To utasítással. Az áttekinthetőséget a tabulátorok adják. Az ugrás címe mindig a 0 pozícióban van, az összes többi ettől jobbra.
Nagy időt a feltételek vizsgálata igényel ismereteim szerint.
Az összetartozó részek is szépen látszanak egy normális tagolásnál. If Range("A1") > 0 Then
Range("B1") = 10
Else
Range("B1") = 20
End If
[ Szerkesztve ]
Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
Fferi50
őstag
Szia!
Ebben hol az ugrás?
Üdv.
Delila_1
Topikgazda
Ez csak azt mutatja, hogy tabulálással jól lehet láttatni az összetartozó egységeket. Hibakezeléssel:
If Range("A1") > 0 Then
Go To Hiba
Else
Range("B1") = 20: Exit Sub
End If
Hiba:
MsgBox "..."
On Error GoTo 0
Egy rossz példa találomra erről a fórumról:
Select Case CStr(freq)
Case "4 weekly", "monthly"
nyomtatni = True
Case "2 monthly"
nyomtatni = Month(nextmonth) Mod 2 = 1
Case "3 monthly"
nyomtatni = Month(nextmonth) Mod 3 = 1
End Select
[ Szerkesztve ]
Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
Fferi50
őstag
Szia!
Én nem a program leírás áttekinthetőségére gondoltam - persze az is nagyon fontos, hanem a folyamatra magára.
Természetesen a bemásolt programok tabulálása is fontos, de sajnos a szerkesztő nem igazán támogatja ezt és igen, előfordul figyelmetlenség is.
Ráadásul a Go To példád pont a hibakezeléssel kapcsolatos, amire én is azt írtam, hogy néha nem is oldható meg másként.
Mivel az utasításkészlet tartalmazza a Go To szerkezetet, programozási stílus függő is lehet az alkalmazása.
Üdv.
[ Szerkesztve ]
Delila_1
Topikgazda
Ezt úgy értettem:
Az ugrálás rontja az áttekinthetőséget és szerintem lassítja is a végrehajtást.
Eszerint félreértettem.
[ Szerkesztve ]
Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
Fferi50
őstag
eszgé100
őstag
1a.) megnyitott fájlok ellenőrzésének gondolata már piszkálta nekem is a fantáziám, de bevallom, lusta disznó voltam foglalkozni vele, pedig egy nem túl bonyolult IsFileOpen funkciót használva 9 másodperccel lett gyorsabb.
1b.) valószínűleg a későbbiekben sorszámozva leszek a sheetek, hogy a fizikai lokáció szerinti sorrendben legyenek kinyomtatva, így egy helyszínre csak egyszer kell ellátogatni anélkül, hogy időt pocsékolnék a papírok válogatásával, de ezt még nem találtam ki pontosan, hogy hogy legyen.
3a.) még tesztelnem és gugliznom kell, hogy tovább kommenteljem
3b.) Save & Close most ilyen lett:
'time to save&close
Set scrange = ws.UsedRange.Columns("D").SpecialCells(xlCellTypeVisible).Find(what:=sPath, after:=Range("D" & counter))
If scrange.Row <= counter Then
Excel.Workbooks(fileName).Close SaveChanges:=True
ElseIf manualcheck = False & CStr(saveandclose) = "yes" Then Excel.Workbooks(fileName).Close SaveChanges:=True
End If
amivel annyi problémám van, hogyha így állítom be az értékeket, akkor bezáródik, hiába volt "yes" valamelyik cella a Manual Update oszlopban
ha a manualcheck-et is beteszem az első feltételbe, akkor run time error-t kapok
[ Szerkesztve ]
"-Meddig tart a játék? -Amíg mindenkinek ki nem verik a fogát..."
Fferi50
őstag
Szia!
Szerintem először nézd meg a Manual Update értékét.If Not manualcheck Then
Set scrange=ws.UsedRange.Columns("D").SpecialCells(xlCellTypeVisible).Find(what:=sPath, after:=Range("D" & counter))
If scrange.Row <= counter Then Excel.Workbooks(fileName).Close SaveChanges:=True
End If
Sőt, tulajdonképpen a keresési eredményt közvetlenül is lehet használni:If ws.UsedRange.Columns("D").SpecialCells(xlCellTypeVisible).Find(what:=sPath, after:=Range("D" & counter)).Row <= counter Then Excel.Workbooks(fileName).Close SaveChanges:=True
mivel legalább az adott sorban levő tételt meg fogja találni, tehát hibát nem okozhat a találat hiánya.
Üdv.
[ Szerkesztve ]
Fferi50
őstag
Ha jól látom, akkor a manualcheck változód a ciklus során nem változik, illetve a manual "Yes" esetén True lesz. Ez ugye szűrésnél rendben is van, de ha nincs szűrés, akkor egyetlen kézi ellenőrzésre szoruló tábla is megakasztja az összes többi bezárását is.
Ha jól gondolom, akkor a szűrés nélküli állapotban meg kellene vizsgálni, hogy az adott fájlhoz tartozik-e olyan sor, amelyben kézimunka szüksége.
Ezt a Countifs függvénnyel lehet megnézni szerintem, első feltétel a fájl neve a D oszlopon, második feltétel a yes a Manual Update oszlopon. Ha ez nem 0, akkor nem lehet a fájlt bezárni.
Üdv.
hódmaci
senior tag
Sziasztok!
Van olyan trükk amivel azt lehet beállítani, ha új lapot nyitok akkor az új lap neve ne az legyen hogy "Munka1" hanem a mai dátum. (ÉV.Hó.nap.)
Hölgyeim! Azt tesszük a kirakatba ami eladó.:)
lappy
őstag
így megoldható
Bámulatos hol tart már a tudomány!
Private Sub Workbook_NewSheet(ByVal Sh As Object)
Dim MyDate As String
MyDate = Format(Now, "yyyy.mm.dd - hh:mm:ss")
Sh.Name = MyDate
End Sub
[ Szerkesztve ]
Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
Fferi50
őstag
Szia!
Automatizálni lehet, ha a Thisworkbook Workbook_NewSheet eseménykezelőjébe építjük be a makrót.
Természetesen utána a munkafüzetet makróbarátként vagy binárisként kell menteni.
Üdv.
hódmaci
senior tag
Szuper.
Esetleg megoldható még, hogy az előfej elő-láb mező mindig a lap neve legyen?
Vagy pl az A1 mező legyen midig a lap neve
Nem jó ha a =MA() függvényt használom mert akkor mindig az a dátum lesz ott amelyik napon megnyitom. (Azt hiszem.)
Illetve, hogy az új lapon mindig az az adott mentett sablonom jelenjen meg.
Elnézést ha sok vagyok.
[ Szerkesztve ]
Hölgyeim! Azt tesszük a kirakatba ami eladó.:)
Közben javítottam/módosítottam az előző hozzászólásom, mert ha a Date függvénnyel dolgoznánk, akkor az első munkalapot létrehozná a mai dátummal, de még egyet (ugyanazon a napon) már nem, mert 2 egyforma nevű munkalap nem lehet.
"Esetleg megoldható még, hogy az előfej elő-láb mező mindig a lap neve legyen?"
Mármint mindkettő szerepeljen a munkalap nevében?
Megoldható, csak a munkalap neve max. 31 karakter lehet, ha hosszú az előfej és élőláb + még az ilyen hosszú dátum- és időformátum, az úgy már nem minden esetben fog menni...
A dátumidőt még össze lehet "tömöríteni", pl 211202110150 formátumba 2021. 12 .02. - 11:01:50 helyett...
[ Szerkesztve ]
Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
hódmaci
senior tag
Hogy volt az eredeti kód?
Mert ez abszolút nem működik így.
Nem tudok új lapot nyitni.
Egy lapom van nyitva aminek a neve "2021.01.01." Így próbálok új lapot nyitni
Ezt a sort hozza hibára sárga nyillal:Vastag aláhúzott
Private Sub Workbook_NewSheet(ByVal Sh As Object)
Dim MyDate As String
MyDate = Format(Now, "yyyy.mm.dd - hh:mm:ss")
Sh.Name = MyDate
End Sub
sh.Name = Mydate
[ Szerkesztve ]
Hölgyeim! Azt tesszük a kirakatba ami eladó.:)
lappy
őstag
A1 mező legyen a lap neve:
=KÖZÉP(CELLA("filenév";A1);SZÖVEG.TALÁL("]";CELLA("filenév";A1))+1;255)
Bámulatos hol tart már a tudomány!
Bocs, csak mint a Hungaroringen a boxutcába, úgy jönnek sorba a futárok hozzánk...
Igen, mert hüle voltam, megfeledkeztem róla, hogy bizonyos karaktereket nem lehet munkalap nevében felhasználni... Bocsesz ( csak tényleg ki-be rohangálok egy ideje a futárokhoz)
Mindjárt megírom újra.
Még csak annyit, hogy egy újonnan létrehozott munkalapnak még nincs sem élőfeje, sem élőlába, tehát nincs mit az éppen létrehozás alatt álló munkalap nevébe beilleszteni.
Esetleg úgy értetted, hogy a makró adjon az újonnan létrehozott munkalaphoz élőfejet meg élőlábat? Az alábbi kód ezt teszi.
'Fire/SOUL/CD - 2021
Private Sub Workbook_NewSheet(ByVal Sh As Object)
Dim MyDate As String
Dim MyStr As String
'megadjuk a dátum- és időformátumot
MyDate = Format(Now, "yymmdd_hhmmss")
'beállítjuk az összes élőfej és élőláb szövegét
'természetesen amelyikre nincs szükség,
'azt a sort törölheted vagy kommentezd ki
With Sh
.PageSetup.LeftHeader = "Élőfej BAL"
.PageSetup.CenterHeader = "Élőfej KÖZÉP"
.PageSetup.RightHeader = "Élőfej JOBB"
.PageSetup.LeftFooter = "Élőláb BAL"
.PageSetup.CenterFooter = "Élőláb KÖZÉP"
.PageSetup.RightFooter = "Élőláb JOBB"
End With
'melyik élőfej vagy élőláb szövegét tartalmazza a munkalap neve
'itt a példában a középső élőfejét
MyStr = Sh.PageSetup.CenterHeader
Sh.Name = MyStr & "_" & MyDate
End Sub
[ Szerkesztve ]
Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
hódmaci
senior tag
Jobb lesz ha hosszabban leírom mit is szeretnék mert nem szeretném ha fölösleges köröket futna velem bárki is.
Amit szeretnék:
Készíteni szeretnék egy adott lapot ami nevekkel jelenléti felsorolást tartalmaz.
Illetve elvégzett munkálatokat
Afféle műszaknapló
Adott névhez adott jelenlét x-elhető.
(beteg, jelen, szabi, egyéb)
Ezeket kitöltöm ma és elmentem.
Holnap megnyitom és vissza tudom keresni dátum szerint ki volt aznap és mit csinált a csapat.
Illetve egyben nyitnák egy új lapot aminek a neve az aznapi dátum illetve a lap tartalma az kitöltetlen jelenléti ív.
Vagyis csak neveket tartalmaz és én beírom ki van ki nincs illetve az aznapi munkát.
Másnap kezdődik előröl.
Új lap ami kitöltve előre az adott nevekkel én beírom aznap ki van ki nincs stb....
pm küldtem képet
lappy
Köszönöm.
Működik
Hölgyeim! Azt tesszük a kirakatba ami eladó.:)
Fferi50
őstag
Szia!
Miért kell minden napra külön munkalap? Egy munkalap egy hónap.
Az oszlopokban lehetne a napokat megjeleníteni.
Az Excel sablonjaiban is találhatsz jelenléti íveket.
Üdv.
hódmaci
senior tag
Egy munkalapra egy napot szeretnék megjeleníteni.
Így egy munkafüzet egy egész hónap lesz majd.
Számomra így könnyebb lenne a visszakeresés ha szükségem lenne valamire.
Azonkívül az elvégzett munkát is könnyebb volna társítanom adott naphoz és dolgozókhoz.
Hölgyeim! Azt tesszük a kirakatba ami eladó.:)
Ööö, ehhez nem kell makró, mert ez 10 másodperces munka max...
Csinálsz egy munkalapot, aminek pl. Üres jelenléti ív nevet adsz (mert az az üres jelenléti ívet tartalmazza), CTRL nyomvatart, egérrel megfogod a munkalapot és elhúzod (lesz egy másolat, azon duplaklikk és átírod a nevét a megfelelő dátumra és kész...
(vagy az üres munkalapon jobb egér/áthelyezés vagy másolás...)
Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
ReSeTer
senior tag
Bocsánat ha rossz topic, igazából VBA topic nincs, csak VB.
Hogyan tudnék egy Word dokumentumban található táblázatba új sort csinálni célzottan? Tehát ne a végére csináljon, hanem mondjuk megtudnám adni, hogy melyik sor alá.
wordobjektum.Tables(táblázatazonosító).rows.add
Itt tartok.
Fferi50
őstag
Szia!
Talán nem a legelegánsabb, de műxik:wordobjektum.Tables(táblázatazonosító).rows(x).Select
Selection.InsertRowsBelow
Üdv.
csferke
senior tag
Sziasztok!
Mivel erre nem reagált senki, ismételten bátorkodom feltenni a kérdést.
Az kivitelezhető, hogy automatikusan változzon egy Munkalap neve?
Konkrétabban. "Név "+ egy másik lapon található cella tartalma, amely változik.
köszi
Angol Excel 2007
Delila_1
Topikgazda
A ThisWorkbook laphoz kell rendelned a makrót. Mikor egy új lapot hozol létre, az a Munka1 lap B3 cellájában lévő nevet kapja meg.
Private Sub Workbook_NewSheet(ByVal Sh As Object)
ActiveSheet.Name = Sheets("Munka1").Range("B3")
End Sub
Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
Kowax
tag
Sziasztok!
Adott két oszlopom mért értékekkel. Az egyiket diagramban ábrázolom a másik függvényében. Amire kíváncsi vagyok, hogy az ábrázolt diagram egy adott pontja (ami a maximális érték fele) hol metszi az X tengelyt,vagyis aminek a függvényében ábrázoltam. Nem tudom ez így mennyire érthető, kicsit késő van már.
Odáig jutottam, hogy a maximális érték felének értékével csináltam egy új oszlopot, azt is ábrázoltam a diagramban, így kaptam egy vízszintes egyenest, ami metszi az eredeti görbét. Na erre a metszéspontra lennék kíváncsi az X tengelyen.
Valaki tudna ebben segíteni?
Előre is köszönöm szépen!
Böff!:))
csferke
senior tag
Szia!
Mikor egy új lapot hozol létre, az a Munka1 lap B3 cellájában lévő nevet kapja meg.
Nem pontosan erre gondoltam. Pontosítok.
Meglévő munkalap nevét szeretném módosítani.
Adott egy "Név" ami nem változik és ehhez kellene hozzáadni a B3 tartalmát. Amikor változik B3 tartalma akkor változzon a munkalap neve "Név "+a B3 új tartalma.
köszi
Angol Excel 2007
Delila_1
Topikgazda
Vegyél fel egy új sort és egy új oszlopot.
[kép]
Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
lappy
őstag
Vmi ilyesmire gondoltál
Bámulatos hol tart már a tudomány!
Delila_1
Topikgazda
Private Sub Worksheet_Change(ByVal Target As Range)
Dim lapnev As String
If Target.Address = "$B$3" Then
Application.EnableEvents = False
lapnev = "Állandó " & Range("L1")
Sheets(lapnev).Name = "Állandó " & Range("B3")
Range("L1") = Range("B3")
Application.EnableEvents = True
End If
End Sub
Első futtatás előtt írd be az L1-be az állandó szöveg utáni részt.
Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
Kowax
tag
Ez hogy oldja meg a problémámat?
Csatolok két képet. Az elsőn az adatok, a másodikon a diagram. A diagram kék vonalai és a narancssárga vonal metszéspontjainak X értékére vagyok kíváncsi. A kék vonalak adatai mérési eredmények. A narancssárga az adatok közül az utolsó oszlop, ami az adatok közül a maximális érték felét jelenti.
Na most itt akkor hogyan fogom megtudni a metszéspontokat egy új sor és oszlop felvételével?
Előre is köszönöm, ha elmagyarázod, mert ezt most nem látom át.
Böff!:))
Kowax
tag
Igen, valami ilyesmi jó lenne, de ahogy látom, ez egy külön program vagy kiegészítő. A sima mezei Excel-ben nem lehet megoldani?
Böff!:))
Fferi50
őstag
Szia!
Kár, hogy a két képet nem csatoltad.
Ha vonaldiagramot csináltál, akkor pl. lehet esésvonalakat hozzáadni a Diagramtervezés menüben:
Esetleg tehetsz fel trendvonalat, annak az egyenletét, amiből ki lehet számoltatni a metszéspontot.
[itt találtam vba-s megoldást]
a lappy által mutatottra, ezt az adott munkafüzetbe lehet beépíteni. Utána makróbarátként kell elmenteni.
Üdv.
[ Szerkesztve ]