Avatar billede hbl Nybegynder
01. februar 2005 - 11:37 Der er 11 kommentarer og
1 løsning

VBA: tæl kun "ikke tomme" celler i et område og kopier dem

Jeg har etworddokument der skal kigge ind i en excel fil og paste flere rækker med udfyldte celler.
Udfordringen er her at området hvor data står  fra case til case, har forskellige antal rækker/linier. Vedlagte makro, kan håndtere mit behov, når data er er statisk i sin størrelse, d.v.s. har ens antal rækker hver i hver case.

Sub hent ()

Dim xlApp As Object

Set xlApp = CreateObject("excel.application")
xlApp.Visible = True

xlApp.workbooks.Open FileName:="C:\udtræk til statusrapport.xls"

xlApp.Range("j98:k103").Select
xlApp.Selection.Copy

Selection.GoTo What:=wdGoToBookmark, Name:="tilvalggrafisk"
    With ActiveDocument.Bookmarks
        .DefaultSorting = wdSortByName
        .ShowHidden = False
    End With
    Selection.PasteAndFormat (wdFormatPlainText)
xlApp.Quit
Set xlApp = Nothing
End Sub

Det vil altid være således at 1.position i arket vil være j 98:k98  men jeg ved ikke hvor mange linier/rækker der udfyldes. Jeg vil kunne anføre et maks område hvor jeg ved at det ikke kommer ud over eks. J98:k110. Men problemet er så at det vil være forskelligt fra sag til sag hvor mange linier/rækker, og der med celler der er udfyldt og hvor mange der er tomme, jeg skal kun have pasted de ikke tommer celler i området. det vil sige at de tommer ikke skal pasted.
Det må være noget med en if funktion, kombineret med en række tæller, der måler er cellerne i række tom eller ikke tom.

Er det muligt at lave et tillæg til vedlagte makro, der kan håndtere denne udfordring.

Med venlig hilsen

HHB
endelig er der nogen der kan hjælpe mig med at tildele point til korrekte svar??
Avatar billede oyejo Nybegynder
02. februar 2005 - 09:20 #1
Hvis du har en variabel kaldt for eksempel SisteRad, kan det se slik ut.

SisteRad = ActiveSheet.Range("J2000").End(xlUp).Row
xlApp.Range("j98:k" & SisteRad).Select

Håper det er til nytte
Avatar billede oyejo Nybegynder
02. februar 2005 - 09:22 #2
Funksjone starter i "J2000" Så "leter den oppover,
til den finner første celle som ikke er tom.
Avatar billede hbl Nybegynder
02. februar 2005 - 13:15 #3
Kære oyejo
Tak for dit input jeg har prøvet at indsætte det i min makro der vedlægges, og der er noget der misser. fejl boks siger "object reguired" og runtime error 424.
Har du en god ide.

MVH
HHB
Sub hent5c1()

Dim xlApp As Object
Dim Sisterad As Object
Set xlApp = CreateObject("excel.application")
xlApp.Visible = True

xlApp.workbooks.Open FileName:="C:\udtræk til statusrapport.xls"
Sisterad = ActiveSheet.Range("J98").End(xlUp).Row
xlApp.Range("j98:k" & Sisterad).Select
xlApp.Selection.Copy

Selection.GoTo What:=wdGoToBookmark, Name:="tilvalgstørrelsetabel"
    With ActiveDocument.Bookmarks
        .DefaultSorting = wdSortByName
        .ShowHidden = False
    End With
    Selection.PasteAndFormat (wdFormatPlainText)
'Selection.Paste
'Selection.PasteExcelTable False, False, False
'Selection.TypeParagraph

xlApp.Quit

Set xlApp = Nothing
End Sub
Avatar billede oyejo Nybegynder
02. februar 2005 - 13:26 #4
Hei hbl, jeg er ikke så god til dette.
men prøv å bytte ut.
Dim Sisterad As Object
med
Dim Sisterad As long
Det er en varabel som kun skal inneholde et heltall
Avatar billede hbl Nybegynder
02. februar 2005 - 14:57 #5
Kære Oyejo

Godt forsøg, men den skriver fortsat object reguired, dog uden runtime error nr.

MVH
HH
Avatar billede oyejo Nybegynder
02. februar 2005 - 15:09 #6
Hvis du bytter ut denne linje ..
xlApp.Range("j98:k" & Sisterad).Select
med ..
xlApp.Range("j98:k104").Select
for å kontrollere at det fungerer på gamlemåten
for hvis programmet kjører når du ikke bruker variabelen til å bestemme range.
da vet vi at det er noe galt med variabelen
mvh
oyejo
Avatar billede hbl Nybegynder
02. februar 2005 - 16:40 #7
Kære oyejo
Jeg har prøvet at bytte rundt på de 2 linier, som du foreslår, men den går fortsat død, netop når den skal læse "dxlApp.Range("j98:k" & Sisterad).Select eller
xlApp.Range("j98:k104").Select" meddeler run time error 424 "object reguired""
Ja det driller lidt

Med venlig hilsen
HHB
Avatar billede oyejo Nybegynder
03. februar 2005 - 08:12 #8
Hei HHB

I ditt første innlegg hadde du en makro som fungerte, vi får begynne der.
Kan du teste denne?

Sub hent ()

Dim xlApp As Object

Set xlApp = CreateObject("excel.application")
xlApp.Visible = True

xlApp.workbooks.Open FileName:="C:\udtræk til statusrapport.xls"

xlApp.Range("j98:k103").Select
xlApp.Selection.Copy

Selection.GoTo What:=wdGoToBookmark, Name:="tilvalggrafisk"
    With ActiveDocument.Bookmarks
        .DefaultSorting = wdSortByName
        .ShowHidden = False
    End With
    Selection.PasteAndFormat (wdFormatPlainText)
xlApp.Quit
Set xlApp = Nothing
End Sub
Avatar billede oyejo Nybegynder
03. februar 2005 - 08:17 #9
Hvis overstående fungerer bør du prøve denne:
Husk at i denne linjen...
Sisterad = ActiveSheet.Range("J2000").End(xlUp).Row
..må radnummeret være så høyt at du er sikker på at cellen er under siste fylte.
"J2000" er greit å bruke hvis du ikke har flere rader

Sub hent ()

Dim xlApp As Object
Dim SisteRad As Long

Set xlApp = CreateObject("excel.application")
xlApp.Visible = True

xlApp.workbooks.Open FileName:="C:\udtræk til statusrapport.xls"

Sisterad = ActiveSheet.Range("J2000").End(xlUp).Row
xlApp.Range("j98:k" & SisteRad).Select
xlApp.Selection.Copy

Selection.GoTo What:=wdGoToBookmark, Name:="tilvalggrafisk"
    With ActiveDocument.Bookmarks
        .DefaultSorting = wdSortByName
        .ShowHidden = False
    End With
    Selection.PasteAndFormat (wdFormatPlainText)
xlApp.Quit
Set xlApp = Nothing
End Sub

mvh
oyejo
Avatar billede hbl Nybegynder
03. februar 2005 - 09:48 #10
Kære Oyejo
Tak for dine indlæg.
Jeg har testet makroen fra dig kl. 8.12.19 - den virker
Jeg har testet makroen  fra dig kl. 8.17 - den virker ikke. Jeg får den samme besked som de øvrige gange "object reguired".
Lige for god ordens skyld skal jeg gentage at mit afsæt er word, og jeg kigger ned i et excel ark. Måske virker din kode hvis det kører rent i excel, jeg ved ikke om det gøre nogen forskel.
Men har du lyst og mod til fortsat at prøve, er jeg meget taknemmelig.

MVH
HHB
Avatar billede oyejo Nybegynder
03. februar 2005 - 15:13 #11
Hei igjen HHB
Beklager at jeg ikke klarte å hjelpe deg.
Det kan godt hende at det ikke virker fordi du prøver fra word.
Jeg har ikke testet hele din kode.
Men jeg benytter :
Sisterad = ActiveSheet.Range("J2000").End(xlUp).Row
i excel der fungerer denne koden utmerket til å finne siste celle med innhold.
Jeg har ikke så mye greie på objekter, så jeg kan nok ikke hjelpe deg.
Trenger hjelp selv:-)
LYKKE TIL
mvh
oyejo
Avatar billede oyejo Nybegynder
03. februar 2005 - 15:15 #12
Kanskje du kan prøve samme spørsmål i en annen spørsmålsgruppe?
(word eller VBA hvis den finnes)
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