13. november 2003 - 15:37Der er
19 kommentarer og 1 løsning
Blandede excel spg. om godkendelse af makro, indtastning og gem.
Hej Jeg sidder med et regneark og har en række spørgsmål:
Regnearket skal bruges af andre end mig, de skal bruge det som et opslagsværk. Derfor er regnearket skrivebeskyttet. Når man lukker Excel spørger den alligevel om man vil gemme arket, kan man blive fri for det. Altså brugeren skal have mulighed for at gemme arket under andet navn, men han skal ikke promptes når han lukker regnearket.
Jeg skal indtaste en stor tabel med 8 gange ca. 2000 indgange. For nogle af søjlerne skal der lægges en værdi til, f.eks skal der ligges 50 til alle indtastninger i søjle 3 og 0,50 til indtastninger i søjle 4-7. Jeg kan jo lave 2 tabeller ved siden af hinanden, den jeg indtaster i og resultattabellen, men er der ikke en smarere måde at gøre det. Jeg tænker især på at tabellen jo fylder en del kB, så med dobbelt data vil det jo fylde endnu mere. Hvis der skal laves 2 tabeller, så kan det jo selvfølgeligt snildt laves med K4=C3+50 og sådan, men så vil man jo være tvunget til at kopiere den formel rundt til alle felter i søjlen da jeg ikke ved præcist hvor mange indgange der bliver i søjlen. Hvordan kan man lettest indtaste en tabel og så have en modificeret tabel at beregne på? Det er samme værdi der skal ligges til i hver celle i hele søjlen.
Som sagt er det ikke mig der skal bruge arket som indeholder makroer. Et problem med makroerne er, at de hver gang de åbner arket skal vælge om de vil åbne med eller uden makroer. Makroerne skal være der for at arket virker. Så hvordan kan man gøre det sådan at de kun skal godkende makroerne en gang uden at stille på deres sikkerhedsniveau? Jeg har bestilt en digital signatur hos TDC, vil jeg kunne godkende makroerne med min nøgle og give dem den offentlige hvorefter de så kan godkende makroerne en gang for alle? Hvordan sørger jeg for at de ikke hver gang skal vælge om de vil åbne arket med makroer?
Spm. 2 Du skriver f.eks. "50" i en celle et eller andet sted på arket. Så markerer du cellen og trykker "Kopier". Derefter markerer du det område du ønsker at lægge 50 til, højreklikker et sted i området og vælger "Indsæt speciel". Her skal du så vælge "Addition" i bunden og trykke "OK".
3. Test lige det her. Find det program (under office) der hedder selfcert.exe og kør det. Det opretter en digital signatur. I Excel under VBA TOOLS vælger du Digital Signature og signerer dit projekt med din nye signatur. Gem og luk. Når du sender det til andre skal de første gang de åbner svare ja til makroer og til altid at have tillid til dig (flueben i "Trusted source").
herefter er der ikke noget problem at åbne med makroer automatisk
janvogt > spm 1. Hvis det indsættes i kodearket til sheet1, vil det så gælde for kun det pågældende ark eller vil det være alle åbne ark? spm 2. Hvis jeg gør det sådan, vil jeg så ikke få problemer når jeg opdaterer celler rundt omkring i arket? Jeg skal gerne have en mere automatisk løsning som ligger værdien for den pågældende søjle til hver gang jeg ændrer en værdi så alle værdier i tabellen altid vil have værdi: oprindeligt indtastet+fast værdi.
Lige et spørgsmål mere, når jeg protecter arket med vb, hvordan kan jeg så gøre sådan at man godt kan slette en row. Hvis man protecter manuelt kan man jo bare vælge det med flueben, men hvad er kommandoen i vb? Jeg har søgt på nettet uden held, er der en god side hvor man kan se de forskellige vb kommandoer med options?
janvogt > Spm 1.: Jeg kan ikke rigtigt få det til at virke, filen er skrivebeskyttet, så hvis jeg bruger den metode som du angiver, så vil den vel komme med en dialogboks om at gemme filen som en kopi? Jeg har tænkt på om den smarteste løsning vil være at lave en knap til at køre kommandoen: ActiveWorkbook.Close False Eller kan man godt løse det ved at lade brugeren lukke mappen uden at der gemmes selvom der er ændringer?
janvogt >> Jeg ved ikke om det er mig der er lidt tung (højst sandsynligt), men jeg kan ikke rigtigt se hvordan Application.DisplayAlerts = False skulle løse problemet med, at når brugeren lukker arket eller excel, så får han ikke nogen alert frem om han vil gemme. Løsningen jeg selv foreslog, ActiveWorkbook.Close False, kan heller ikke rigtigt bruges, for den lukker jo kun arket og ikke Excel.
Bak > Af en eller anden grund har jeg ikke selfcert.exe og kan ikke lige finde min Office cd-rom. Men jeg har fået min digitale signatur fra TDC i dag, den virker perfekt. Så det problem er da løst.
Omkring spm. 2, så kan jeg ikke helt følge dig. Umiddelbart tror jeg nok min metode med at "kopiere" f.eks. 50 til samtlige celler kan bruges, ellers må jeg have misforstået noget. Det er klart, at står der "5" i en celle og du så lægger 40 til så der står 45, ja så er det de 45 du bruger, hvis du regner videre med cellen.
Jeg har forsøgt at tilføje dette i kodearket: Private Sub Workbook_BeforeClose(Cancel As Boolean) ThisWorkbook.Saved = True End Sub Men det virker ikke rigtigt, gør jeg noget forkert?
Spm. 2 > Problemet er, at jeg har en oprindelig tabel som jeg opdaterer i og en tabel jeg regner ud fra. Derfor vil jeg gerne beholde den oprindelige tabel, sådan at når jeg skal opdatere at jeg så ikke behøver tænke på at der er lagt 50 til. Som det er nu har jeg 2 tabeller, en original som svarer til mine data og en der hedder =A2+50 og så videre derudaf. På den måde ligger data jo 2 gange og fylder dobbelt så meget.
Tryk ALT+F11 for at komme ind i VBA-editoren. I projektoversigten til venstre skal du vælge "ThisWorkbook". Til højre skal du nu på den første rulleliste vælge "Workbook" På den anden rulleliste skal du vælge "BeforeClose". Kopier koden og sæt den ind mellem Private Sub Workbook_BeforeClose(Cancel As Boolean) og End Sub.
Hvis din kode ligger der allerede, har du gjort det rigtigt.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.