Avatar billede dougheffernan Nybegynder
13. marts 2006 - 10:10 Der er 10 kommentarer og
1 løsning

Overførsel til Excel

I min database er funktionalitet som overfører udvalgte data til et Excel regneark.
Nu er sagen den, at brugerne gerne vil have lavet rammer omkring dataene. Det klares p.t. med
xlsheet.Cells(j, i + 1).Borders(xlEdgeTop).LineStyle = xlContinuous
xlsheet.Cells(j, i + 1).Borders(xlEdgeBottom).LineStyle = xlContinuous
xlsheet.Cells(j, i + 1).Borders(xlEdgeRight).LineStyle = xlContinuous
xlsheet.Cells(j, i + 1).Borders(xlEdgeLeft).LineStyle = xlContinuous

som sætter rammer omkring de enkelte celler, når de udfyldes. Problemet er at genereringen performer ad H..... til!
Er der en anden måde at formattere alle cellerne bagefter overførslen?
Avatar billede jensen363 Forsker
13. marts 2006 - 10:13 #1
Du kan eventuelt efterfølgende lade en makro gøre dette i Excel i stedet for
Avatar billede dougheffernan Nybegynder
13. marts 2006 - 10:22 #2
Hmmm....det er desværre ikke en option. Regnearket er ikke en skabelon (prædefineret), men bliver genereret helt og holdent fra Access (via VBA)
Avatar billede terry Ekspert
13. marts 2006 - 15:02 #3
I know almost nothing about Excel but I would think it  possible to select an area and then set the border styel for all fields in the area in one go
Avatar billede fdata Forsker
13. marts 2006 - 17:16 #4
Hvad med noget i stil med at huske start- og slutcellen og så:
  xlsheet.RangeRange(Cells(j, iStart), Cells(j, iSlut)).Select
  xlsheet.Selection.Borders(...
Avatar billede dougheffernan Nybegynder
14. marts 2006 - 09:01 #5
Ja, tænkte selv på noget lignende men det giver denne fejl:
Run-time error '438':
Object doesn't support this property or method

Men jeg er kommet fremtil denne stump (som dog ikke sætter de "interne" rammer):

    With xlsheet
      .UsedRange.Borders(xlEdgeTop).LineStyle = xlContinuous
      .UsedRange.Borders(xlEdgeBottom).LineStyle = xlContinuous
      .UsedRange.Borders(xlEdgeRight).LineStyle = xlContinuous
      .UsedRange.Borders(xlEdgeLeft).LineStyle = xlContinuous
      .Columns.AutoFit
    End With
Avatar billede dougheffernan Nybegynder
14. marts 2006 - 09:04 #6
Og Access giver en fejl med disse 2 Excel border konstanter:
xlInsideHorizontal
xlInsideVertical

Run-time error '1004':
Kan ikke angive egenskaben LineStyle for klassen Border
Avatar billede fdata Forsker
14. marts 2006 - 23:59 #7
Mystisk. Har lige testet og alt funker:

Option Compare Database
Option Explicit

Sub Test_Excel()
  Const xlAutomatic = -4105
  Const xlNone = -4142
  Const xlContinuous = 1
  Const xlThin = 2
  Const xlDiagonalDown = 5
  Const xlDiagonalUp = 6
  Const xlEdgeLeft = 7
  Const xlEdgeTop = 8
  Const xlEdgeBottom = 9
  Const xlEdgeRight = 10
  Const xlInsideVertical = 11
  Const xlInsideHorizontal = 12
 
  Dim xlApp As Object
 
  Set xlApp = CreateObject("Excel.Application")
 
  With xlApp
    .Visible = True
    .Workbooks.Add
    .Range("C3:F7").Select
   
    With .Selection
      .Borders(xlDiagonalDown).LineStyle = xlNone
      .Borders(xlDiagonalUp).LineStyle = xlNone
      With .Borders(xlEdgeLeft)
          .LineStyle = xlContinuous
          .Weight = xlThin
          .ColorIndex = xlAutomatic
      End With
      With .Borders(xlEdgeTop)
          .LineStyle = xlContinuous
          .Weight = xlThin
          .ColorIndex = xlAutomatic
      End With
      With .Borders(xlEdgeBottom)
          .LineStyle = xlContinuous
          .Weight = xlThin
          .ColorIndex = xlAutomatic
      End With
      With .Borders(xlEdgeRight)
          .LineStyle = xlContinuous
          .Weight = xlThin
          .ColorIndex = xlAutomatic
      End With
      With .Borders(xlInsideVertical)
          .LineStyle = xlContinuous
          .Weight = xlThin
          .ColorIndex = xlAutomatic
      End With
      With .Borders(xlInsideHorizontal)
          .LineStyle = xlContinuous
          .Weight = xlThin
          .ColorIndex = xlAutomatic
      End With
    End With
  End With
 
  Set xlApp = Nothing
End Sub
Avatar billede dougheffernan Nybegynder
15. marts 2006 - 08:27 #8
Takker mange gange for hjælpen, forskellen på den kode jeg havde og din, er at du har fat i Application objektet, jeg havde fat i Spreadsheet objektet!

With xlApp
vs.
With xlSheet
Avatar billede dougheffernan Nybegynder
15. marts 2006 - 12:17 #9
Der er dog dette problem:
Jeg står ikke umiddelbart med et koordinat (som f.eks. A2:E8), men kun med start feltet (A2) og så slutkolonnenummer (varierer, f.eks. 5) og et slutrækkenummer (varierer, f.eks. 8.

Hvordan "oversætter" jeg det?
Avatar billede dougheffernan Nybegynder
15. marts 2006 - 12:23 #10
Det ser ud til at jeg kan bruge R1C1 konventionen, men hvordan ser det ud i VBA (fra Access af)?
Avatar billede fdata Forsker
15. marts 2006 - 18:54 #11
Se mit svar 13/03-2006 17:16:47. Det kan omskrives til
.RangeRange(Cells(jStart, iStart), Cells(jSlut, iSlut)).Select
Det burde virke.

Der er ingen særlig Access VBA blandet ind her. Du kan bare optage en makro i Excel og så klippe/klistre koden over i Access. Du skal bare huske at smide det ind i din With blok og foranstille et punktum. Du ved, hvad jeg mener  ;o)

Tak i øvrigt for point.
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