Avatar billede palleren Novice
20. februar 2015 - 08:52 Der er 16 kommentarer og
1 løsning

Spørgsmål til VBA

Hej jeg sidder og roder med et VBA udtræk jeg foretager fra et andet program (IBM Reflection).

Jeg får hentet data osv fint over i et nyt ark der opretter til formålet. Dernæst formaterer jeg regnearket så det ser fint ud, og HER opstår problemet.

Når jeg kører min første eksport fungerer det fint og den centrerer alle rækker helt ned til sidst brugte række. Men kører jeg så en ny eksport centrerer den kun ned til samme række som var i kørslen før.

Det er altså som om den "gemmer" min LastRow.... Men hvorfor er det? og hvordan kan jeg omgå det. Håber en kan hjælpe mig.

Den kode som jeg tror fejlen er i, står herunder.

_____________________________________________________________

With ws.Range("a1:f1")
        .HorizontalAlignment = xlCenter
        .Font.Italic = True
        .Font.Bold = True
        .EntireColumn.ColumnWidth = 15
        .AutoFilter
    End With
   
    With ws.Range("a2:f" & antalRaekker)    '
        .HorizontalAlignment = xlCenter
    End With
____________________________________________________
Function LastRow() As Long
  Dim ix As Long
  ix = ActiveSheet.UsedRange.Row - 1 + ActiveSheet.UsedRange.Rows.Count
  LastRow = ix

End Function
____________________________________






Med venlig hilsen
Palle
Avatar billede supertekst Ekspert
20. februar 2015 - 09:18 #1
Hvornår gemmes arket?
Avatar billede palleren Novice
20. februar 2015 - 09:26 #2
Hej Supertekst...

Jamen arket gemmes kun såfremt brugeren ønsker at gemme udtrækket, derfor det undrer mig at det virker som om den "gemmer" den sidste række fra forrige kørsel.


Men jeg forestiller mig at brugerne gerne vil lave flere eksports, uden at gemme arkene ... muligvis laver de en eksport, sorterer lidt i den, får et overblik og lukker det igen uden at gemme fx



Vh Palle
Avatar billede supertekst Ekspert
20. februar 2015 - 09:41 #3
Spørgsmålet er om "systemet" opdatere sidste række når der hentes flere data ind i arket?
Avatar billede palleren Novice
20. februar 2015 - 09:50 #4
Hej igen, og tak for din hjælp, men du må undskylde jeg ikke helt jeg forstår hvad du mener...


Når jeg genererer "et" ark, så laver den det den skal, henter de rette felter over, laver måske lad os sige 60 rækker i første udtræk.

Dernæst ønsker jeg at lave en nyt udtræk på nogle andre parametre, fx vores kunder i Jylland (hvor det før var fx Fyn).

Så er problemet at når jeg laver denne udtræk over Jylland, så er der måske 160 rækker. Men den har kun formateret de 60 første rækker denne gang.

Håber dette giver mere klarhed?

vh Palle
Avatar billede supertekst Ekspert
20. februar 2015 - 09:58 #5
Ok - jeg afprøver din kode og vender tilbage.
Avatar billede supertekst Ekspert
20. februar 2015 - 10:10 #6
Sidste række erkendes Ok - men prøv at foretage samme ændring*)

Sub test()
Dim antalRaekker As Integer
Dim ws As Worksheet

antalRaekker = LastRow
Set ws = ActiveSheet

    With ws.Range("a1:f" & antalRaekker)  '<====== *)
        .HorizontalAlignment = xlCenter
        .Font.Italic = True
        .Font.Bold = True
        .EntireColumn.ColumnWidth = 15
        .AutoFilter
    End With
   
    With ws.Range("a2:f" & antalRaekker)    '
        .HorizontalAlignment = xlCenter
    End With
End Sub
Function LastRow() As Long
  Dim ix As Long
  ix = ActiveSheet.UsedRange.Row - 1 + ActiveSheet.UsedRange.Rows.Count
  LastRow = ix

End Function
Avatar billede palleren Novice
20. februar 2015 - 11:47 #7
Hej igen

Nu har jeg testet det end du ændring og det gør umiddelbart ingen forskel? Den gør stadig det samme.

Desuden er der ingen grund til at ændre den første range, da A1 til f1 skal have en anden formatering end A2:antalRaekker.
Avatar billede supertekst Ekspert
20. februar 2015 - 12:11 #8
Ok - forstået.
Har du mulighed for at uploade filen - så den totale VBA-kode kan ses?
Avatar billede palleren Novice
20. februar 2015 - 12:19 #9
Jeg fandt en anden løsning på problemet, så nu er det ordnet:) ellers tak for hjælpen :)
Avatar billede palleren Novice
20. februar 2015 - 12:22 #10
Nu har jeg dog det problem at Excel autoformaterer nogle af de felter jeg importerer og det gør at en del datoer volder problemer....(de vises simpelthen forkert i Excel arket)... ved du hvordan jeg kan slå det fra?


Private Sub ExportOrder()

Dim strPostkasse As String, strOmrådet As String, intDage As Integer

If MitSystem <> "DOK" Then SkiftSystem "DOK"
If chkKundLov2 Then
    Select Case UCase(Format(Date, "dddd"))
        Case "THURSDAY", "TORSDAG"
            intDage = 4
        Case "FRIDAY", "FREDAG"
            intDage = 4
        Case Else
            intDage = 2
    End Select

ElseIf chkKundLov5 Then
'    Select Case UCase(Format(Date, "dddd"))
'        Case "THURSDAY", "TORSDAG"
'            intDage = 7
'        Case "FRIDAY", "FREDAG"
'            intDage = 7
'        Case "MANDAG", "MONDAY"
'            intDage = 7
'        Case "TIRSDAG"
'        Case Else
            intDage = 7
'    End Select
Else
    Select Case UCase(Format(Date, "dddd"))
        Case "FRIDAY", "FREDAG"
            intDage = 3
        Case Else
            intDage = 1
    End Select
End If

JumpTo 3, 9
Transmit "ov " & HentPostkasse
EnterTast
If ScreenText(1, 3, 12) = "RDREOVERSIGT" Then
    Me.Caption = Me.Caption & "...henter ordrer"
    If chkKundLov2 Then
        JumpTo 4, 58
        Transmit Format(Date + intDage, "ddmmyy")
        JumpTo 5, 71
        Transmit Format(Date, "ddmmyy")
    ElseIf chkKundLov1 Then
        JumpTo 4, 58
        Transmit Format(Date + intDage, "ddmmyy")
        JumpTo 5, 71
        Transmit Format(Date, "ddmmyy")
    ElseIf chkKundLov5 Then
        JumpTo 4, 58
        Transmit Format(Date + intDage, "ddmmyy")
        JumpTo 5, 71
        Transmit Format(Date, "ddmmyy")
    Else
        JumpTo 4, 58
        EraseAll
        JumpTo 5, 71
        EraseAll
    End If
    JumpTo 6, 77
    Transmit "BE"
    EnterTast
Else
    MsgBox "Ikke i 'ORDREOVERSIGT' som forventede?", , "I'm lost!?"
End If

    Dim obExcel As excel.Application
    Dim wb As Workbook
    Dim ws As Worksheet
    Dim PallesArray(1000, 6) As String
    Dim iCount As Integer
    Dim p As Integer
    Dim pOrdrer As Integer 'Tællevariablen til at finde antal ordrer i alt
    Dim p2 As Integer
    Dim p3 As Integer
    Dim j As Integer
   
   

   
    JumpTo 6, 77 'Hopper til koordinatet
    EraseAll 'Sletter alt på den linie
    EnterTast ' Enter / CTRL

   
    If Trim(ScreenText(1, 59, 3)) = vbNullString Then ' Tester om der er nogle ordrer overhovedet. Hvis ikke så ender den, og brugeren skal lave ny søgning/eksport
   
    MsgBox "Nothing to find with the given criteria."
       
    End
        Else
        p = Trim(ScreenText(1, 74, 3)) ' Finder sideantal og fjerner evt spacing
    End If
   
 
   
   
    pOrdrer = Trim(ScreenText(1, 59, 3)) ' Finder sideantal og fjerner evt spacing

    Set obExcel = New excel.Application
    obExcel.Application.Visible = True

    Set wb = obExcel.Workbooks.Add(xlWBATWorksheet) 'Laver en fil, og så kan brugeren vælg at gemme eller lade være
    Set ws = obExcel.Sheets(1)
    ws.Activate
  ' Application.ScreenUpdating = False
                 
   
    p2 = 2 'Tællevariablen
    p3 = GetLastRow ' Kalder funktionen getLastRow() som er skrevet nedenunder
    For j = 1 To p
        For iCount = 9 To p3 ' Starter ved række 9 i DOK og tæller op til sidste række der er tekst i
            PallesArray(p2, 1) = ScreenText(iCount, 9, 10)
            PallesArray(p2, 2) = ScreenText(iCount, 63, 4)
            PallesArray(p2, 3) = ScreenText(iCount, 78, 2)
            ws.Cells(p2, 1).Value = PallesArray(p2, 1)
            ws.Cells(p2, 2).Value = PallesArray(p2, 2)
            ws.Cells(p2, 3).Value = PallesArray(p2, 3)
            p2 = p2 + 1
        Next
       
           
        SkiftF3 'tager de næste sider indtil man er oppe ved p som er sideantallet.
    Next
   

    F2 'Hopper ind på den første ordre, herefter skal man bruge "F3" for at bladre gennem ordrerne


'/-- Nu kommer loopet til at hente tingene frem på hver enkelt ordre, og så sætte de info ind i rækken på excel arket --/


    p2 = 2 'Tællevariablen for at starte i 2. række
    p3 = GetLastRow ' Kalder funktionen getLastRow() som er skrevet nedenunder
    For j = 1 To pOrdrer 'pOrdrer er lig med det antal order som der er i alt
     
            PallesArray(p2, 4) = ScreenText(10, 68, 4)
            PallesArray(p2, 5) = ScreenText(10, 13, 10)
            PallesArray(p2, 6) = ScreenText(1, 32, 9)
            ws.Cells(p2, 4).Value = PallesArray(p2, 4)
            ws.Cells(p2, 5).Value = PallesArray(p2, 5)
            ws.Cells(p2, 6).Value = PallesArray(p2, 6)
       
        p2 = p2 + 1
        F3
    Next
   



    ' Formatering af tekst
    With ws.Cells
    ws.Cells(1, 1) = "LID"
    ws.Cells(1, 2) = "DOK DATO"
    ws.Cells(1, 3) = "BEHTIL"
    ws.Cells(1, 4) = "Arbnr"
    ws.Cells(1, 5) = "Lovet UDF"
    ws.Cells(1, 6) = "CU Ordrenummer"
    End With
   

 
    With ws.Range("a1:f1")
        .HorizontalAlignment = xlCenter
        .Font.Italic = True
        .Font.Bold = True
        .EntireColumn.ColumnWidth = 15
        .AutoFilter
    End With
   
'    Dim antalRaekker As Integer
'
'    antalRaekker = LastRow
       
   
    With ws.Range("a2:f" & pOrdrer + 1)
        .HorizontalAlignment = xlCenter
    End With


End Sub

Function GetLastRow() As Integer
    Dim i As Integer
    i = 9
    Do Until Trim(ScreenText(i, 78, 1)) = vbNullString
    i = i + 1
    Loop
    i = i - 1
    GetLastRow = i
End Function


Function LastRow() As Long
  Dim ix As Long
  ix = ActiveSheet.UsedRange.Row - 1 + ActiveSheet.UsedRange.Rows.Count
  LastRow = ix'
End Function
Avatar billede supertekst Ekspert
20. februar 2015 - 12:31 #11
Prøv at vise hvad der går galt?

Er det i forbindelse med:       
Transmit Format(Date + intDage, "ddmmyy")
Avatar billede palleren Novice
20. februar 2015 - 12:33 #12
Jeg formoder at det går galt i og med at mit Excel ark, blot autoformaterer datoer(nogle af dem er autoformateret, mens andre behandles som standard).

Da det er strings jeg importerer ville jeg foretrække den bare lod alle være standard.:/
Avatar billede supertekst Ekspert
20. februar 2015 - 12:51 #13
Der er vist ikke noget, der lige kan slås fra.

Hvordan ser de forskellige datoformater ud?
Avatar billede palleren Novice
20. februar 2015 - 12:52 #14
Jeg fandt en måde at formatere cellerne til tekst før jeg indsatte det, og så fungerer det umiddelbart:

With ws.Range("a2:f" & pOrdrer + 1)
        .HorizontalAlignment = xlCenter
        ws.Cells.NumberFormat = "@"
End With

og den ws. inde i With statement' laver jeg fordi den brokkede sig indtil jeg skrev det endnu engang...umiddelbart redundant... men det løste problemet:)
Avatar billede supertekst Ekspert
20. februar 2015 - 14:03 #15
Fint nok..
Avatar billede palleren Novice
20. februar 2015 - 14:57 #16
Du må have en god weekend:)
Avatar billede supertekst Ekspert
20. februar 2015 - 15:20 #17
I lige måde..
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

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



IT-JOB

Saab Danmark A/S

Junior System Engineer

Staten og Kommunernes Indkøbsservice A/S (SKI)

IT-udvikler

Saab Danmark A/S

Test Manager