vbamania.pl
login:
hasło:
 
  *Rejestracja *Zapomniane hasło
 Dziś jest wtorek, 30 kwietnia 2024 roku.
Ustaw jako stronę startową Ulubione Napisz
PowrótPowrót do serwisu  RegulaminRegulamin rssRSS

  tytuł wątku:
Wątki dyskusji

Problem z czasem działania makra


otwartyotwarty rozpoczął: marcinl87 postów: 2



napisał: Trebor
postów: 1209


umieszczony:
1 czerwca 2012
18:56

  
Na początek kilka ogólnych uwag.
Deklaracje się błędnie napisane np.:
Dim licznik, koniec As Integer

koniec jest integer, ale licznik już nie. Powinno być:
Dim licznik as integer, koniec As Integer



Na początku makra możesz dodać linię
Application.ScreenUpdating = False

i na końcu taką samą linię z true. Zapobiegnie to odświeżaniu ekranu co przyśpieszy działanie makra i zapobiegnie strzelaniu po oczach.

Sprawdź instrukcję With co robi i jak się nią posługiwać.
Największy Twój błąd to:
Cells.Select
    Selection.Copy

Unikaj jak ognia poleceń typu activate, select. Jeśli kopiujesz to tylko tyle komórek ile potrzeba, a nie wszystkie z arkusza.

Mam nadzieję, że do następnego postu.
napisał: marcinl87
postów: 1


umieszczony:
31 maja 2012
20:26

  
Witam,
na początku zaznaczę że jestem samoukiem w tej dziedzinie oraz że to moje pierwsze "dzieło".
Proste makro napisałem żeby nie wykonywać prostych czynności które muszę wykonywać co miesiąc. Na razie napisałem tylko część makra, która wydaje mi się że działa troche za długo ( ok 5min) jak na wielkość testowego pliku 2MB( w rzeczywistości będzie on 20 razy większy).
Więc tak, makro ma zadanie podzielić plik wyjściowy według filtru założonego na jednej z kolumn według kilku kryterium.
Moja prośba o sprawdzenie czy nie da się tego conapisałem uprościć. Za wszystkie uwagi będę wdzięczny.

Sub PodziałPliku()

'--------------------------------------------
'Deklaracja zmiennych
'--------------------------------------------

Dim Polecenie1, Polecenie2, Tytuł1, Tytuł2, Miesiąc, DataRaportu, Raportścieżka As String
Dim wart As String
Dim wyjdz As Integer
Dim licznik, koniec As Integer
Dim kryterium, hasło, nazwa As String

Podział = ActiveWorkbook.Name
    koniec = Cells(1, 6) 'liczba kryterium
'--------------------------------------------
'Otworzenie raportu
'--------------------------------------------

Do
wyjdz = 0
Polecenie1 = "Podaj miesiąc raportu"
Tytuł1 = "Miesiąc"
Miesiąc = InputBox(Polecenie1, Tytuł1, Default)
Polecenie2 = "Podaj datę raportu(RRRRMMDD)"
Tytuł2 = "Data raportu"
DataRaportu = InputBox(Polecenie2, Tytuł2, Default)

Raportścieżka = "I:\" & Miesiąc & "\Raport_" & DataRaportu & ".xlsx"
If FileOrDirExists(Raportścieżka) Then
Workbooks.Open (Raportścieżka)
Else
wart = MsgBox("Brak podanego raportu! Czy szukać jeszcze raz?", vbYesNo)
If wart = 6 Then
wyjdz = 1
End If
End If
Loop While wyjdz = 1

'--------------------------------------------
'Sortowanie
'--------------------------------------------
ActiveWorkbook.Worksheets("Arkusz1").AutoFilter.Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Arkusz1").AutoFilter.Sort.SortFields.Add Key:= _
        Range("C1:C16038"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption _
        :=xlSortNormal
    With ActiveWorkbook.Worksheets("Arkusz1").AutoFilter.Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
'--------------------------------------------
'Podział raportu
'--------------------------------------------

For licznik = 2 To koniec

'Tworzenie pliku
    Workbooks(Podział).Activate
    kryterium = Cells(licznik, 1) 'kolejne kryterium zapisane w kolumnie 1
    hasło = Cells(licznik, 2) 'każdy plik ma być zabezpieczony innym hasłem ipod inną nazwą
    nazwa = Cells(licznik, 3)
    
    Workbooks("Raport_" & DataRaportu & ".xlsx").Activate
    ActiveSheet.Range("$A$1:$R$16038").AutoFilter Field:=3, Criteria1:=kryterium, _
        Operator:=xlAnd
    Cells.Select
    Selection.Copy
    Workbooks.Add
    ActiveSheet.Paste
    Application.CutCopyMode = False
    ActiveWorkbook.SaveAs Filename:= _
        "I:\oddziały_zestawienie\" & Miesiąc & "\" & nazwa & ".xls", FileFormat:= _
        xlOpenXMLWorkbook, CreateBackup:=False, Password:=hasło
    ActiveWindow.Close
    

Next licznik

Workbooks("Raport_" & DataRaportu & ".xlsx").Close SaveChanges:=False
MsgBox ("Koniec podziału")
End Sub

Function FileOrDirExists(PathName As String) As Boolean
     'Macro Purpose: Function returns TRUE if the specified file
     ' or folder exists, false if not.
     'PathName : Supports Windows mapped drives or UNC
     ' : Supports Macintosh paths
     'File usage : Provide full file path and extension
     'Folder usage : Provide full folder path
     ' Accepts with/without trailing "\" (Windows)
     ' Accepts with/without trailing ":" (Macintosh)
     
    Dim iTemp As Integer
     
     'Ignore errors to allow for error evaluation
    On Error Resume Next
    iTemp = GetAttr(PathName)
     
     'Check if error exists and set response appropriately
    Select Case Err.Number
    Case Is = 0
        FileOrDirExists = True
    Case Else
        FileOrDirExists = False
    End Select
     
     'Resume error checking
    On Error GoTo 0
End Function



<-wstecz  1  dalej->
wszystkich stron: 1


Sortuj posty: z