20. februar 2015 - 08:52Der 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.
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
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
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
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
' 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
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:)
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.