Avatar billede nnccnn Nybegynder
16. januar 2012 - 20:45 Der er 2 kommentarer

Importer fra lukket workbook

Hej Med dig/jer

Da jeg er forholdsvis ny i programmering i VBA, står jeg med et lille problem, som jeg har svært ved at se hvordan skal løses.

Jeg skal have en vba macro til at importere (kopiere...) noget data fra et sheet der er lukket, til en anden workbook(den åbne og aktuelle) fil navn og mapper ændre sig fra dag til dag. så der skal altså også tages hensyn til dette. desuden skal der køres et tjek sammen med som jeg havde forestillet mig tager udgangspunkt i tidspunktet for indskrivelsen (dette har jeg i en af cellerne der skal kopieres, ned til sekunder) samt en anden celle der er fast fra hver indskrivelse, så man altså ikke kan "komme til" at importere det samme flere gange og derved ikke overskrive det.

Håber at der er nogle af jer excel hajer der gider at bruge et par minutter på at hjælpe en ikke særlig stor excel haj:)

Vh Nicklas
Avatar billede tdh1309 Juniormester
19. januar 2012 - 15:15 #1
Jeg er lidt i tvivl om hvad du mener med at styre "fra - til" med omkring indskrivelse.
Nedenfor et eksempel på hvordan du kan importere data fra en workbook.

Jeg håber det kan bruges.

Option Explicit
Sub Main()
 
  Dim FolderPath As String                                  ' Path to source folder - Optional variable
  Dim sourceFileName As String                              ' Filename of source file - Optional variable
  Dim sourcePath As String                                  ' Complete path to source file
  Dim sourceWB As Workbook                                  ' Workbool to import from
  Dim sourceWS As Worksheet                                  ' Sheet in source workbook
  Dim sourceWSName As String                                ' Name of sheet on import workbook
  Dim sourceCopyFromRow As Long                              ' Row on sourcesheet to copy from
  Dim sourceCopyToRow As Long                                ' Row on sourcesheet to copy to
 
  Dim destinationWS As Worksheet                            ' Destionation sheet in "this workbook"
  Dim destinationWSName As String                            ' Name of destination sheet - Optional variable
  Dim DestinationRow As Long                                    ' Row on destination sheet to insert data to
 
  ' Source definations and initializations
  sourceCopyFromRow = 1                                      ' Copy from row 1
  sourceWSName = "SourceSheet"                              ' Name of import sheet
  FolderPath = ThisWorkbook.Path                            ' Path to this workbook (assumed that source and destination are in same filestructure)
  sourceFileName = "SourceSheet.xlsx"                        ' Name of file to import data from
  sourcePath = FolderPath & "\" & sourceFileName            ' Path to sourcefile
  'MsgBox ("Import fil: " & sourcePath)                      ' TBD - just for information
 
  Set sourceWB = Workbooks.Open(sourcePath)                  ' Open sourceWB
  Set sourceWS = sourceWB.Sheets(sourceWSName)              ' Sets source sheet, by refering to sheet name
  'Set sourceWS = sourceWB.Sheets(1)                        ' Sets source sheet, by refering to sheet number
  'MsgBox ("Import from workbook: " & sourceWB.Name)          ' TBD - just for information
 
  ' Destination definations and initializations
  destinationWSName = "Destination"                          ' Name of destination sheet
  Set destinationWS = ThisWorkbook.Sheets(destinationWSName) ' Sets destination sheet, by refering to sheet name
  'Set destinationWS = ThisWorkbook.Sheets(1)                ' Sets destination sheet, by refering to sheet number
  'MsgBox ("Destination sheet: " & destinationWS.Name)        ' TBD - just for information
 
  ' Copy data from sourceWS to destinationWS
 
  sourceCopyToRow = LastRow(sourceWS)                        ' Get last row with data on source sheet
  DestinationRow = LastRow(destinationWS) + 1                ' Get last row with data on destination sheet
  sourceWS.Rows(sourceCopyFromRow & ":" & sourceCopyToRow).Copy destinationWS.Range("A" & DestinationRow)
  destinationWS.Range("F" & DestinationRow) = "Inserted at: "
  destinationWS.Range("G" & DestinationRow) = Now()
 
  sourceWB.Close                                            ' Close sourceworkbook

End Sub

' Purpose:    Returns last row on sheet
' Parameters: Sheet
Public Function LastRow(WS As Worksheet) As Long
    LastRow = WS.UsedRange.Rows.Count
End Function
Avatar billede tdh1309 Juniormester
26. januar 2012 - 15:00 #2
Hej
Jeg vil lige høre om mit forslag bragte dig videre mod en løsning?
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
Kurser inden for grundlæggende programmering

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