marker en celle med sti og navn på excel arket, kør subben og den skriver adressen i kolonnen til højre for den makerede celle.
Sub OpenXLSFile() strXLSFile = ActiveCell.Value Dim objExcel As Object 'Excel.Application Dim objWorkbook As Object Set objExcel = GetObject(, "Excel.Application") AppActivate "Microsoft Excel" Set objWorkbook = objExcel.Workbooks.Open(strXLSFile) objWorkbook.Activate objWorkbook.Sheets(1).Range("A1").Select A = ActiveCell.SpecialCells(xlLastCell).Address ActiveWorkbook.Close ActiveCell.Offset(0, 1) = A End Sub
hvis du har mange kan du bruge denne, her skal du ikke makere celler, men ret områderne hvis de ikke passer.
Sub OpenXLSFile() Application.ScreenUpdating = False ' ingen opdatering mens den kører Sheets("ark1").Select For Each c In Range("A1:A20") ' området med sti og excel filnavn If c <> "" Then strXLSFile = c.Value Dim objExcel As Object 'Excel.Application Dim objWorkbook As Object Set objExcel = GetObject(, "Excel.Application") AppActivate "Microsoft Excel" Set objWorkbook = objExcel.Workbooks.Open(strXLSFile) objWorkbook.Activate objWorkbook.Sheets(1).Range("A1").Select A = ActiveCell.SpecialCells(xlLastCell).Address ActiveWorkbook.Close c.Offset(0, 1) = A ' skriver i kolonnen til højre for filnavnet End If Next Application.ScreenUpdating = True End Sub
kabbak det kode der.. er det meningen man skal bruge det inde i vb delen i excel eller? for jeg har gang i et eksternt vb app og synes ik rigtig jeg ka få det til at spille..
Du kan connecte til excel på følgende måde (bare et eksempel på hvordan du "får fat" i Excel fra VB - her bruger jeg fakultet-funktionen i Excel)
Dim xlapp as object Dim Mittal as Byte Mittal = Inputbox("Indtast det tal du vil tage fakultet til:") Set xlapp = CreateObject("Excel.application") '<- HER oprettes forbindelsen res = xlapp.fact(Mittal) '<- Her kaldes en funktion fra Excel xlapp.quit set xlapp = Nothing
jamen jeg kan godt få fat i excel filen og åbne den osv mit problem er at jeg gerne vil vide hvordan jeg checker hvad sidste udfyldte celle i sidste kolonne hedder og med hedder mener jeg feks C1 eller G9
koden ser sådan her ud nu og ligesom før åbner den bare excel og det excelark jeg har valgt og så sker der ellers intet
Function OpenXLSFile(strXLSFile As String, lngPersonID As Long, Optional bolMerge As Boolean = False) As Boolean On Error GoTo err_OpenXLSFile Dim objExcel As Object 'Excel.Application Dim objWorkbook As Object
'On Error Resume Next Set objExcel = GetObject(, "Excel.Application") Err.Clear 'On Error GoTo err_OpenXLSFile If objExcel Is Nothing Then Set objExcel = GetObject("", "Excel.Application") End If objExcel.Visible = True 'On Error Resume Next objExcel.WindowState = -4137 AppActivate "Microsoft Excel" 'On Error GoTo err_OpenXLSFile Set objWorkbook = objExcel.Workbooks.Open(strXLSFile) 'On Error Resume Next objWorkbook.Activate objWorkbook.Sheets(1).Range("A1").Select A = ActiveCell.SpecialCells(xlLastCell).Address MsgBox (xlapp.fact(6)) ActiveWorkbook.Close 'On Error GoTo err_OpenXLSFile OpenXLSFile = True MsgBox "Antallet af sheets er : " & objWorkbook.Sheets.Count
Exit Function err_OpenXLSFile: OpenXLSFile = False
det skal lige nævnes at jeg når jeg siger den åbner excel så er det den åbner mit excelark i excel og det jeg ville var at læse osv fra det uden at den åbner excel :(
det virker som om at de vba kommandoer jeg skal bruge som feks A = ActiveCell.SpecialCells(xlLastCell).Address ikke kan kaldes fra vb uden at den åbner excel og udfører kommandoen INDEN I excel er det mig der er helt forkert på den eller?
hmm ok kender du en metode hvor man kan hente adressen på en celle uden at åbne excel? eller en metode til at hente indholdet af alle celler med indhold i så den tager alle active cells?
Du kan ikke hente adressen på sidste celle uden at åbne excel, da det er en beregning excel skal udføre. A = ActiveCell.SpecialCells(xlLastCell).Address
er en beregning i excel, der iværksættes fra VB. Iøvrigt burde den nok se således ud A=objWorkbook.Sheets(1).SpecialCells(xlLastCell).Address
Hvad er det du skal hente ? Er det udformet som en database ?
kan man evt bruge usedrange til noget i den stil? læste noget et sted om at man ku få usedrange til at returnere indholdet af alle aktive celler som et array men der var ikke noget dokumentation på det..
og du er sikker på at Excel ikke er åbnet og bare skjult ? Hvis det er rigtigt, er det da en glædelig nyhed for mig at det der muligt at lave en beregning i et lukket regneark.
Her er en ide til hvordan du henter alle data med en sql-sætning Husk at sætte reference til microsoft ActiveX Data object lib.
Public Sub QueryWorksheet()
Dim rsData As ADODB.Recordset Dim szConnect As String Dim szSQL As String 'her indsætter du filnavnet szConnect = "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=C:\Files\SalgsData.xls;" & _ "Extended Properties=Excel 8.0;"
'her indsætter du arknavnet efterfulgt af $ szSQL = "SELECT * FROM [Ark1$]"
Set rsData = New ADODB.Recordset rsData.Open szSQL, szConnect, adOpenForwardOnly, _ adLockReadOnly, adCmdText
If Not rsData.EOF Then ' *her skal du hente rsData over i din VB application Else MsgBox "No records returned.", vbCritical End If
hmm ok det usedrange jeg havde brugt der var excel bare gemt dvs så burde jeg jo også kunne bruge A = ActiveCell.SpecialCells(xlLastCell).Address MsgBox (A) i mit vbapp? den laver bare ik rigtig nogen msgbox
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.