-
IT café
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
-
bsh
őstag
üdv,
lenne egy VBA-s problémám, van benne excel is de nem hiszem, hogy szorosan excelhez kapcsolódik, inkább csak simán láma vagyok VBA-ban
szóval ez egy vba script lenne autodesk inventorhoz, amit úgy működne, hogy az épp megnyitott rajzon többféle dolgot megcsinál ha lefuttatják, ezek egyike a problémás. (a "többféle dolog" szubrutinok meghívását jelenti, ez az egyik.)
ez annyit csinálna, hogy ha van a rajzon darabjegyzék, akkor azt átmásolná excel-be, némi formázást is raktam rá, hogy csini legyen, aztán menti.
itt egy kódrészlet.
az 51-es sorral van a gond. de szerintem nem magával azzal a sorral van a baj (mert az működik - lásd később), hanem inkább a létrehozott objektumok scope-jával.
ugyanis a következőt csinálja: több rajzon egymás után lefuttatva tökéletesen működik, egészen addig, amíg egy olyan rajzon fut le, ahol már létezik az xls fájl. ekkor mentéskor felajánlja, hogy felülírja-e (ez így jó is) és minden rendben. viszont, a következő rajzon lefuttatva már hibákat dob az 51-es sornál. ha kihagyom a sort (vagy on error resume next), akkor pedig látszólag bezárja a végén az excel-t ahogy kell, viszont ott marad az excel process. innentől már mindig hibázni fog és nem működik rendesen, akkor sem, ha kilövöm a létrehozott excel processeket.
a hibák amiket dobál, pölö: runtime error 438: object doesn't support this property or method.
aztán volt 462 is (valami remote server or application...)
meg 1004 is.én valami context változásra gyanakszom onnantól, hogy felül kell írnia egy létező fájlt, és innentől egy nem létező objektumon akarja a range-tes sort futtatni, meg egy nem létező excel appot akar bezárni? de nekem ezek már magasak sajnos.
valaki segítene? thx. -
bsh
őstag
válasz Delila_1 #28407 üzenetére
megpróbáltam, de nem jó úgy sem.
de már eleve miért fut hibára? nem kéne neki. hacsak nem a .range.... egy előző futáskor keletkező ojjektum ami valamiért megmarad, és arra a nem létező ojjektumra akarna bordert rakni.
ez a hiba: "runtime error 1004: method 'Selection' of object '_Global' failed." nem értem, milyen selection method, nincs is olyan (hacsak nem a range egyben selection is), de főleg az object "_Global" a sokatmondó: ezek szerint nem az excel worksheet-en akar valamit csinálni? -
bsh
őstag
válasz Delila_1 #28421 üzenetére
nem ez a gond, de köszi az infót: nem tudtam, hogy már létrehozáskor lehet a workbooknak fájlnevet adni. (emiatt mentem saveas-szel a fájlt), de ha ez így is működik, akkor egyszerűsödik kicsit a kódom.
közben úgy néz ki megtaláltam a hibát (ahogy éreztem) és a megoldást:
.Range(Cells(1, 1), Cells(s, o)).BorderAround Weight:=xlMedium, ColorIndex:=xlColorIndexAutomatichelyett:
.Range(ExcelWS.Cells(1, 1), ExcelWS.Cells(s, o)).BorderAround Weight:=xlMedium, ColorIndex:=xlColorIndexAutomatictehát a Cells-nél meg kell adni az excelws ojjektumot. (esetleg oda is tehetek excelws helyett pontot? mindjárt kipróbálom)
ezzel úgy néz ki tökéletesen működik, és az excel process is mindig bezáródik. legalábbis eddig. -
bsh
őstag
-
bsh
őstag
makróval?
Private Sub ize()
i = 1
c = 1
While c <> Selection.Rows.Count - 1
For s = c To Selection.Rows.Count - 1
If (Abs(Selection.Cells(c, 2).Value - Selection.Cells(s + 1, 2).Value) < 50) And (Abs(Selection.Cells(c, 3).Value - Selection.Cells(s + 1, 3).Value) < 50) Then
Cells(i, 4).Value = Selection.Cells(c, 1).Value
Cells(i, 5).Value = Selection.Cells(s + 1, 1).Value
i = i + 1
End If
Next s
c = c + 1
Wend
End Sub
(futtatás előtt ki kell jelölni az adatterületet, pl. A26, és a D és E oszlopba fogja gyűjteni a közel eső párokat) -
bsh
őstag
válasz kispéé #29017 üzenetére
másik verzió:
(feltételezi, hogy egy workbookban van a két táblázat: Munka1 és Munka2)Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Select Case Target.Worksheet.Name
Case "Munka1"
If Target.Column = 1 Then
On Error Resume Next
If Not Worksheets.Item("Munka2") Is Nothing Then
On Error GoTo 0
With Worksheets.Item("Munka2")
Set X = .Range("G:G").Find(Target.Value, lookat:=xlWhole)
If Not X Is Nothing Then
Application.EnableEvents = False
Application.Goto .Cells(X.Row, X.Column)
Application.EnableEvents = True
End If
End With
End If
On Error GoTo 0
End If
Case "Munka2"
If Target.Column = 7 Then
On Error Resume Next
If Not Worksheets.Item("Munka1") Is Nothing Then
On Error GoTo 0
With Worksheets.Item("Munka1")
Set X = .Range("A:A").Find(Target.Value, lookat:=xlWhole)
If Not X Is Nothing Then
Application.EnableEvents = False
Application.Goto .Cells(X.Row, X.Column)
Application.EnableEvents = True
End If
End With
End If
On Error GoTo 0
End If
End Select
End Sub -
bsh
őstag
válasz kispéé #29021 üzenetére
a ThisWorkbook-ba másoltad be a kódot? akkor elvileg automatikusan futnia kell, amint megváltozik a kijelölés.
tehát ha a Munka1 nevű sheeten az A oszlop egyik elemére kattintasz, akkor egyből átugrik a Munka2 nevű sheeten a G oszlop megfelelő elemére, vagy ha Munka2-n a G oszlop egyik elemére kattintasz, akkor átugrik Munka1 A oszlop megfelelő elemére. (nyilván az Munka1!A és Munka2!G oszlopokban legyenek értékek, én pl. egyikbe 1-től 50-ig felvettem értékeket, másikba meg 50-től 1-ig.) -
bsh
őstag
üdv,
egy excelben lévő combobox-nál fillrange-nek egy egy névkezelőben megadott nevet adtam meg, ami egy másik excel táblázatra mutató adatkapcsolat. beállítottam, hogy a fájl megnyitásakor frissítse a kapcsolatot (erre rá is kérdez megnyitáskor). de a comboboxban nem jelennek meg a listában az értékek, csak akkor, ha előzőleg külön megnyitom a másik táblázatot. szóval nem működik az adatkapcsolat, vagy csak comboboxban nem lehet használni nevesített adatkapcsolást?[ Szerkesztve ]
-
bsh
őstag
üdv,
megint nem exceles kérdés, de hátha a vba profik tudnának segíteni:
van egy dinamikusan generált userform, amiben egy amolyan táblázatszerűséget generálok textbox és listbox elemekből. minden TB és LB generáláskor megadom minden elemnek a magasságát (=sormagasság), szélességét, autosize=false, font.name és font.size (ezeket is már csak kínomban), az elemek top pozíciója pedig sor_száma*sormagasság képlettel.
mégis ahogy a képen látszik, néhol kicsit szétcsúsznak a sorok, és a betűméret sem mindenhol egyforma, hiába van beállítva. ezek mitől lehetnek? már nincs ötletem. -
bsh
őstag
válasz Belnir #29332 üzenetére
kód a ThisWorkbook-ba:
Private Sub Workbook_Open()
On Error GoTo xit
Set FSO = CreateObject("Scripting.FileSystemObject")
Set Logfile = FSO.OpenTextFile("Z:\ez\valami\szerveren\legyen\logfile.log", 8, True)
Logfile.WriteLine (Format(Now, "YYYY.MM.DD hh:mm:ss") & " - " & Application.UserName)
Logfile.Close
Set Logfile = Nothing
Set FSO = Nothing
xit:
End Sub -
bsh
őstag
válasz poffsoft #29356 üzenetére
most ezt úgy kérdezem, hogy ekcellhez nem értek, meg nem is próbálom ki mert őőőő ezer a dolgom de ez hogyan is akar működni? bezárás előtt beleír a táblázatba, amitől az megváltozik. ilyenkor nem ajánlja fel a mentést az ekcszell? mert akkor megint ment, de ugye afters
have megint beleír, amitől megint nem tudod bezárni, goto 10, nem?[ Szerkesztve ]
-
bsh
őstag
válasz Delila_1 #29375 üzenetére
az eredeti kérdés csak a megtekintés (megnyitás) volt.
de én is kérdeznék, sőt kettőt is:
az első az erről a lastrow-ról jut eszembe, egy feladatnál kell nekem ilyen, de ez az egyszerű megoldás nem jó, mert nem feltétlen vannak minden oszlopban kitöltve a mezők, nincs olyan oszlop, amit hasznáhatnék az range-hez, mert lehet, hogy van annál hosszabb oszlop is. viszont a ctrl+end az rendesen a legutolsó sor legutolsó oszlopra ugrik. ezt nem lehet valahogy meghívni közvetlenül? vagy erre nincs valami gyors megoldás? (ha végignézem egyesével az oszlopokat, hogy melyik a leghosszabb, az nem elég gyors)a másik nekem bonyolultabb:
még a tegnap írt problémás userform-hoz jó lenne "cella"-szintű event handling. ezt én a kis egyszerű tudatlan fejemmel úgy képzeltem el, hogy "definiálok" egy saját combobox (és ugyanígy textbox) objektumtípust egy class modulban:
Class1:
public withevents eComboBox as ComboBoxés a kódban, ami generálja a userform-ban a "cellákat" ezt használnám a sima msforms.combobox helyett:
newCB = userform.frame.controls.add("msforms.combobox.1", név, true)
helyett:
newCB = userform.frame.controls.add("class1.ecombobox", név, true)persze ha ez működne akkor nem kérdezném, hogyan kell...
próbáltam úgy is, hogy ez előtt a sor előtt explicit megadom a newCB típusát:
dim newCB as class1.ecomboboxde én sajnos ezekhez már nem értek. találtam rá pár hasonló példát google-ben, de azokat sem bírtam értelmezni illetve nem működnek. szóval kis segítséget kérnék.
-
bsh
őstag
válasz Belnir #29382 üzenetére
túlbonyolítod. excelben le lehet simán védeni jelszóval a lapot módosítások ellen, vagy akár az egész munkafüzetet is.
de makróval is megoldható, csak ugye a makrók letilthatóak...én mondtam, hogy sokkal egyzserűbb egy külön logfájlba menteni a megnyitásokat/mentéseket/akármiket.
-
bsh
őstag
válasz Delila_1 #29395 üzenetére
akartam írni, hogy ez egy szép kis képlet lesz, de megelőztél ha gyakran kell, akkor én ilyesmire inkább írnék egy saját függvényt:
Public Function TextSplit(TString As String, Delim As String, Pos As Integer) As String
TextSplit = Split(TString, Delim)(Pos)
End Function
'Használata: =TextSplit(A1;":";2)[ Szerkesztve ]
-
bsh
őstag
válasz Delila_1 #29402 üzenetére
ez nem jó, mert ha pl. képletek vannak a cellákban (de értékek nélkül), akkor azt így is beleveszi az usedrange-be.
így van a form generálva:
Load FrmTáblázat
FrmTáblázat.Frame1.Caption = "blahblahblah"
FrmTáblázat.Frame1.Left = 3
FrmTáblázat.Frame1.Top = 2
FrmTáblázat.Frame1.Width = 1100
FrmTáblázat.Frame1.Height = 20 + 20 * RowHeight
FrmTáblázat.Frame1.ScrollHeight = 7
FrmTáblázat.Height = FrmTáblázat.Frame1.Height + 70
FrmTáblázat.Width = FrmTáblázat.Frame1.Width + 10
For Y = 1 To RefDocs.Count
Call CreateRow(Y)
'itt az adatok kitöltése
Next Y
If Y < 20 Then
FrmTáblázat.Frame1.ScrollBars = fmScrollBarsNone
Else
FrmTáblázat.Frame1.ScrollBars = fmScrollBarsVertical
End If
FrmTáblázat.Show
End Subés minden sor minden egyes textboxa pedig így: (combobox tökugyanez, csak ott még a választható értékek feltöltése is benne van, +3 sor)
Private Sub CreateTextBox(ByVal Y As Integer, ByVal Name As String, ByVal L As Long, ByVal W As Long)
Set newTB = FrmTáblázat.Frame1.Controls.Add("Forms.TextBox.1", CStr(Y) & Name, False)
newTB.Width = W
newTB.Height = RowHeight
newTB.Top = (Y - 1) * RowHeight + 6
newTB.Left = L
newTB.SelectionMargin = False
newTB.AutoSize = False
newTB.Font.Name = FntName
newTB.Font.Size = FntSize
newTB.SpecialEffect = fmButtonEffectFlat
newTB.BorderStyle = fmBorderStyleSingle
newTB.Visible = True
Set newTB = Nothing
End Sub[ Szerkesztve ]
-
bsh
őstag
válasz Delila_1 #29404 üzenetére
nem, azzal azzal megtalálja az utolsó értéket tartalmazó cellát a megadott oszlopban. csak ugye nem tudok egy konkrét oszlopot megadni, mert nem biztos, hogy ténylegesen mindig az az oszlop lesz a "leghosszabb".
de mondjuk az is lehet, hogy pont abban a két oszlopban amivel próbáltam, abban nem volt húszmillió képlet -
bsh
őstag
válasz Delila_1 #29406 üzenetére
miért van annyi képlet? ezt kérdezd attól, aki a táblázatot csinálta gondolom fogott egy képletet és autofillel lerántotta a végtelenbe és tovább, hogy "biztosamibiztos"
de a ctrl+end az működik ezeken a táblázatokon rendesen, az utolsó értéket tartalmazó sorra (és oszlopra) ugrik, képlettől függetlenül. ezt kéne valahogy kihasználnom vba-ból.a "táblázattá alakítás" az egy teljesen másik projekt, semmi köze nincs a lastrow-os dologhoz, sőt az excelhez sincs egyáltalán semmi köze. és kimaradt egy lényeges sor a kódból, mert figyelmetlenül másoltam be:
For Y = 1 To RefDocs.Count
Call CreateRow(Y)
FrmTáblázat.Frame1.ScrollHeight = FrmTáblázat.Frame1.ScrollHeight + RowHeight
Next Y
és a rowheight az egy konstans.
de a lényeg, hogy szerintem meg van adva a userform mérete is, na.
az event kezelés csak arra kellene (de végülis nem életbevágó), hogy csak azokat az értékeket kelljen visszaírni a megfelelő ojjektumokba, amiket megváltoztat a user (vagy a makró, lehet teszek bele ilyen autocorrect funkciót). nekem annyi elég lenne, hogy ha egy (közös, many-to-one) combobox_change event lenne, ami tudná a változott "cella" nevét (amiből én tudom, hogy azt hová kell majd visszaírni) és mondjuk az adott *box .tag-jét beállítom "changed"-re, onnan már sima ügy.[ Szerkesztve ]
-
bsh
őstag
válasz Belnir #29421 üzenetére
azért az jelentősen más, nem csak amolyan "átírjuk oszt' jóvan"
itt egy ilyen faék megoldás. az egyszerűség kedvéért a log fájlt először külön hozd létre (egy üres excel fájl) és a megfelelő elérési utat írd bele.
Private Sub Workbook_Open()
Call WriteToLog(Application.UserName, "Megnyitás")
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
'Call WriteToLog(Application.UserName, "Bezárás")
End Sub
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
'Call WriteToLog(Application.UserName, Sh.Name & " változtatás")
End Sub
Private Sub WriteToLog(ByVal Who As String, ByVal What As String)
Dim NewXL As New Excel.Application
NewXL.Visible = False
Dim Log As New Excel.Workbook
Set Log = NewXL.Workbooks.Open("Z:\logfájl\elérési\útja\log.xlsx") 'A fájlt először kézzel hozd létre!
Dim LastRow As Long
LastRow = Log.ActiveSheet.Cells(Log.ActiveSheet.Rows.Count, 1).End(xlUp).Row
Log.ActiveSheet.Cells(LastRow + 1, 1) = Format(Now, "YYYY.MM.DD hh:mm:ss")
Log.ActiveSheet.Cells(LastRow + 1, 2) = Who
Log.ActiveSheet.Cells(LastRow + 1, 3) = What
Log.Save
Log.Close
Set Log = Nothing
Set NewXL = Nothing
End Sub -
bsh
őstag
-
bsh
őstag
válasz Szicskeee #29656 üzenetére
Sub CommandButton_Szamolj_Click()
Select Case Cells(1, 2).Value
Case 1
Call CommandButton1_Click
Case 2
Call CommandButton2_Click
Case 3
Call CommandButton3_Click
Case 4
Call CommandButton4_Click
'satöbbi...
End Select
End Sub
Sub CommandButton1_Click()
'...
End Sub
Sub CommandButton2_Click()
'...
End Sub
Sub CommandButton3_Click()
'...
End Sub
Sub CommandButton4_Click()
'...
End Sub
'satöbbi... -
bsh
őstag
válasz Polllen #29677 üzenetére
az első sorban a Cells()-ek kontextusa nincs kvalifikálva. helyesen:
Worksheets("Layout").Range(Worksheets("Layout").Cells(1, 1), Worksheets("Layout").Cells(1, wk)).Copy Destination:=Worksheets("Munka2").Range("A1")
hasonlóképpen furcsaságok lehetnek, ha a wk változó sincs az adott kontextusban definiálva.a második verzióban még az eleje is rossz:
Worksheets(ws1).Range(Cells(1, 1), Cells(1, wk)).Copy...
helyesen:
ws1.Range(Cells(1, 1), Cells(1, wk)).Copy... -
bsh
őstag
válasz coldfirexx #29736 üzenetére
a modul neve ugyanaz (valasz) mint a változóé.
-
bsh
őstag
válasz bteebi #29743 üzenetére
sehol nem írta, hogy "időnként működik". ha névütközések vannak, akkor ez sosem fog működni, mivel le sem fordul úgy a program. ha nincs ütközés, akkor lefordítja és akkor mindig működni is fog.
ebből következően ha más fájlban működik ugyanez a kód, akkor ott abban a fájlban a modul neve nem "valasz". -
bsh
őstag
válasz Szicskeee #29773 üzenetére
gondolom azért, mert a range nem egyértelmű, az lehet bármely lapon vagy akár másik munkafüzetben is.
meg kell neki mondani, hogy worksheets("Prem1").Range("A1:O39").Select, vagy ha már úgyis aktívvá tetted azt a lapot, akkor Activesheet.Range("A1:O39").Select[ Szerkesztve ]
-
bsh
őstag
válasz Sátán44 #29781 üzenetére
valami ilyesmi?
Private Sub Worksheet_Change(ByVal Target As Range)
If (Target.Column > 2) And (Target.Column < 25) And (Target.Row > 2) And (Target.Row < 28) Then
If (XCount(Me.Range(Cells(Target.Row, 3), Cells(Target.Row, 25))) > 2) Or (XCount(Me.Range(Cells(2, Target.Column), Cells(28, Target.Column))) > 2) Then
Target.Value = ""
MsgBox ("Már van két X az adott sorban vagy oszlopban!")
End If
End If
End Sub
Private Function XCount(XRange As Range) As Long
XCount = 0
For Each Cell In XRange
If Cell.Value <> "" Then XCount = XCount + 1
Next
End Function -
bsh
őstag
válasz Terra86 #29812 üzenetére
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Cells(Target.Row, Me.Columns.Count).End(xlToLeft).Column > 1 Then
Call ExtendSelection(Target)
End If
End Sub
Private Sub ExtendSelection(ByVal Target As Range)
Me.Range(Cells(Target.Row, Target.Column), Cells(Target.Row, Cells(Target.Row, Me.Columns.Count).End(xlToLeft).Column)).Select
End Sub[ Szerkesztve ]
-
bsh
őstag
válasz Fire/SOUL/CD #29820 üzenetére
(csak nyilván nem szabad eseményhez rendelni, mert onnantól, amíg a makró fut, nem kell adatot bevinni...)
mentségemre szóljon, hogy az nem is volt feltétel...
-
bsh
őstag
válasz Fire/SOUL/CD #29822 üzenetére
deeee, van azzal gond... pont azért írtam később, hogy nem kellett volna álmosan "segíteni" az a feltétel úgy nem elég, gyakorlatilag nem tudsz vele így az utolsó oszlop utánra adatot beírni
ehelyett
If Cells(Target.Row, Me.Columns.Count).End(xlToLeft).Column > 1 Then
ez valamivel jobb:
If Cells(Target.Row, Me.Columns.Count).End(xlToLeft).Column > Target.Column Then -
bsh
őstag
válasz lizakattila #29963 üzenetére
ilyesmi? biztos van egyszerűbb is.
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
For Each Item In Target.Cells
If Item.Column = 15 Then
If Item = "" Then
Cells(Item.Row, 1) = ""
Else
Cells(Item.Row, 1) = Now()
End If
End If
Next
Application.EnableEvents = True
End Sub -
bsh
őstag
válasz Delila_1 #29967 üzenetére
én így oldottam meg:
ez a K oszlop (cikkszám) alapján dolgozik, mivel ahogy látom, a megnevezés (B oszlop) lehet eltérő is ugyanahhoz a cikkszámhoz. (emiatt veszélyes is a makróm, mert törli a sorokat, és a többféle megnevezésekből csak az első marad meg, a többi elvész)
Sub flt()
lastrow = Me.UsedRange.Rows(Me.UsedRange.Rows.Count).Row
Call Me.UsedRange.Sort(Me.Columns("K:K"), xlAscending, Header:=xlYes)
i = 2
While i <= lastrow
o = 1
While Me.Cells(i, 11) = Me.Cells(i + 1, 11)
'kategóriák külön oszlopokba (AE, AF, AG, stb.)
Me.Cells(i, 30 + o) = Me.Cells(i + 1, 30)
'vagy kategóriák AD oszlopba, vesszővel elválasztva
'Me.Cells(i, 30) = Me.Cells(i, 30) & ", " & Me.Cells(i + 1, 30)
Me.Rows(i + 1).Delete
o = o + 1
lastrow = lastrow - 1
Wend
i = i + 1
Wend
End Sub -
bsh
őstag
válasz stivi1g #29969 üzenetére
nekem nem teljesen világos: gondolom a B oszloptól az AF oszlopig január 1-től január 31-ig lennének a dátumok (csak nem látszik), de a tartalék mező csak jan.22-től van? akkor most csak jan22-jan31 közti mezőket vegye figyelembe? vagy a tartalék mezők ki lesznek bővítve? vagy nem tudom...
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
On Error GoTo xit
Set Target = Target.Cells.Item(1)
If Not Intersect(Target, Me.Range("B9:AF500")) Is Nothing Then
If Target = "tartalék" Then
x = WorksheetFunction.Match(Me.Cells(8, Target.Column), Me.Range("AI12:AR12"), 0) - 1
Me.Range("AI12:AI512").Offset(0, x).Find("") = Me.Cells(Target.Row, 1)
End If
End If
xit:
Application.EnableEvents = True
End Sub
ez a teljes(?) dátumtartományban (B-AF oszlopok) "figyel", és az AI12:AR12 cellákban lévő dátumokkal hasonlít össze, ezek persze kiterjeszthetők/lecsökkenthetők. -
bsh
őstag
válasz stivi1g #29979 üzenetére
és biker:
mindkettőtöknél "rossz helyen" van a kód (vagyis én nem úgy írtam, hogy onnan fusson, mert nem sok értelme lenne ezekben az esetekben). én úgy írtam, hogy az csak az adott munkalapon fusson. a képen bejelöltem, hová kell duplán kattintani (VBA Projekt (fájnév)\Microsoft Excel objects\munkalap_neve) és az úgy megnyíló ablakban legyen a kód. bocs a félreértésért -
bsh
őstag
üdv!
ha excel vba editorban kikapcsolom a "Microsoft Office 15.0 Object Library" referenciát és csak a "Microsoft Excel 15.0 Object Library"-t hagyom, abból lesz bajom? (nem kell belőle semmi elvileg, és ha ez is fel van véve referenciának, akkor kábé nem tudom használni a vbe-t mert minden kattintásra el akarja indítani az outlookot és annak beállító varázslóját ) -
bsh
őstag
-
bsh
őstag
válasz velizare #30222 üzenetére
üdv,
de van, csak kábé használhatatlan (szerintem).
With Application.CommandBars("workbook tabs").Controls(16)
If Right(.Caption, 3) = "..." Then .Execute Else .Parent.ShowPopup
End With
az a baja, hogy csak akkor van tényleges dialog, ha 16-nál több munkalap van, máskülönben csak egy popup jelenik meg, és én még nem bírtam rákényszeríteni sehogy, hogy mindig a teljes dialog jelenjen meg.
szerintem egyszerűbb egy userform és rajta egy listbox. (vagy userform nélküli listbox, ha az is elég) -
bsh
őstag
válasz velizare #30227 üzenetére
Application.CommandBars.Item("Workbook tabs").ShowPopup
de szerintem ez használhatatlan, alig látni, az egyszeri user meg lehet észre se veszi, hogy most tőle tulajdonképpen inputot vár a makró, mindenképp át is vált a kiválasztott lapra, satöbbi satöbbi...
én inkább userformmal vagy dialogsheettel csinálnám. -
bsh
őstag
válasz Delila_1 #30285 üzenetére
vagy például amivel a minap ..optam: egy ilyen megrendelési szám: 302000060500, ezt ugye a nagyonokos excelje tudományos formátumra alakítja, ami nem jó... és hiába állítom át szövegre a cellaformázást, akkor is úgy jelenik meg, egészen addig, amíg nem próbálom meg szerkeszteni. ezért egyéni formátumra "@" kell állítanom minden cellát preventíven, de akkor meg "##########" jelenik meg cella teljes szélességében, és azt írja a tooltip, hogy a "negatív vagy túl hosszú dátumok" így jelennek meg... milyen dátumok könyörgöm, amikor ez egy formázatlan szöveg?! de legalább másolni jó értéket másol...
Új hozzászólás Aktív témák
- World of Warcraft Shadowlands Collectors edition EU EN
- Microsoft licencek a KIVÉTELES ÁRAK - UTALÁSSAL IS AUTOMATIKUS KÉZBESÍTÉS - Windows és Office
- PC JÁTÉKOK (OLCSÓ STEAM, EA , UPLAY KULCSOK ÉS SOKMINDEN MÁS IS 100% GARANCIA )
- Windows 10 11 Pro Office 19 21 Pro Plus Retail kulcs 1 PC Mac AKCIÓ! LEGOLCSÓBB! Automatikus 0-24
- Steames kulcsok jó áron eladóak!