Avatar billede neoman Novice
12. oktober 2010 - 16:30 Der er 12 kommentarer og
2 løsninger

Import af navngivet Range fra Excel til Access 2007 vha TransferSpreadsheet

Jeg har brug for at importere et range fra et specifikt ark i en Excel workbook. Man kan importere et range ved at specificere hvilke celler det drejer sig om i TransferSPreadsheet metoden, men hvis jeg nu ikke kender cllernes navne, men ved kun at der er defineret et range hvis navn jeg kender, og den celle hvor de ænskede data starter (øverste venstre hjørne af det interessante område, men ved ikke hvor mange rækker der er)

Jeg har googlet mig blind, og kan ikke finde en metode til med TransferSpreadsheet at kopiere en navngivet range.  Jeg kan sagtens importere et specifikt ark i workbooken, men et område på arket?

Kan man dette ? Eller skal man til at tage fat i arket og kopiere celler?
Avatar billede supertekst Ekspert
12. oktober 2010 - 17:22 #1
adresse = Range("RangeNavn").Address   
antalRækker = Range("RangeNavn").Rows.Count
Avatar billede neoman Novice
12. oktober 2010 - 17:36 #2
Så langt så godt: men i et TraferSPreadsheet kald?

    DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, _
        "Employees" & Str(I), strFileName, False, objWorksheet.Name & "!" & objWorksheet.Range("myrange").Address

giver fejl - Access giver 1004 - Application defined or obejct defined error. Hvordan skal kaldet se ud?
Avatar billede supertekst Ekspert
12. oktober 2010 - 18:19 #3
Prøv at "trække" adressen ud i en variabel af string-typen og anvend denne som den sidste parameter.


Har du en reference til Excel?
Avatar billede anlu Nybegynder
12. oktober 2010 - 18:46 #4
I Access 2007 vil TransferSpreadsheet tilsyneladende ikke godtage $-tegn i ranges, dvs. "Sheet1!A1:B3" virker fint, men "Sheet1!$A$1:$B$3" giver en fejl - kan det være det samme du er ude i?
Avatar billede neoman Novice
12. oktober 2010 - 19:31 #5
@supertekst

Hvad mener du præcist? Jeg kan fint læse et enkelt ark ad gangen:

Set objExcel = CreateObject("Excel.Application")
'objExcel.Visible = True

strFileName = "xxx"

Set objWorkbook = objExcel.workbooks.Open(strFileName)
Set colWorksheets = objWorkbook.Worksheets
I = 0
For Each objWorksheet In colWorksheets
    I = I + 1
    If I = 3 Then
    Return
    End If
    'Set objRange = objWorksheet.UsedRange
    DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, _
        "Employees" & Str(I), strFileName, False, objWorksheet.Name & "!" & objWorksheet.Range("myrange").Address

Next

Har også prøvet:
  Set objRange = objWorksheet.Range("myrange")
med tanke på
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, _
        "Employees" & Str(I), strFileName, False, objWorksheet.Name & "!" & objRange.Address

men kommer ikke forbi Set objRange  -samme fejl som før

@anlu

Nej - for jeg kender ikke udstrækningen af min range. Jeg prøver at bruge det navn som er tilskrevet i Excel
Avatar billede anlu Nybegynder
12. oktober 2010 - 19:41 #6
så problemet er med andre ord ikke TransferSpreadsheet, men derimod, at objWorksheet.Range("myrange") fejler, eller hva?

hvis du faktisk kommer ned til TransferSpreadsheet, så er det jo netop et problem af objRange.Address returnerer $-tegn i adressen.
Avatar billede neoman Novice
12. oktober 2010 - 19:50 #7
Nej jeg kommer som sagt ikke ned til Transfer SPreadsheet

Jeg er ude efter en opskrift på hvordan man skal gøre -  evt. en bekræftelse på (eller det modsatte) at det kan lade sig gøre i det hele taget: altså TransferSpreasheet og et navngivet Range.
Avatar billede supertekst Ekspert
12. oktober 2010 - 20:14 #8
Ref til #6

Reference, når Excel-objektet skal håndteres fra Access inden
DoCmd-sætningen

(VBA-vinduet / Tools / References / Microsoft Excel....
Avatar billede anlu Nybegynder
12. oktober 2010 - 20:28 #9
For at få en streng med det range som et navn givet range refererer til, kan du slå op i Names-collection:

Dim str As String
Dim nm As Name

Set nm = objWorkbook.Names("myrange")
str = nm.RefersTo

Herefter bør du kunne bruge str som input til TransferSpreadsheet, evt. først efter at have fjernet $-tegn.
Avatar billede neoman Novice
12. oktober 2010 - 21:02 #10
Set objRange = objWorksheet.Range("myrange")
    mystring = objRange.Address
    mystring = Replace(mystring, "$", "")
  DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, _
        "Employees" & Str(I), strFileName, False, objWorksheet.Name & "!" & mystring


dette virkede -tak for det.

Så vidt jeg kan se så bidrog I begge til løsningen, så læg svar begge to.
Avatar billede anlu Nybegynder
12. oktober 2010 - 21:09 #11
Glad for du fik det til at virke :o)
Avatar billede neoman Novice
12. oktober 2010 - 21:11 #12
@supertekst

I øvrigt tak - når ma får den type fejlmeddeleler så er det nok et hint til at kigge efter referencer.

I øvrigt er det lidt for tumpet, at Microsofts ting ikke snakker ordentligt sammen af sig selv, men skal onduleres -  ak ak brok brok :-)
Avatar billede supertekst Ekspert
12. oktober 2010 - 23:40 #13
Selv tak - blot det lykkedes...
Avatar billede neoman Novice
21. oktober 2010 - 19:56 #14
Hvis nogen snubler over denne tråd:

Den nemmeste løsning er at huske, at en navngivet range er per default global i workbooken. Det er derfor ikke nødvendigt specificere navnet på arket OG på den navngive range - man kan nøjes med det sidste. I dette tilfælde kan man bare bruge

  DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, _
        "miTabelNavn", "minWorkbook.xls", False, "navnetPåMinNavngivneRange"

og slippe for at åbne excel-objekter med videre :-)
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
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

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