Hirdetés

2024. április 24., szerda

Gyorskeresés

Útvonal

Fórumok  »  Szoftverfejlesztés  »  Visual Basic

Hozzászólások

(#3001) sztanozs válasza smallmer (#3000) üzenetére


sztanozs
veterán

A legegyszerűbb lenne, ha a sablon makrója nyitná meg a 200 excel fájlt (darabra, vagy egyszerűen csak az adott helyen levő és szabálynak megfelelő nevű fájlokat), szépen megnyitná a munkalapokat, megnézné az adatokat és vagy copy/paste vagy adatmásolással átrakná a sablon fájlba (és az elmentené más néven).
Igazából szerintem ehhez mindent megtalálsz stackoverflow-n:
Open
Copy/Paste szűrve

JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...

(#3002) smallmer válasza sztanozs (#3001) üzenetére


smallmer
őstag

Sajnos a sablon makróját nem én készítettem és le van lockolva, nem kaphatok hozzáférést, tehát másképpen kellene megoldani.

(#3003) sztanozs válasza smallmer (#3002) üzenetére


sztanozs
veterán

Ok, akkor ez nem annyira járható út. De simán tudsz csinálni egy másik excelt, ami először betölti a sablon-t és utána a többi excelt.
Amennyiben a sablon fájlban publikus-ként van definiálva a funkció/szubrutin, amit el akarsz érni, akkor azt probléma nélkül meg tudod tenni másik fájlból is (csak fel kell venned a sablon fájlt referenciaként).

[ Szerkesztve ]

JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...

(#3004) smallmer válasza sztanozs (#3003) üzenetére


smallmer
őstag

meg kell néznem este, hogy hogyan működik a dolog, viszont azt nem tudom, hogy visual basicet honnan tudom telepíteni? nincsen beépítve a win10-be?

KÖZBEN MEGTALÁLTAM

[ Szerkesztve ]

(#3005) smallmer válasza sztanozs (#3003) üzenetére


smallmer
őstag

Amit linkeltél két stack leírást felhasználtam.

myPath = " ide megadtam a fájlok elérési útját "

viszont ha futtatom akkor ugye kéri a macro-t amelyiket használja a megnyitás után. azt megadom neki és egyből jön egy hibaüzenet, hogy

compile error:
invalid outside procedure

mit ronthattam el? :) köszönöm :R

(#3006) Delila_1 válasza smallmer (#3005) üzenetére


Delila_1
veterán

Vidd be az utvonal állandóba a saját útvonaladat, a *****-os sorban meg add meg a sablon fájlod-, és a benne lévő makró nevét.
Mivel sok fájlról van szó, hogy ne unatkozz közben, a státuszsorban kiírja 10 darabonként a másolások számát.

Sub osszemasolo()
Dim FN As String, i As Integer
Dim FD, utvonal As String
Const utvonal = "D:\Főmappa\almappa\" 'jöhet a megnyitás, másolás"

ChDir utvonal
FN = Dir("*.xlsx")
Do While FN <> ""
i = i + 1
Workbooks.Open Filename:=FN, ReadOnly:=True
MsgBox "Itt másolgatunk", vbInformation
'A már kész makrót itt hívhatod meg: workbook("sablon_fájl.xltx").makró_neve *****
Workbooks(FN).Close False
FN = Dir()
If i Mod 10 = 0 Then Application.StatusBar = "Másolva: " & i & "db fájl!"
Loop
Application.StatusBar = False
MsgBox "Befejeződött az összemásolás", vbInformation, "Fájlok összemásolása"
ActiveWorkbook.Save
' ActiveWorkbook.Close
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.

(#3007) sztanozs válasza smallmer (#3004) üzenetére


sztanozs
veterán

VBA van office-ban, a fejlesztői felületet Alt+F11-el tudod megnyitni (ha nyitva van az Excel).

JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...

(#3008) smallmer válasza Delila_1 (#3006) üzenetére


smallmer
őstag

sajnos a sablon fájlban le van lockolva a makró. Ez nem probléma? :)

(#3009) Delila_1 válasza smallmer (#3008) üzenetére


Delila_1
veterán

A nevét sem tudod? Mert csak azt kellene beírnod a fájl-behívós makróba.

Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.

(#3010) smallmer válasza Delila_1 (#3009) üzenetére


smallmer
őstag

azt kiírja az excel a makrókhoz. Most magában a kódban azt csinálja csak mintha én kézzel megnyomnám?

(#3011) vilag válasza Apollo17hu (#2998) üzenetére


vilag
tag

Köszönöm!

Meg fogom tenni.

(#3012) vilag válasza sztanozs (#2999) üzenetére


vilag
tag

Van ötlet, hogy milyen módon lehetne megoldani a problémát?

Röviden annyi lenne, hogy otthagyom nekik a programokat használatra, viszont nem szeretném ha egyrészt a kódban babrálnának, másrészt azt sem akarom, hogy le tudják azt nyúlni.
Ezért gondoltam, hogy amolyan bünti lenne, hogy törli magát a kód ha hozzá akarnak nyúlni vagy le akarják nyúlni.

Most is törölhetném a kódokat, de akkor azokkal a kollégákkal tolnék ki akiket szeretek.

Egyébként "mennyire könnyű" feltörni a projektet ha jelszavazom?

[ Szerkesztve ]

(#3013) sztanozs válasza vilag (#3012) üzenetére


sztanozs
veterán

VBA jelszót feltörni triviálisnak tűnik (google első találat): [link]

JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...

(#3014) vilag válasza sztanozs (#3013) üzenetére


vilag
tag

Nagyon kellene egy használható ötlet a projektkód védelmére, mert már csak 15-éig férek hozzá.

Ötlet?

(#3015) vilag


vilag
tag

Azt esetleg tudja valaki, hogy ha kilépek a munkafüzetből mentés nélkül, akkor miért dobja fel ezt az ablakot, amit 10 alkalommal kell "mégsézni"?

Annyi az érdekesség, hogy ha csak megnyitom a munkafüzetet és bezárom mentés nélkül akkor nem dobja fel, ha viszont már használom valamelyik gombot (amihez ugye kód is van), akkor már feldobja.
Még érdekesebb, hogy egyébként a Workbook Openben is van kód, ami ugye mindenképp lefut, ez mégsem idézi elő az ablak felbukkanását.

Van ötlet?

Továbbra is várnék valami javaslatot a programkód védelmére!
Remélem van valakinek ötlete. Nem tudom szavakba önteni mennyire.
Ez a kód majdnem olyan mintha az egyik gyermekem lenne, nem akarom, hogy lenyúlják.
Mégis csak 8 éve javítgatom.

Köszönöm!

[ Szerkesztve ]

(#3016) martonx válasza vilag (#3015) üzenetére


martonx
veterán

Ha emlékszel annak idején a legelső volt, amit mondtam a VBA-val kapcsolatban, hogy ez csak játszós nyelv. BÁRMI komoly dolgot akarsz írni, akkor ne ezt válaszd. Szóval engedd el.

Én kérek elnézést!

(#3017) sztanozs válasza vilag (#3014) üzenetére


sztanozs
veterán

Ha 5 nap alatt át tudod fordítani VBA-ból VB.NET-be (és XLL-be befordítod), akkor nagyjából effektíven meg tudod védeni a belenyúlás és a forráskód megszerzése ellen. Más ésszerű lehetőséged nem nagyon van.

mod: ezt találtam még neked: [link]

Másrészről egyáltalán nem etikus, amit szeretnél. Bár éveket dolgoztál rajta, de ezt a cég érdekében (vsz a munkavégzés automatizálásából) tetted. Bár lehet, hogy rossz érzés magad mögött hagyni, mégis csak legalább annyira (igazából sokkal inkább) a cégé a kód, mint a tiéd. Alapesetben igazából magaddal sem viheted, hacsak a cégtől erre vonatkozóan nem kapsz egyértelmű felhatalmazást.

[ Szerkesztve ]

JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...

(#3018) batagy


batagy
őstag

Sziasztok!

Tudnátok légyszi segíteni?

Excelt speciális Visual Basic kóddal használjuk. Windows 7 és Office 2016 kombinációval jól működik.
Windows 10-en azonban hibát kapunk.

A Macro engedélyezve van, és nem jogosultsági problémára gyanakszok.

Ezt a hibát kapom az Excel megnyitásakor:
Microsoft Visual Basic for Applications
Compile error:
User-defined type not defined

A VBA editor erre a kódrészletre ugrik:

Option Explicit

Private myDOMDocument As New DOMDocument
Private myRoot As IXMLDOMElement
Private myValidation As IValidation
Private myIsError As Boolean

Én nem tudok Visual basicban programozni. De ezt találtam. Próbálnék egy Set-et beállítani, de akkor meg "Invalid Outside procedure" hibát kapok. Viszont nem tudom, hogyan illesszem eljárásba.

Tudnátok-e segíteni az eredeti hibánál?

Köszönet!

[ Szerkesztve ]

(#3019) sztanozs válasza batagy (#3018) üzenetére


sztanozs
veterán

Valószínüleg a megfelelő referenciák nincsenek beállítva. Illetve a Win10-es gépen nincs fent az az XML verzió, ami be van hivatkozva.

[ Szerkesztve ]

JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...

(#3020) batagy válasza sztanozs (#3019) üzenetére


batagy
őstag

Szia!

Köszönet! Tényleg, igazad volt!
A tipped alapján csekkoltam az XML-t a VBA Referenciákban.

Ez látható alapból:

Ha az XML 6.0-ás verzióvól kiveszem a pipát, és berakom a 3.0-ás XML-t, akkor már működik, nincs hibaüzenet.

Neten keresve ezt és ezt találtam, ami ide vonatkozik.

"On the other hand Microsoft XML, v3.0 exposes DomDocument, DomDocument26 and DomDocument30; version is 6.30.8250.0

With other versions of Windows, like 7 and XP, both msxml3.dll and msxml6.dll expose DomDocument, DomDocument30 and DomDocument60, among others."

Ha jól értem, kétféle megoldás lehet?
1) A referenciát átírni XML 3.0-ra minden ilyen Excel fájlban? De ez hosszú távon, lehet hogy nem célravezető.
2) A DomDocument interface-t átírni olyanra hogy msxml6.dll-tal is kompatiblis legyen?

Olyanra kellene megírni, hogy Win7 gépeken is fusson és kvázi (a userek számára) visszafelé is kompatibilis legyen.

Köszönet!

2)

(#3021) sztanozs válasza batagy (#3020) üzenetére


sztanozs
veterán

Late Binding kell, és az majd működik mind a kettő verzióval.

JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...

(#3022) batagy válasza sztanozs (#3021) üzenetére


batagy
őstag

Az az érdekes egyébként, hogy mind Win7-n, mind Win10-en is a Microsoft XML, v6.0” (C:\Windows\System32\msxml6.dll ) van behivatkozva az Excel fájlban, de csak Win7-en működik.

A két dll verzió eltér:
Win10:
-------
C:\Windows\System32\msxml3.dll
MSXML 3.0
Microsoft XML Core Services
8.110.16299.15

C:\Windows\System32\msxml6.dll
MSXML 6.0
Microsoft XML Core Services
6.30.16299.98

Win7:
-----

C:\Windows\System32\msxml3.dll
MSXML 3.0 SP11
Microsoft(R) MSXML 3.0 SP11
8.110.7601.23648

C:\Windows\System32\msxml6.dll
MSXML 6.0 SP3
Microsoft(R) MSXML 6.0 SP3
6.30.7601.24000

Tehát, a msxml6.dll újabb verziójában már módosulhattak az interface-ek. Ez lehetséges?

Az csak egy workaround, hogy msxml3.dll-lel működik Win10-en.

Kösz

(#3023) Lokids


Lokids
addikt

Sziasztok!

Szeretnék csinálni egy Érvényesítési beállítást egy cellába makróval:

Sub Makró2()
Range("B11:B16").Select
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:= _
"=INDIREKT(HELYETTE(HELYETTE(C8;"","";"""");"" "";""""))"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
End Sub

ez hibára fut: 1004. Application-defined or object defined error.

Azért furcsa, mert ezt a makró rögzítővel csináltam. Ha végigkattintom az érvényesítés menüt és beírom a képletet, akkor megcsinálja.

=INDIREKT(HELYETTE(HELYETTE(C8;",";"");" ";""))

If you chase two rabbits you will lose them both.

(#3024) Lokids válasza Lokids (#3023) üzenetére


Lokids
addikt

Azt a jó édes...
Mert persze, hogy a MAGYAR OFFICE mellé a VB ANGOL nyelvű (ami a része), és nem érti, hogy milyen függvényeket akarok használni. :W :W :W :W :W :W :W

If you chase two rabbits you will lose them both.

(#3025) Delila_1 válasza Lokids (#3024) üzenetére


Delila_1
veterán

Magyar függvények angol megfelelőjét így tudhatod meg:

Beírod a lapra a függvényt – persze úgy, hogy működjön is, helyes hivatkozásokkal.
Lapfülön jobb klikk, Beszúrás, Nemzetközi makrólap. Az új lapra átmásolod az előbbi függvényt, a hivatkozott cellákkal együtt. Megkapod az angol elnevezést.

Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.

(#3026) Zoleeh


Zoleeh
csendes tag

Sziasztok!

Egy egyszerűnek tűnő, de számomra eddig megoldhatatlan feladatban szeretnék segítséget kérni. Adott egy letöltött excel fájl, amelynek egyik oszlopában ilyen formátumban szerepelnek a dátumok:
2018.04.17. 17:30
2018.04.17. 16:59
2018.04.17. 14:54
2018.04.17. 14:09
A cellák formátuma "Általános", amely F2 és Enter után átalakul a kívánt dátumformátumra "éééé.hh.nn ó:pp". Ezt szeretném automatizálni egy makróval, átolvasva a fórumokat 3 megoldást találtam, de mindegyik ugyanott vérzik el.
Vagyis, a makrófelvételnél minden tökéletesen működik, de ha a rögzített makrót futtatom az eredeti fájlon hibaüzenet nélkül lefutnak a makrók, de a cellák formátuma nem változik maradnak "Általános". :W
A megoldásaim:
1. Egy üres cellába "1" írok, majd másolás és a dátumok kijelölése után "Speciális beillesztés" Szorzás.
Sub Rögzítés1()
'
' Rögzítés1 Makró
' Rögzítette: xy, dátum: 2018.04.17.
'

'
Cells(ActiveSheet.UsedRange.Rows.Count + 1, 1).Select
ActiveCell.FormulaR1C1 = "1"
Selection.Copy
Range(Cells(2, 1), Cells(ActiveSheet.UsedRange.Rows.Count - 1, 1)).Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlMultiply, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
End Sub

2. A tartomány kijelölése után a ". " cseréje " "-ra
Sub Rögzítés2()
'
' Rögzítés2 Makró
' Rögzítette: xy, dátum: 2018.04.17.
'

'
Range(Cells(2, 1), Cells(ActiveSheet.UsedRange.Rows.Count, 1)).Select
Selection.Replace What:=". ", Replacement:=" ", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
End Sub

3. A tartomány kijelölése után "Szövegből oszlopok"
Sub Rögzítés3()
'
' Rögzítés3 Makró
' Rögzítette: xy, dátum: 2018.04.17.
'

'
Range(Cells(2, 1), Cells(ActiveSheet.UsedRange.Rows.Count, 1)).Select
Selection.TextToColumns Destination:=Range("A2"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
:=Array(Array(1, 1), Array(2, 1)), TrailingMinusNumbers:=True
End Sub

Tudjátok mi lehet a megoldás? Vagy írjak egy makrót a For Sendkeys F2 Enter Next parancsok felhasználásával?

Köszi

(#3027) Zalanius válasza Zoleeh (#3026) üzenetére


Zalanius
tag

Nem tudom teljesen reprodukálni az alaphelyzetet, de van itt egy egyszerű megoldás. Új standard modulba beírtam ezt:

Sub FormatZoleehDates()
For Each c In ActiveSheet.UsedRange.Cells
c.NumberFormat = "m/d/yyyy"
Next
End Sub

Nyilván a numberformatot lehet még alakítani. Kipróbálás: beírtam pár dátumot egy tartományba, átkapcsoltam custom -> general beállításra a formatot, utána kijelöltem, és ráküldtem a fentit.

--= Zalán =--

(#3028) Zalanius válasza Zalanius (#3027) üzenetére


Zalanius
tag

Csak egy kis kiegészítés, mert a szerk. idő lejárt: nyilván más esetekben célszerűbb lehet inkább Selection.Cells kollekcióra futtatni a ciklust, a példában egy töküres lapon csak a dátumos cellák szerepeltek, ezért volt mindegy.

--= Zalán =--

(#3029) Zoleeh válasza Zalanius (#3027) üzenetére


Zoleeh
csendes tag

Köszi!

Kipróbáltam, de nem működik, ahogy az én megoldásaim sem. Átállítja a formátumot, de csak F2 + Enter után veszi azt fel az adott cella.
Közben találtam egy megoldást, itt a fórumon olvasott alapján. Mivel az én esetemben az 1., 6. és 7. oszlop tartalmaz átalakítandó ("m/d/yyyy h:mm" formátumra) dátumot , de az 1. és 6. mindig ugyanaz, és a 6. és a 7. csak az időben különbözik mindig. Ezért működik ez:

For n = 2 To ActiveSheet.UsedRange.Rows.Count
Cells(n, 1).FormulaR1C1 = DateValue(Cells(n, 1))
Cells(n, 6).FormulaR1C1 = TimeValue(Cells(n, 6))
Cells(n, 7).FormulaR1C1 = TimeValue(Cells(n, 7))
Next n

Dehogy ha mindhárom oszlop más napot és időt tartalmazna nem tudom mi lenne a megoldás. :((

[ Szerkesztve ]

(#3030) Lokids


Lokids
addikt

Sziasztok!

Mi a hiba itt? Nem tudok rájönni.

Workbooks(Output_F_Name).Worksheets(s_wsName).Range("F" & s_OutRow).Formula = "=Sum(F" & RowStart & ":F " & Rowend & ")"

Első körben az F2:F8-at kellene összeadnia. Ha nem változót írok bele, akkor meg is csinálja.
A változók megfelelő értéket kapnak.

[ Szerkesztve ]

If you chase two rabbits you will lose them both.

(#3031) Delila_1 válasza Lokids (#3030) üzenetére


Delila_1
veterán

Esetleg a RowStart vagy a Rowend nem szám. Szorozd meg 1-gyel a változót.

Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.

(#3032) Lokids válasza Delila_1 (#3031) üzenetére


Lokids
addikt

Mind a kettő integer.

Áthidaltam úgy, hogy előtte egy stringbe átrakom az egészet és azt teszem bele a sum-ba. Csak az ugye +1 sor. :(

If you chase two rabbits you will lose them both.

(#3033) sztanozs válasza Lokids (#3030) üzenetére


sztanozs
veterán

van az "F: "-ben a kettőspont után egy space

[ Szerkesztve ]

JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...

(#3034) Lokids válasza sztanozs (#3033) üzenetére


Lokids
addikt

:R :Y :R :W :W :W :W :W :W :W :W :W

Azt tudja valaki, hogy lehet makrózni azt, hogy adja össze az összes Sum-ot?
A táblázat összegeket számol, sorokban projektenként van egy összegzés.
De kellene raknom a végére egy végösszeget, ami összeadja az összes sum-ot.
Ha z excelben rákattintok a sum-ra, akkor ő okosan kijelöli nekem a már Sum-ot tartalmazó cellákat. De a képletbe valami Formula R1C1 cucc van, amit nem értek.

If you chase two rabbits you will lose them both.

(#3035) sztanozs válasza Lokids (#3034) üzenetére


sztanozs
veterán

Kapcsold ki az R1C1-et a beállításokban, és akkor rendesen mutatja majd:

[ Szerkesztve ]

JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...

(#3036) Lokids válasza sztanozs (#3035) üzenetére


Lokids
addikt

Ez a beállítsá alapból ki van szedve. Viszont a makró az akkor is abban rögzít. :(

If you chase two rabbits you will lose them both.

(#3037) Delila_1 válasza Lokids (#3036) üzenetére


Delila_1
veterán

Az R kiinduló cellához képest a sor eltolását mutatja, a C pedig az oszlopét. Az eltolás mértéke a szögletes zárójelek közé írt érték. Ha nincs az R és/vagy a C után zárójeles érték, akkor a kiinduló cellával azonos sorról/oszlopról van szó. Ha zárójelek nélkül szerepel egy szám az R, ill. C mögött, az fix hivatkozást jelent.

R[-3]C[5] az aktív (vagy hivatkozott) cella fölötti 3. sor, és a tőle jobbra lévő 5. oszlop celláját jelöli.

RC[2] aktív cella sorában, tőle 2 oszloppal jobbra lévő cella.

A Range("G" & sor) = "=sum(RC1:RC5)" összegzi a sor A:F celláinak az értékét.

Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.

(#3038) gebic


gebic
csendes tag

Sziasztok!

Segítségeteket szeretném kérni.

Visual Studio 2017 Visual Basic - Microsoft.Office.Interop.Word extension

Feladat: VB-ből létrehozott Word dokumentumba beírni:

1 sor tetszőleges szöveg
2 sor vágólapról bemásolt vonalkód
3. sor tetszőleges szöveg.

Eddig a Range.Text értéket írtam, de azt vettem észre, hogy ha az első sor után beillesztem a vágólap tartalmát, akkor felülírja a Range.Text előző értékét.

Lehet több Range.Text-et kezelni?

Tudtok esetleg olyan oldalt, ahol ehhez hasonló példákat lehetne találni:

Private Function wordbeir()
Dim wa As Microsoft.Office.Interop.Word.Application
Dim wd As Microsoft.Office.Interop.Word.Document
Dim wp As Microsoft.Office.Interop.Word.Paragraph


wa = CreateObject("Word.Application")
wa.Visible = False

wd = wa.Documents.Add
wp = wd.Content.Paragraphs.Add
wd.PageSetup.LeftMargin = 1
wd.PageSetup.RightMargin = 1
wd.PageSetup.TopMargin = 1
wd.PageSetup.BottomMargin = 1


wd.PageSetup.PageHeight = 141
wd.PageSetup.PageWidth = 224
wp.Range.Text = "This text will be d"


AxStrokeScribe1.CopyToClipboard(80, 50)
wp.Range.Text = "Foo" & Chr(10) & Chr(11)

wd.Range.Next()

wd.Range.Paste()

'wd.Range.InlineShapes.AddPicture("c:\cimkezo\vkod.jpg")

' itt próbálkoznék azzal, hogy beíllesztek egy külső képfájlt,



wd.SaveAs("c:\cimkezo\cimke.docx")
wa.Quit()
End Function

(#3039) Zalanius válasza gebic (#3038) üzenetére


Zalanius
tag

Az első tipp látatlanban is, hogy ugyanannak a range objectnek a szövegét íratod át a második alkalommal is. Ha a beírandó részek különállóak, akkor például meg lehetne ismételni a Paragrahps.Add() hívást.

wp = wd.Content.Paragraphs.Add
wp.Range.Text = "This text will be d"
...
wp = wd.Content.Paragraphs.Add
wp.Range.Text = "Foo" & Chr(10) & Chr(11)

--= Zalán =--

(#3040) gebic válasza Zalanius (#3039) üzenetére


gebic
csendes tag

Szia Zalán!

Igen ez lesz nekem a megoldás. Valóban be kell szúrni egy következő Pararaph-t.

Most már csak annyi maradt a problémámból, hogy a feladat:
1. sor szöveg
2. sor beillesztett kép
3. sor szöveg.

Jelenleg ha beszúrom a képet, akkor a margók 1,1 poziciójába teszi be és felülírja az első sort.

Hogyan tudok úgy beszúrni egy képet, hogy megadom, hogy melyik X,Y koordinátára helyezze el a képet,
vagyis, a RANGE-en belül hova teyge.

Köszi: Gábor

(#3041) Zalanius válasza gebic (#3040) üzenetére


Zalanius
tag

Valami ilyesmire lesz akkor szükség. Ez most C#, a szélesség, fájlnév stb. átírandó, de a lényeg ugyanaz.

wp.Range.Text = "line1";
wp.Range.Paragraphs.Add();

Shape shape = wd.Shapes.AddShape(1, 0, 0, 200, 100);
shape.Fill.UserPicture(@"C:\kep.png");
InlineShape inlineShape = shape.ConvertToInlineShape();
inlineShape.Range.Cut();
wp.Range.Paste();
wp.Range.Paragraphs.Add();

wp = wd.Content.Paragraphs.Add();
wp.Range.Text = "Line2";

Lehet még variálni ezeket a range meg paragraph dolgokat, hozzáfűzéssel új object helyett stb. biztos van sokkal elegánsabb út is, ha valaki rászánja az időt. Ami ezeknél fontosabb, hogy ha ezután elmentjük a doksit, egy rakás referencia marad még lógva, azokat a COM dolgokat is illik eltakarítani. Tippek bővebben itt.

--= Zalán =--

(#3042) Bobrooney


Bobrooney
senior tag

Sziasztok!

Olyan problémám lenne, hogy van egy bitang sok adatot tartalmazó munkafüzetem több munkalappal.

A problémám:
Bizonyos gyümölcsök random előfordulhatnak egy munkalapon belül, és azt kell megvizsgálnom, ha valamelyik gyümölcsnél szerepel az X akkor annak a gyümölcsnek van-e legalább 1 olyan esete ahol nem X szerepel, ha nincs akkor hibás.

Hogy lehetne ezt úgy megoldani, hogy ne 10 perc legyen a futtatása, szóval minél egyszerűbb de hatékony megoldás kellene?

Konkrét megoldást nem kérek, csak valami nyomot amin elindulhatnék.

Köszi előre is!

[ Szerkesztve ]

(#3043) csaszizoltan válasza Bobrooney (#3042) üzenetére


csaszizoltan
csendes tag

Szia!

Gondolom az egyes celláinak elérése nem gyors vagy minden X találat után indítasz egy új átfésülést, ami fölösleges ezért
Rakd tömbbe a gyümölcsneveket (ha sokféle van, kb 100-nál több akkor bináris fába, ahol a fa egyes mutatói még két tömbben helyezkednek el tömbindexként) és másik két ugyanakkora tömbbe, hogy van X benne és van nem X benne. Ez az algoritmus egyszer fog végigfutni a munkalapon.
Érdekelne majd a "gyümölcsökre" megvalósított algoritmus, hogy beleszólhassak a gyorsabb futás érdekében.:)
Üdv:)

[ Szerkesztve ]

- Kivel és mit iszik Orbán? - Tök mindegy! Sörös vagy boros, csak közel legyen Soroshoz.

(#3044) Zalanius válasza Bobrooney (#3042) üzenetére


Zalanius
tag

Kipróbáltam két oszloppal, 10 ezer sorban, de nehezítésképpen úgy, hogy az első 5000-ben csak X volt mindenhol, és az egyik gyümölcsnél később is csak X volt. Nem is igazán mérhető a futásidő, fél másodpercnél is kevesebb. Tehát vagy rengeteg oszlopod lehet, vagy sok százezer sor, vagy még egyéb tényezők. De a 10 perc mindenképpen túlzás.

Tudom h nem kértél konkrétumot, de csak bemásolok ide egy rövidke scriptet, egyszerű megközelítésben, valami támpontot adhat azért.

Option Base 1

Sub t()

Dim gimilc()
Dim vannemX()
Dim n%, i%
Dim g As String

n = 1
ReDim Preserve gimilc(n)
ReDim Preserve vannemX(n)

gimilc(1) = Cells(2, 1).Value
vannemX(1) = False
If Cells(2, 2).Value <> "X" Then
vannemX(1) = True
End If
For i = 3 To 10000
g = Cells(i, 1).Value

Dim gindex%
gindex = -1
For j = 1 To n
If gimilc(j) = g Then
gindex = j
Exit For
End If
Next

If gindex = -1 Then
n = n + 1
ReDim Preserve gimilc(n)
ReDim Preserve vannemX(n)
gimilc(n) = g
vannemX(n) = False
If Cells(i, 2).Value <> "X" Then vannemX(n) = True
Else
If vannemX(gindex) = False Then
If Cells(i, 2).Value <> "X" Then vannemX(gindex) = True
End If
End If
Next

End Sub

--= Zalán =--

(#3045) Bobrooney válasza Zalanius (#3044) üzenetére


Bobrooney
senior tag

Köszi meglesem majd.

Végül rekorddal oldottam meg a bináris fához kevés voltam, meg időm sem volt rá sok, viszont lett lassú.

Most egy olyan problémám van, hogy vannak bizonyos cellák amikre van beállítva hyperlink, és azt kellene ellenőriznem, hogy ezek a hyperlinkek valós fájlokra vannak-e beállítva (mondjuk kitöröltek 1 fájlt, de a hivatkozás megmaradt). Sajna a fájlok átnevezése jelenleg nem kivitelezhető.

Ami itt a gondom, hogy némelyik fájlban van szóköz, [] zárójelek stb.. tehát amikor lekérdezem a hyperlink-et akkor a hivatkozásban "konyvtar\valami%5d%20f.docx" formában kapom vissza. Ezzel mit lehet mókolni, hogy a rendes fájlnevet kapjam vissza?
A hyperlinket így kérem le: Cells(3,3).Hyperlinks(1).Address

Köszi a válaszokat.

(#3046) Zalanius válasza Bobrooney (#3045) üzenetére


Zalanius
tag

Ez elég furcsa, efféle url encodingot automatikusan nem kellene kapnod, kipróbáltam saját fájlban is, simán benne hagyta a szóközöket. Van egyébként olyan beépített függvény Encodeurl néven, ami ilyen átalakításokat csinál, de a fordított irányról nem tudok (2013-assal bezárólag). Kerülő úton lehet megpróbálni, mondjuk cserékkel, lásd például itt.

--= Zalán =--

(#3047) Bobrooney válasza Zalanius (#3046) üzenetére


Bobrooney
senior tag

Köszönöm! Ez nekem megteszi szerintem! :R

(#3048) csaszizoltan válasza Bobrooney (#3045) üzenetére


csaszizoltan
csendes tag

"viszont lett lassú."

ugye jól feltételezem, hogy a nem szócska kimaradt, aminek örülnék :)

- Kivel és mit iszik Orbán? - Tök mindegy! Sörös vagy boros, csak közel legyen Soroshoz.

(#3049) Bobrooney válasza csaszizoltan (#3048) üzenetére


Bobrooney
senior tag

Igen jól gondolod :))
:R

(#3050) Bobrooney


Bobrooney
senior tag

Sziasztok!

Hyperlinkekkel van gondom, mergelt cellákon van beállítva, ha megváltoztatom a hyperlink-et, ha fölé viszem az egeret a régi hivatkozást mutatja (a szürke kis popupban) és a VBA kód is a régi hivatkozást mutatja az első cellára a többire pedig az újat.
Ezt nem minden esetben csinálja, ez mi a fene lehet, vagy hogy tudnám azt megoldani, ha módosítom a hyperlinket az mindegyik mergelt cellájában az legyen?

Pontosan nem jöttem rá.

Köszi előre is!

Útvonal

Fórumok  »  Szoftverfejlesztés  »  Visual Basic
Copyright © 2000-2024 PROHARDVER Informatikai Kft.