-
GAMEPOD.hu
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.
Új hozzászólás Aktív témák
-
Fferi50
őstag
válasz
Fire/SOUL/CD #47901 üzenetére
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
válasz
Fire/SOUL/CD #47901 üzenetére
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. -
válasz
Fferi50 #47903 üzenetére
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)
-
Fferi50
őstag
válasz
Fire/SOUL/CD #47905 üzenetére
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. -
válasz
Fferi50 #47907 üzenetére
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
-
válasz
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. -
válasz
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)
-
válasz
Fire/SOUL/CD #47913 üzenetére
Köszönöm, ez így megfelelő lesz nekem!
-
eszgé100
őstag
válasz
Fferi50 #47894 üzenetére
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álva3.) 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 SubSub 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
válasz
eszgé100 #47915 üzenetére
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
válasz
Fferi50 #47916 üzenetére
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.
-
Delila_1
Topikgazda
válasz
Fferi50 #47918 üzenetére
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
válasz
Delila_1 #47919 üzenetére
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 ]
-
-
eszgé100
őstag
válasz
Fferi50 #47916 üzenetére
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 Ifamivel 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
válasz
eszgé100 #47923 üzenetére
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
válasz
eszgé100 #47923 üzenetére
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
-
válasz
hódmaci #47926 üzenetére
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)
-
hódmaci
senior tag
válasz
Fire/SOUL/CD #47928 üzenetére
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ó.:)
-
válasz
hódmaci #47930 üzenetére
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 nyitniEzt 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ó.:)
-
válasz
hódmaci #47932 üzenetére
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
válasz
Fire/SOUL/CD #47934 üzenetére
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épetlappy
Köszönöm.
MűködikHölgyeim! Azt tesszük a kirakatba ami eladó.:)
-
hódmaci
senior tag
válasz
Fferi50 #47936 üzenetére
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ó.:)
-
válasz
hódmaci #47935 üzenetére
Ööö, 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.
-
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
válasz
csferke #47941 üzenetére
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
válasz
Delila_1 #47942 üzenetére
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
válasz
csferke #47944 üzenetére
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
válasz
Delila_1 #47945 üzenetére
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!:))
-
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 ]
Új hozzászólás Aktív témák
- Apple Watch
- Samsung LCD és LED TV-k
- Politika
- Milyen asztali (teljes vagy fél-) gépet vegyek?
- UHD filmek lejátszása
- iPhone topik
- Milyen légkondit a lakásba?
- Gyere el a 9. BRSZK-ra!
- Intel Core i3 / i5 / i7 / i9 10xxx "Comet Lake" és i3 / i5 / i7 / i9 11xxx "Rocket Lake" (LGA1200)
- SSD kibeszélő
- További aktív témák...
- Autómatricák a legjobb minőségben, több ezer minta! PH tagoknak 30% kedvezmény!
- Eladó Steam kulcsok kedvező áron!
- Microsoft licencek KIVÉTELES ÁRON AZONNAL - UTALÁSSAL IS AUTOMATIKUS KÉZBESÍTÉS - Windows és Office
- Bitdefender Total Security 3év/3eszköz! - "Tökéletes védelem most kedvező áron..."
- 10 Darab PC Játék (Bontatlanul!) Egyben 6990Ft.-ért Foxal!!!