|
Disse websidene oppdateres ikke lengre og er kun tilgjengelig for historikken sin skyld.
Klikk her for å gå til den oppdaterte informasjonen.
Les informasjon fra en lukket arbeidsbok
Ved hjelp av makroene nedenfor kan man lese inn verdier og tekst fra celler i en lukket arbeidsbok.
Makroeksempelet viser hvordan man kan lese inn innholdet fra celle A1 i Ark1 fra samtlige arbeidsbøker
som er lagret i en angitt mappe.
Sub LesInfoFraAlleFiler()
Dim FolderName As String, wbName As String, r As Long, cValue As Variant
Dim wbList() As String, wbCount As Integer, i As Integer
FolderName = "C:\Foldername"
' lag en liste over samtlige arbeidsbøker i mappen
wbCount = 0
wbName = Dir(FolderName & "" & "*.xls")
While wbName <> ""
wbCount = wbCount + 1
ReDim Preserve wbList(1 To wbCount)
wbList(wbCount) = wbName
wbName = Dir
Wend
If wbCount = 0 Then Exit Sub
' get values from each workbook
r = 0
Workbooks.Add
For i = 1 To wbCount
r = r + 1
cValue = GetInfoFromClosedFile(FolderName, wbList(i), "Ark1", "A1")
Cells(r, 1).Formula = wbList(i)
Cells(r, 2).Formula = cValue
Next i
End Sub
Function GetInfoFromClosedFile(ByVal wbPath As String, _
wbName As String, wsName As String, cellRef As String) As Variant
Dim arg As String
GetInfoFromClosedFile = ""
If Right(wbPath, 1) <> "" Then wbPath = wbPath & ""
If Dir(wbPath & "" & wbName) = "" Then Exit Function
arg = "'" & wbPath & _
"[" & wbName & "]" & _
wsName & "'!" & _
Range(cellRef).Address(True, True, xlR1C1)
On Error Resume Next
GetInfoFromClosedFile = ExecuteExcel4Macro(arg)
End Function
Denne metoden har en begrensing på hvor mange celler det kan hentes informasjon fra siden
Excel4-makroen oppretter linker til den lukkede arbeidsboken. Se eventuelt et tilsvarende eksempel
som benytter ADO dersom du trenger å hente mye data fra en lukket
arbeidsbok.
Det er ofte mye enklere å åpne arbeidsboken for å lese data fra den.
Dersom Application.ScreenUpdating settes til False vil brukerne sannsynligvis ikke
legge merke til at arbeidsboken åpnes og lukkes igjen.
Sub GetDataFromClosedWorkbook()
Dim wb As Workbook
Application.ScreenUpdating = False ' slå av skjermoppdateringen
Set wb = Workbooks.Open("C:\Foldername\Filename.xls", True, True)
' åpner kildearbeidsboken, kun for lesing
With ThisWorkbook.Worksheets("TargetSheetName")
' les inn data fra kildearbeidsboken
.Range("A10").Formula = _
wb.Worksheets("SourceSheetName").Range("A10").Formula
.Range("A11").Formula = _
wb.Worksheets("SourceSheetName").Range("A20").Formula
.Range("A12").Formula = _
wb.Worksheets("SourceSheetName").Range("A30").Formula
.Range("A13").Formula = _
wb.Worksheets("SourceSheetName").Range("A40").Formula
End With
wb.Close False ' lukk kildearbeidsboken uten å lagre noen endringer
Set wb = Nothing ' frigjør minne
Application.ScreenUpdating = True ' slå på skjermoppdateringen
End Sub
Her er en annen variant:
Sub CopyFromClosedWB(strSourceWB As String, _
strSourceWS As String, strSourceRange As String, _
rngTarget As Range)
' kopierer informasjon fra en lukket arbeidsbok
' brukes f.eks. slik for å kopiere informasjon til det aktive regnearket:
' CopyFromClosedWB "C:\Foldername\Filename.xls", "Sheet1", "A1:D100", Range("A1")
Dim wb As Workbook
Application.ScreenUpdating = False ' slå av skjermoppdatering
Application.StatusBar = "Kopierer data fra " & strSourceWB & "..."
On Error Resume Next ' ignorer feil
' åpne datakilden, kun lesetilgang
Set wb = Workbooks.Open(strSourceWB, True, True)
On Error GoTo 0 ' stopp ved feil
If Not wb Is Nothing Then ' åpnet arbeidsboken
On Error Resume Next ' ignorer feil
With wb.Worksheets(strSourceWS).Range(strSourceRange)
.Copy rngTarget
End With
On Error GoTo 0 ' stopp ved feil
wb.Close False ' lukk datakilden uten å lagre endringer
Set wb = Nothing ' frigjør minne
End If
Application.StatusBar = False ' nullstill statuslinjen
Application.ScreenUpdating = True ' slå på skjermoppdatering
End Sub
Sub TestCopyFromClosedWB()
CopyFromClosedWB "C:\Foldername\Filename.xls", _
"SheetName", "A1:D10", Range("A1")
End Sub
Dokumentet er sist oppdatert 2004-10-14 17:48:39
Utskriftsvennlig versjon
Ole P. fra Trondheim skrev (2006-10-01 21:01:45 CET):
|
Re: Lösenord Hei!
Du kan f.eks. legge til denne funksjonen i løsningen din og tilpasse den med korrekt filnavn og passord til arbeidsboken med passordet.
Etterpå kan du kopiere de linjene du trenger fra den andre makroen nedenfor og implementere dette i løsningen din:
Function ValidateInputPassword(strInputPassword As String) As Boolean
Dim su As Boolean, wb As Workbook, strValidPassword As String
su = Application.ScreenUpdating
If su Then
Application.ScreenUpdating = False ' slå av skjermoppdateringen
End If
On Error Resume Next
Set wb = Workbooks.Open("C:\FolderName\FileName.xls", True, True, , "ProtectionPassword")
If Not wb Is Nothing Then
strValidPassword = wb.Worksheets(1).Range("A1").Value
wb.Close False
If Len(strValidPassword) > 0 Then
ValidateInputPassword = strValidPassword = strInputPassword
End If
Set wb = Nothing
End If
If su Then
Application.ScreenUpdating = True ' slå på skjermoppdateringen
End If
End Function
Sub TestValidateInputPassword()
Dim strPassword As String
strPassword = InputBox("Passord:", "Angi passord:")
If Len(strPassword) = 0 Then Exit Sub
If Not ValidateInputPassword(strPassword) Then
MsgBox "Ugyldig passord!", vbExclamation
Exit Sub
End If
' fortsetter herfra dersom passordet er gyldig
End Sub
|
T-B Wal fra Sverige skrev (2006-10-01 16:00:30 CET):
|
Lösenord Jag vill "gömma" ett lösenord i en cell i en stängd och lösenordsskyddad arbetsbok(2) och sedan via makro i t.ex. Auto_Open i en annan arbetsbok(1) hämta den informationen så att
arbetsboken(1) därefter kan kontrollera inskrivna lösenord via min InputBox.
Hur justerar jag enklast ovanstående makro så att arbetsbok(1) kan göra detta?
|
Ole P. fra Norway skrev (2005-07-02 09:50:55 CET):
|
Re: Makro som kan styres mot flere filer Den informasjonen finner du her.
|
EXCEL-freak fra Skien skrev (2005-07-01 11:36:31 CET):
|
Makro som kan styres mot flere filer Jeg har laget en makro som hente rinn og kopiere data fra en annen fil. Makroen er lagte mot et bestemt filnavn (f.eks. :SalgNorge012005.xls). Neste måned heter filen SalgNorge022005.xls.
Hvordan kan jeg endre makroen slik at den henter data fra den filen jeg velger vhj. Fil, Åpne ?
|
Ole P. fra Norway skrev (2005-03-15 09:09:14 CET):
|
Re: Filnavn i formel Det høres ut som om formelen din oppfatter det du har skrevet i celle A1 som et ugyldig filnavn.
Funksjonene ovenfor er avhengige av fullstendige filnavn som input, f.eks. C:\Foldername\Filename.xls.
|
Jan A. fra Etne skrev (2005-03-15 01:28:28 CET):
|
Filnavn i formel Hei.
Jeg har følgende ønske:
I celle A1 står januar.
I celle B1 vil jeg gjøre en spørring mot filnavnet nevnt i A1. Jeg får ikke dette til. Jeg må alltid skrive inn filnavnet i spørringen. Formelen godtar ikke navnet i A1?
|
|
|