Új hozzászólás Aktív témák
-
#90999040
törölt tag
válasz dani850430 #1364 üzenetére
Ha csak 1-szerű sorbarendezést szeretnél:
Private Sub Command2_Click()
Dim rendezendoe As Boolean
Dim szamlalo As Integer
Dim temp As String
Do
rendezendoe = False
For szamlalo = 0 To List1.ListCount - 2
If (List1.List(szamlalo) > List1.List(szamlalo + 1)) Then
rendezendoe = True
temp = List1.List(szamlalo)
List1.List(szamlalo) = List1.List(szamlalo + 1)
List1.List(szamlalo + 1) = temp
End If
Next
Loop Until rendezendoe = False
End Sub -
#90999040
törölt tag
-
#90999040
törölt tag
válasz ArchElf #1421 üzenetére
Ez így tökéletesen működik:
Class RelStore
'Cache Time 5 min
Private d_Timer
Private b_Member
Private b_Init
Private VALIDITY
Private Sub Class_Initialize
VALIDITY = 300
d_Timer = 0
b_Member = False
b_Init = False
End Sub
Public Function Initialize(Membership)
d_Timer = Timer
b_Member = Membership
b_Init = True
End Function
Public Sub Invalidate()
Class_Initialize
End Sub
Public Function IsMember()
IsMember = b_Member
End Function
Public Function IsValid()
IsValid = (b_Init AND ((Timer > d_Timer + VALIDITY) OR (Timer < d_Timer)))
End Function
End Class
Set rs = new RelStore
DebugWrite rs.isvalidSzerintem ez: htCache(SearchString) nem RelStore classt ad vissza.
-
#90999040
törölt tag
válasz Zsargon89 #1424 üzenetére
Visual Basic 2008-ra javaslom a következőket:
A Long-okat cseréld le Integer-re.
Az inputboxokat pedig módosítsd így:
v = Integer.Parse(InputBox("Válasszon az alábbi lehetősékeg közüll" & Chr(13) & Chr(10) & "1- 6 számjegyű számláló" & Chr(13) & Chr(10) & "2- 7 számjegyű számláló"))Az Integer.Parse() (vagy más konverziós függvény) azért kell, mert Vb.net-ben az inputbox stringet ad vissza.
-
#90999040
törölt tag
válasz Zsargon89 #1444 üzenetére
Elindítod a Vs 2008-at.
File -> New -> Project...
A megjelenő ablakban létrehozol egy Forms projektet.
Project -> Add Module...
A létrehozott modulba bemásolod a kódodat, majd megcsinálod vele, amiket előzőleg írtam.
A modulba ezután beleteszed ezt:Sub Main()
TEST()
End SubHa ez megvan, akkor Solution Explorer ablakban*** dupla katt a "My project"-re.
Itt az Application fülön az "Enable Application Framework" elől a pipát kiveszed.
Ugyanezen a fülön "Startup Object"-nél a "Sub Main"-t választod ki.
Ha mindent jól csináltál, akkor F5-re indulnia is kellene a programnak.***: ha nem látszik ez az ablak, akkor View -> Solution Explorer
[ Szerkesztve ]
-
#90999040
törölt tag
ezt kell a kívánt Word doksiba, vagyis a célfájlba írni
Ha a Word konstansait definiálod az Excelben, akkor Excelben is használható.
Az Excel ugyanis alapból nem tudja a Word konstansait. Pl.:Const wdSendToPrinter = 1
Ezeket az értékeket meg tudod nézni Wordben úgy, hogy kiiratod őket. Pl.:
Debug.Print wdSendToPrinter
-
#90999040
törölt tag
Ha az Excel VBA Tools >> References résznél hozzáadod a Microsoft Word x.y Object Library-t, akkor használhatod a Word objectumait.
Dim wrdApp As Word.Application
Dim wrdDoc As Word.Document
Set wrdApp = CreateObject("Word.Application")
wrdApp.Visible = True
Set wrdDoc = wrdApp.Documents.Add
'wrdDoc.Close
'wrdApp.QuitEz Excelből elindít egy word alkalmazást, hozzáad egy dokumentumot, és ha az utolsó 2 sor elejéről kiveszed az aposztrofokat, akkor be is zárja.
Persze lehetne a referencia hozzáadása nélkül is, akkor viszont a Word.Application és a Word.Document helyett Object-eket kellene írni.Természetesen a word-ből is lehet az excel objektumait használni.
Csak mint írtam, ekkor alapból nem "ismerik fel" a másik alkalmazás konstansait. ezért kell ezeket külön definiálni, mert különben teljesen mást csinál a kód, mint amit szeretnénk...
-
#90999040
törölt tag
válasz Cpt. Flint #1486 üzenetére
És a másik alkalmazás VBA utasításkészletét is? Tehát levezényelhetném az excelből (DDEExecute nélkül) a körlevélkészítést a MailMerge-vel valami módon?
Természetesen. A legegyszerűbb, ha az excel vba referenciáihoz hozzáadod a "Microsoft Word x.y Object Library"-t. Ez után már használhatod pl. így(vilag #1472-es hozzászólása alapján):
Dim wrdApp As Word.Application
Dim wrdDoc As Word.Document
Set wrdApp = CreateObject("Word.Application")
With wrdApp
.Visible = True 'látszik a word alkalmazás
Set wrdDoc = .Documents.Open(".doc fájl neve") 'megnyitja a word documentumot
.ActiveDocument.MailMerge.MainDocumentType = Word.wdFormLetters
.ActiveDocument.MailMerge.OpenDataSource Name:=".xls fájl neve", _
LinkToSource:=True, _
Format:=Word.WdOpenFormat.wdOpenFormatAuto, _
Connection:="Munka1$", _
SQLStatement:="SELECT * FROM `Munka1$`"
With .ActiveDocument.MailMerge
.Destination = Word.wdSendToPrinter
.SuppressBlankLines = False
With .DataSource
.FirstRecord = 14
.LastRecord = ig2 'saját változó
End With
.Execute Pause:=False 'Mailmerge futtatása
End With
End With
'wrdDoc.Close 'documentum bezárása
'wrdApp.Quit 'word bezárása
'takarítás
'Set wrdApp = Nothing
'Set wrdDoc = Nothing -
#90999040
törölt tag
válasz öcsi-bácsi #1488 üzenetére
Másolás közben kerüld a Select és az Activate használatát!!!
Dim munkalap As String
munkalap = "munka1"
Worksheets(munkalap).Range("a1:c3").Copy _
Destination:=Worksheets(munkalap).Range("e1")Ha a másolás után a célterületet szeretnéd aktívan látni, akkor arra add ki a Select-et.
-
#90999040
törölt tag
válasz öcsi-bácsi #1491 üzenetére
Pontosan ezekről beszéltem. Ezt a kódot így is meg lehetne csinálni:
Sheets("munka1").Select
pass = "123456789"
Sheets("munka2").Unprotect pass
Sheets("munka1").Range("a1").Copy Destination:=Sheets("Munka2").Range("A1")
Sheets("munka2").Protect Password:=passEz pontosan azt csinálja, amit a Tiéd, csak nem 11, hanem 5 sorban.
Újra kihangsúlyozom: VBA-ban a Select és az Activate használatát csak elkerülhetetlen esetben célszerű használni, így a legtöbb esetben az Application.ScreenUpdating használata is feleslegessé válik(kivéve, ha az aktív munkalapra másolsz nagy mennyiségű adatot), valamint a kód is áttekinthetőbb.[ Szerkesztve ]
-
#90999040
törölt tag
Van rá lehetőség, winapi mouse_event(), vagy SendInput() függvényével.
A mouse_event() használata egyszerűbb, de a MS már új fejlesztésekhez nem ajánlja. A SendInput() bonyolultabb, de ezzel pl. billentyűlenyomást is lehet generálni, és a MS ezt ajánlja inkább...
-
#90999040
törölt tag
Gondolom exit eseményt akartál írni, mert az exit sub egy kicsit más.
A lényeg az, hogy ez nem csak akkor következik be, ha az utolsó aktív vezérlőről van szó, hanem amikor egy frame-n belüli vezérlőről átváltasz egy frame-n kívülire. Ugyanis ilyenkor nem a frame-n belül levő vezérlő exit-je fut le, hanem a frame exit-je.
Ezt pl. így ki lehet kerülni:
A userformon belül létrehozol egy Control típusú változót, pl.: Private active As Control
Ezután az adott frameben levő minden vezérlőjének Enter() eseményébe beírod ezt: Set active = Me.<Frame neve>.ActiveControl
Az adott vezérlőd exit()-jébe pedig ezt:
Private Sub <Vezérlőd>_Exit(.........
If Not active Is Nothing Then
'itt lehet meghívni az eseményt
End If
End SubEz mellett persze még a frame exit()-jét is le kell kezelni:
Private Sub <Frame neve>_Exit(.......
If Me.<Vezérlőd>.Name = Me.<Frame neve>.ActiveControl.Name Then
Set active = Nothing
'itt ugyanúgy meghívod a vezérlőd exit()-jénél végrehajtandó kódot
End If
End Sub
Új hozzászólás Aktív témák
- Robot fűnyírók
- Autós topik
- Apple Watch Sport - ez is csak egy okosóra
- Motorola Edge 40 neo - színre és formára
- Vezetékes FEJhallgatók
- Android alkalmazások - szoftver kibeszélő topik
- LEGO klub
- Xiaomi 13T és 13T Pro - nincs tétlenkedés
- gban: Ingyen kellene, de tegnapra
- Macska topik
- További aktív témák...
- AKCIÓ Új Dobozos Macbook Pro dokkoló új ára 70.000 forint
- ThinkPad Hybrid USB -C USB -A Dock 40AF Új ára 80.000 Forint Ingyen szállítás
- Xiaomi Redmi Note 9s 128/6 GB 34.9E !!!
- Új Hp Pavilion 15-eh Fémházas Szuper Laptop 15,6" -30% AMD Ryzen 7 5700U 8Mag 16/1TB FHD MATT
- ATI RADEON RX 480 -8 gb DDR5 256 bit videokártya