Avatar billede slapstick Nybegynder
28. oktober 2003 - 19:33 Der er 38 kommentarer og
1 løsning

finde navnet på sidste celle i sidste kollone i excel sheet

hvordan finder jeg navnet på sidste celle i sidste kolonne i et excel med vb?
med navn mener jeg om det er A1 eller C4 feks
Avatar billede slapstick Nybegynder
28. oktober 2003 - 19:57 #1
eller evt bare loope fra første celle A1 til sidste celle i sidste kolonne?
Avatar billede mikker Nybegynder
28. oktober 2003 - 20:09 #2
Hej SlapStick... !!?? :o)

http://www.eksperten.dk/spm/337321

Her kan du nok finde lidt inspiration. Jeg vil mene at du med fordel kan bruge .end(xlup) og der må være en lignende den anden vej(horisontalt)...

- Mikker
Avatar billede kabbak Professor
28. oktober 2003 - 20:38 #3
Range("A1").Select
    A = ActiveCell.SpecialCells(xlLastCell).Address
    Range(A).Select
Avatar billede slapstick Nybegynder
28. oktober 2003 - 21:27 #4
hej kabbak jeg har prøvet at bruge din metode sådan her

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
       
        On Error Resume Next

        AppActivate "Microsoft Excel"
       
        On Error GoTo err_OpenXLSFile
       
        Set objWorkbook = objExcel.Workbooks.Open(strXLSFile)
       
        On Error Resume Next
       
        objWorkbook.Activate
       
        On Error GoTo err_OpenXLSFile
       
        OpenXLSFile = True       

        objWorkbook.sheets(1).Range("A1").Select
        A = ActiveCell.SpecialCells(xlLastCell).Address
        MsgBox (objWorkbook.sheets(1).Range(A).Value)
       
    Exit Function
   
err_OpenXLSFile:
    OpenXLSFile = False

End Function

men der sker bare ingenting
Avatar billede kabbak Professor
28. oktober 2003 - 21:51 #5
hvad skal den lave ??
Avatar billede slapstick Nybegynder
28. oktober 2003 - 21:55 #6
egentlig ville jeg bare ha navnet på den sidste celle feks CU98
men lige der prøvede jeg at hive værdien ud af den sidste celle
Avatar billede kabbak Professor
28. oktober 2003 - 22:49 #7
kan du bruge en sub

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
Avatar billede kabbak Professor
28. oktober 2003 - 23:00 #8
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
Avatar billede martin_moth Mester
30. oktober 2003 - 12:29 #9
He he: Svaret er altid:

  IV65536

(sorry, kunne ikke lade være, jeg synes selv jeg er vildt sjov. Skal nok smutte nu)
Avatar billede kabbak Professor
30. oktober 2003 - 12:39 #10
martin > ikke hvis der er data i arket
Avatar billede martin_moth Mester
30. oktober 2003 - 12:41 #11
kabbak: Jo da - den sidste celle er altid IV65536, hvis vi vel at mærke også tæller tomme celler med. Men det var bare en dum joke...
Avatar billede slapstick Nybegynder
30. oktober 2003 - 12:55 #12
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..
Avatar billede kabbak Professor
30. oktober 2003 - 13:44 #13
koden her er i VBA og ligger i et modul i excel
Avatar billede slapstick Nybegynder
30. oktober 2003 - 13:48 #14
ok men jeg sidder ikke i excel
jeg har lavet et rent visual basic program der skal hente samtlige række/kolonner i et sheet i en excel fil
Avatar billede kabbak Professor
30. oktober 2003 - 13:52 #15
ok, jeg har ikke VB, så jeg kan ikke hjælpe dig mere.
Avatar billede slapstick Nybegynder
30. oktober 2003 - 14:06 #16
nå ok
men jeg takker så ! :)
Avatar billede martin_moth Mester
30. oktober 2003 - 14:19 #17
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
Avatar billede martin_moth Mester
30. oktober 2003 - 14:21 #18
Øhh - jeg ser lige kabbaks svar - det han gør er jo netop at connecte til Excel fra VB - ikke VBA... Hmmm - forvirringen er total, eller?
Avatar billede slapstick Nybegynder
30. oktober 2003 - 14:22 #19
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
Avatar billede martin_moth Mester
30. oktober 2003 - 14:25 #20
Er det ikke det kabbak gør med

  A = ActiveCell.SpecialCells(xlLastCell).Address

?
Avatar billede slapstick Nybegynder
30. oktober 2003 - 14:26 #21
det skulle man tro
men det virker ikke i mit vb app
Avatar billede martin_moth Mester
30. oktober 2003 - 14:32 #22
Fejlmeddelse?
Avatar billede slapstick Nybegynder
03. november 2003 - 14:26 #23
jamen jeg får ik en fejlmeddelelse
den åbner bare excel
det er det eneste der sker
jeg har prøvet at lave en msgbox(A) men der sker minus
Avatar billede martin_moth Mester
03. november 2003 - 14:33 #24
Prøv at se om du kan køre xlapp.fact(6) (resultat = 21) og se om der overhovedet er forbindelse
Avatar billede slapstick Nybegynder
03. november 2003 - 14:39 #25
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

End Function
Avatar billede slapstick Nybegynder
04. november 2003 - 10:21 #26
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 :(
Avatar billede slapstick Nybegynder
05. november 2003 - 09:53 #27
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?
Avatar billede kabbak Professor
05. november 2003 - 09:57 #28
ja, du kan ikke aktivere en celle uden at mappen er åben.
men du kan, via formel, godt hente en værdi i en bestemt celle, hvor du kender adressen.
Avatar billede slapstick Nybegynder
05. november 2003 - 10:01 #29
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?
Avatar billede bak Forsker
05. november 2003 - 10:12 #30
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 ?
Avatar billede slapstick Nybegynder
05. november 2003 - 10:18 #31
som regel vil det være i formatet navn gadenavn gadenr postnr by land bla1 bla2 bla3 bla3 osv1 osv2

men det kan jeg ik være sikker på for man ved aldrig hvad folk propper i deres excel ark

så det jeg skal bruge er værdierne i cellerne i rangen fra startcelle til slutcelle

min ide var så at få adressen på den sidste celle med indhold i og så tage fra A1 til den
men det ka jeg godt se den ide holder ik vand hehe
Avatar billede slapstick Nybegynder
05. november 2003 - 10:22 #32
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..
Avatar billede bak Forsker
05. november 2003 - 10:23 #33
Jo, men excel skal stadig være åben, for at man kan bruge usedrange
Avatar billede slapstick Nybegynder
05. november 2003 - 10:26 #34
hmm jeg har da ellers brugt det her med fin succes uden at ha excel åben??

rowCount = objWorkbook.sheets(1).UsedRange.Rows.Count
colCount = objWorkbook.sheets(1).UsedRange.Columns.Count
Avatar billede bak Forsker
05. november 2003 - 10:33 #35
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
   
 
    rsData.Close
    Set rsData = Nothing

End Sub
Avatar billede slapstick Nybegynder
05. november 2003 - 10:41 #36
hmm ok det kan godt være det er skjult det ved jeg ikke helt hehe

koden er her og jeg tester lige din løsning engang :)

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
       
        On Error Resume Next

        AppActivate "Microsoft Excel"
       
        On Error GoTo err_OpenXLSFile
       
        Set objWorkbook = objExcel.Workbooks.Open(strXLSFile)
       
        On Error Resume Next
       
        objWorkbook.Activate
       
        On Error GoTo err_OpenXLSFile
       
        OpenXLSFile = True
       
        MsgBox "Antallet af sheets er : " & objWorkbook.sheets.Count
       
        rowCount = objWorkbook.sheets(1).UsedRange.Rows.Count
        colCount = objWorkbook.sheets(1).UsedRange.Columns.Count
  Exit Function
   
err_OpenXLSFile:
    OpenXLSFile = False

End Function
Avatar billede slapstick Nybegynder
05. november 2003 - 10:45 #37
hmm et hurtigt spørgsmål
jeg skal jo stadig loope igennem dataen uden at vide hvad felter osv hedder
nogen ide til det?
Avatar billede slapstick Nybegynder
05. november 2003 - 10:48 #38
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
Avatar billede slapstick Nybegynder
16. december 2003 - 14:22 #39
...
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