Citat:
Ursprungligen postat av MasterChief
RC-propertyn kan vara ett elände och därför är det alltid lättare att lära sig skriva koden själv när det gäller just funktioner. Makroinspelningen skapar även otroligt mycket onödig kod som inte behövs. Just RC[23] är bara en relation till vilken cell som är markerad när du spelar in makrot. Alltså inte helt dugligt i alla lägen. Men inspelningsfunktionen tjänar ändå ett syfte om man snabbt vill ha koden för till exempel formatering av celler. Det är en plåga att skriva själv och man får mycket av grundstrukturen gratis. När jag kodade så använde jag just inspelningen som komplement vilket ju är enkelt då den skapar en egen modul med allt väl avgränsat. Sedan är det bara att plocka ut godbitarna.
Att lägga till rader och kolumner och sedan ha VBA-kod är inte en god idé om man använder sig av specifika cellreferenser. Det finns en anledning att många xlsm-filer är så låsta. Räcker med att man infogar en liten cell så är koden förbrukad. Men det går ju att komma runt genom att inte använda sig av referenser till specifika celler utan man låter skriptet generera detta själv genom att räkna ut vilken cell som är aktuell och sedan använder denna i formeln.
|
haha ja, om man inte är ensam att jobba i ett dokument så är det ju ungefär 100% sannolikhet att dokumentet är förstört efter 4h
Nu är detta dokument enbart till för mig själv och för att skapa rapporter åt andra, men bara jag som arbetar i det.
Hur menar du med att låta scriptet generera det själv? Jag kanske borde skicka med en kopia på mitt dokument så att du förstår hur det funkar
Men egentligen
Kolumn A & B är referensvärdet, dvs det alla formler börjar med att söka ifrån (IF sats som tar första värdet bara, saknas A, tas B)
I mitt fall ett servernamn, värde A är oftast FQDN, medans värde B är hostnamn.
Kolumn C-M information från system X
Kolumna N-W information från System Y
Så länge jag ej flyttar på kolumn A eller B så kommer med andra ord mina formler alltid att ha rätt fält att söka i, och populerar jag koden via VBScript så hamnar koden alltid i rätt kolumn.
Formlerna söker oftast flera gånger mot dessa kolumner, tex denna kod
Kolumn H (första sökningen)
=IFERROR(IFNA(VLOOKUP(A4;CMDB!$A$2:$A$8000;1;FALSE );(VLOOKUP(B4&"*";CMDB!$A$2:$A$8000;1;FALSE)));"")
Kolumn I (Andra sökningen)
=IFERROR(IFNA(VLOOKUP(A4;CMDB!$A$2:$A$8000;1;FALSE );(VLOOKUP("*"&B4&"*";CMDB!$A$2:$A$8000;1;FALSE))) ;"")
Just av den anledningen att alla våra system använder ej FQDN, ibland har det smygit sig in någon prefix, eller något annat efter hostnamn än vad som borde vara där.
Överlag tror jag att jag borde bygga mina sökningar mot INDEX funktionen istället, men jag har inte riktigt greppat den, har använt den på IP-adresser där man oftast har fler än 1 med samma FQDN som referensvärde.
Servernamn är dock alltid unika.
Med det sagt så har jag i alla fall fått till formelpopuleringen via VB nu, alla formler populeras i första raden, och sedan körs en count på antal rader i kolumn A, och efter det kör den AutoFill på alla kolumner, motsvarande antal rader. Så funktionen är uppnådd
Nu ska jag nog bara fortsätta optimera koden.
Samt försöka ett bättre sätt att lagra datat, just nu ligger det i enskilda flikar i dokumentet, bättre vore att datat hämtades från .CSV filer (vilket är orginaldatat) från en folder på min PC tex, så behöver jag inte ens uppdatera det, bara byta ut filerna.
Eller finns det bättre lösningar, exceldatabas körde jag förut men gick ifrån det av någon anledning.