Avatar billede boro23 Forsker
06. marts 2016 - 16:50 Der er 19 kommentarer og
1 løsning

VBA hjælp

Hej Eksperter, håber I kan hjælpe mig. Min handling er, at jeg altid marker 6 celler lige efter hinanden i samme række i mit dataark, kopier og indsætter specielt værdier i et andet ark. Mit problem er at jeg nogen gange glemmer at slette kopieret data i dataarket, hvilket giver problemer andre steder.
Kan man lave en kode, der sletter det markerede område i dataarket, når kopieret data er indsat i det andet ark?
Har prøvet at bruge klip funktionen, men der får jeg formaterne med fra dataarket.
Avatar billede claes57 Ekspert
06. marts 2016 - 16:58 #1
vælg indsæt speciel, og der kun formler og tal, så kommer formatet ikke med.
Avatar billede folj Forsker
07. marts 2016 - 11:50 #2
Det ville jo være oplagt at automatisere det, når nu du kan beskrive systemet i det der skal foretages igen og igen.

Du må dog lige uddybe:
- Hvilke 6 bceller er det der skal markeres og kopieres ind i et andet sheet?

- Skal de indsættes i næste ledige række i det omtalte sheet, eller skal der indsættes om ny række øverst og indsætte data her?
Avatar billede boro23 Forsker
07. marts 2016 - 17:33 #3
Det er lidt svært at forklare, men jeg prøver. Hver række er et batchnr. (Kolonne A)som indeholder en masse data til og med kolonne HH, oplysningerne omkring batchnumret er delt op i 35 x 6 celler. Har lagt et link til et excelfil med yderlig forklaring

http://web01.gratisupload.dk/f/8v1x1ucn89/
Avatar billede folj Forsker
08. marts 2016 - 08:54 #4
@boro23
Svært at forklare... Jamen ligger de 6 celler du vil kopiere ikke samme sted hver gang, eller er der ikke et system i hvordan de findes.

Hvis de ikke ligger samme sted hver gang, er der så et system i det så vi kan detectere hvor de skal findes, elsempelvis at batchnummeret starter altid med disse tegn, eller hvad ved jeg - hvis du kan beskrive systemet i det, så kan vi også automatisere det.

Jeg har også brug for at vide hvordan du date du vil sætte ind skal sættes op ( i samme rækkefølge som derfra hvor de er kopieret, eler?

det ville være rigtig godt at kende i hvilke kolonner data skal findes.
Avatar billede folj Forsker
08. marts 2016 - 09:02 #5
Jeg glemte lige at skrive, at jeg ikke har mulighed gå ind på en fildelings-tjeneste, og se filen du har postet.
Dette er et sikkerheds-issue, og da jeg sidder på jobbet nu så kan jeg ikke gå ind, hvor der potentielt ligger materiale fra skumle personer, der ikke vil noget godt.
Avatar billede boro23 Forsker
08. marts 2016 - 16:14 #6
Hej folj, kan maile filen til dig? Er lige kommet hjem fra kursus, derfor den sene reaktion.
Avatar billede folj Forsker
09. marts 2016 - 08:46 #7
Hej boro.
Jeg foretrækker nu at yde hjælp til selvhjælp, så den der bliver hjulpet også kommer lidt videre, og får udbygget sine egne evner.

Hvis du gerne vil have mig til at se på filen, så send den til:
folj(snabel a)novonordisk.com (skriver det sådan for at snyde de søgerobotter der crawler hele nettet igennem, for at finde adresser de kan spamme)

Men jeg får stadig brug for at vide hvilke dataer du gerne vil kopiere over i det andet sheet.

mvh Folmer
Avatar billede folj Forsker
09. marts 2016 - 10:45 #8
Hej igen boro.

Du behøves ikke at sende.
Jeg har tjekket din profil, og din historik indikerer ikke noget i retning af en skummel person.

Nu har jeg åbnet filen på min privat-pc, og kan se lidt om hvad du mener.
Det lille billede du har indsat sammen med den forklarende tekst, er det de data der står i et andet sheet, som der skal kopieres fra?

Nu kender jeg jo ikke så meget til arbejdsgangen i det du laver, men kan jeg se det som nogle batche hvor der løbende kommer 8 datasæt fra produktionen. stemmer det?

Jeg prøver at se systemet, for det er jo nødvendigt at tænke i systemer hvis det skal kunne automatiseres.
Optræder dine data altid sådan som illustreret med batchnummer lige til venstre for de 6 celler der skal kopieres?

mvh Folmer
Avatar billede boro23 Forsker
09. marts 2016 - 11:20 #9
Det lille billede viser det, jeg gerne vil have koden skal slette (ark1 i eks. fil)
De 6 celler er enheder, tilhørende et batchnr., første celle af de 6 celler er enhedens nr.
Det jeg gør, er at plukker udvalgte enheder over i ark2 fra ark1 (Eks. fil).
Glemmer jeg at slette de plukkede enheder i ark1, går der ged i et andet ark.
Avatar billede folj Forsker
09. marts 2016 - 13:27 #10
Hej boro!

Jeg kan stadig ikke lade være at tænke lidt videre...

Ville det slet ikke være attraktivt at når du afvikler din automatiserede sletning af indholdet i de seks celler, at proceduren der afvikles tager de markerede data og indsætter dem ud for den rette batch, eller hvis den ikke allrede findes på listen, så kunne den jo blive indskrevet som den næste på listen, og data indsat på rette plads.

Hvis det kunne være attraktivt, så er næste spm. ligger batchnummeret altid i den samme kolonne i Det ark du vil kopiere data fra?

Mvh Folmer
Avatar billede boro23 Forsker
09. marts 2016 - 13:59 #11
Hej Folmer
Når jeg f.eks plukker enheder, kan det godt ske fra flere forskellige batchnumre, jeg har ikke behov for at få batchnumre med fra de enheder jeg plukker, fordi 2. celle af de 6 angiver rækkenumret for batchnumret, den bliver hentet via en formel i arket "plukseddel".
Der er desværre ikke plads til nogle ændringer har min chef påpeget. Håber du kan finde en løsning ud fra min lange og omstændige forklaring. ;-)
Avatar billede folj Forsker
09. marts 2016 - 14:25 #12
Jeg er nødt til at holde fyraten nu, men ser lidt mere på det i morgen.
Avatar billede folj Forsker
10. marts 2016 - 11:41 #13
Hej boro!

Så er jeg ved at være klar med noget til dig.

Det lyder som om du har arbejdet lidt med VBA før, derfor poster jeg i første omgang den procedure jeg har kreeret til dig.
Du kan blot gå ind i VBA-editor og indsætte den i et modul, og afvikle proceduren.

Vi skal blot have fundet en brugbar måde du kan bruge når du vil afvikle proceduren. Det er jo sikkert ikke brugbart nok at du først skal markere de 6 celler, og derefter bruge genvejen Ctrl + F8 for at få listet Macros der kan afvikles, men til en første test, kan det måske anvendes.

Jeg har indrettet proceduren så den anvender nogle få konstanter. Dem er du nødt til at have stående øverst i dit modul.

' ' konstanter der kan reguleres senere hvis der bliver behov
Public Const NUMBEROFCELLS As Integer = 6 ' antalceller i markeringen styres fra en
Public Const FIRSTNONMARGINCOLUMN As Integer = 20 ' definerer i hvilken kolonne der er første datakolonne
Public Const DESTINATIONSHEETINDEX As Integer = 1 ' definerer jeg at arket som data overføres til er det ark der ligger først i rækken af ark

Sub DataTransfer()

  SelectionAddress = Selection.Address
  SourceDataSheet = ActiveSheet.Name
  DestinationDataSheet = Sheets(DESTINATIONSHEETINDEX).Name ' her forudsætter jeg at arket som data overføres til er det ork der ligger først i rækken af ark
 
  SourceDataArray = Sheets(SourceDataSheet).Range(SelectionAddress) ' vi smider data fra det markerede område ind i et array - det er nemlig smart fordi det kun er values og ikke formler vi får ind i vores araay

  CellCount = UBound(SourceDataArray, 2) ' vi tæller lige hvor mange celler vi har i vores array
 
  If Not CellCount = 6 Then ' hvis der ikke er valgt 6 celler, så vil vi stoppe afviklingen
    MsgBox "Der er ikke valgt 6 celler til overførsel, som forventet" & Chr(10) & "Proceduren stoppet", vbCritical
    Exit Sub ' vi stopper afviklingen her
  End If
 
' nu vil vi sætte data ind der hvor de skal overføres til

' først skal vi lige beregne DestinationCells
  DestinationRow = SourceDataArray(1, 2) ' rækkenummeret trækker vi direkte ud af vores array 1. celle, 2. kolonne
' beregner rette startkolonne til indsæt data
  DestinationColumn = ((SourceDataArray(1, 1) - 1) * NUMBEROFCELLS) + FIRSTNONMARGINCOLUMN ' kolonnenummer beregner vi ud fra det der står i vores array 1. celle, 1. kolonne
'  MsgBox DestinationRow
'  MsgBox DestinationColumn
 
  DestinationAddress = Range(Cells(DestinationRow, DestinationColumn).Address & "." & Cells(DestinationRow, DestinationColumn + NUMBEROFCELLS - 1).Address).Address

' her smider vi values fra vores array ind i på den beregnede placering (i et hug)
  Sheets(DestinationDataSheet).Range(SelectionAddress) = SourceDataArray

' og så mangler kun at slette source-data
  Sheets(SourceDataSheet).Range(SelectionAddress).ClearContents

End Sub
Avatar billede boro23 Forsker
10. marts 2016 - 12:19 #14
Hej Folmer, jeg kan ikke komme til at afprøve koden før på mandag, har lige fået et hold svenskere på besøg, tak indtil videre
Avatar billede folj Forsker
10. marts 2016 - 13:57 #15
Hej igen !

Du skal bare give dig den tid der skal til, og tage dig af dine gæster.
så ser vi på det i næste uge.

mvh Folmer
Avatar billede folj Forsker
15. marts 2016 - 08:59 #16
Jeg har lige en lille tilføjelse som du kan tilføje når du har testet at det virker.

Der kan nemlig opstå en fejl hvis du eksempelvis kun har markeret én celle, så kan koden ikke kaste dataene ind i et array, og senere tælle hvor mange celler der var.

Derfor anbefaler jeg at du tilføjer en linie der slår disse fejlmeddelelser fra.

Det med at slå fejlmeddelelser fra er først godt når du har testet at koden virker, for det slår i virkeligheden alle fejlmedelelser fra, og det er jo ikke hensigtsmæssigt i testsituationen.

For at den ikke skal melde fejle hvis der kun er markeret én celle så skal du tilføje lige før linien:  CellCount = UBound(SourceDataArray, 2). en linie så det kommer til at se sådan ud
  On Error Resume Next
  CellCount = UBound(SourceDataArray, 2) ' vi tæller lige hvor mange celler vi har i vores array

Glæder mig til at høre når du har testet.
Avatar billede boro23 Forsker
16. marts 2016 - 07:11 #17
Hej Folmer, jeg er desværre fået et par opgaver der har højere prioritet end denne opgave, jeg vender tilbage hurtigst muligt.
Hilsen Kim
Avatar billede folj Forsker
16. marts 2016 - 10:23 #18
Det ken jeg godt fra mit eget arbejde, at der må prioriteres i opgaverne.
Indtil da, så smider jeg også lige et svar - jeg satser jo på at det leverede også spiller hos dig.
Avatar billede boro23 Forsker
19. marts 2016 - 10:20 #19
Hej Folmer, mange tak for din hjælp, har ikke fået koden afprøvet endnu, men efter påske får jeg den testet, håber jeg må kontakte dig hvis jeg får problemer med koden. God påske når du når dertil. Hilsen Kim
Avatar billede folj Forsker
20. marts 2016 - 14:02 #20
Hvis jeg har forstået problemet korrekt, så bør det også virke hos dig.
Du vender blot tilbage hvis bliver behov for yderligere hjælp.

Er på påskeferie nu, men efter påske er jeg klar til at hjælpe dig helt i mål, hvis der bliver behov.

Go' påske. Folmer
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester