Advertisement
Guest User

Untitled

a guest
Mar 5th, 2019
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Option Explicit
  2.  
  3. '
  4. ' Globale
  5. '
  6.  
  7. Dim wkbCalcule As Excel.Workbook
  8. Dim blnCaietExistent As Boolean
  9.  
  10. Public Sub CreareCaiet()
  11.     Dim intNrFoi As Integer
  12.     '
  13.    ' Se memoreaza numarul de foi dintr-un caiet (workbook) nou
  14.    ' (setare generala Excel)
  15.    '
  16.    intNrFoi = Application.SheetsInNewWorkbook
  17.     '
  18.    ' Se verifica existenta un caiet cu numele Calcule.xls
  19.    '
  20.    VerificareCaiet
  21.     '
  22.    ' Daca nu, este creat un caiet nou, care se salveaza cu numele Calcule.xls
  23.    '
  24.    If blnCaietExistent Then    'Caietul Calcule.xls este deschis
  25.        MsgBox "Caietul ""Calcule"" exista", vbOKOnly, "Verificare"
  26.     Else
  27.         '
  28.        ' Se deschide un nou caiet, cu o singura foaie
  29.        '
  30.        Application.SheetsInNewWorkbook = 1
  31.         Set wkbCalcule = Application.Workbooks.Add 'creere
  32.        '
  33.        ' Se restaureaza numarul de foi dintr-un caiet nou
  34.        ' (la valoarea memorata anterior)
  35.        '
  36.        Application.SheetsInNewWorkbook = intNrFoi
  37.         wkbCalcule.SaveAs fileName:="Calcule.xls"   ' caietul se salveaza cu numele Calcule.xls .Save se poate doar dupa SaveAs
  38.        '
  39.        ' Se modifica numele foii de calcul
  40.        '
  41.        wkbCalcule.Worksheets(1).Name = "Calcule"
  42.         MsgBox "S-a creat caietul ""Calcule""", vbOKOnly, "Verificare"
  43.     End If
  44.     '
  45.    ' Se activeaza primul caiet deschis (focus)
  46.    '
  47.    Workbooks(1).Activate
  48.     '
  49.    ' Se apeleaza procedura de organizare a caietului
  50.    '
  51.    OrganizareCaiet
  52. End Sub
  53.  
  54. Private Sub OrganizareCaiet()
  55.     Dim intIndex As Integer, intIndexCol As Integer, intLinii As Integer, intColoane As Integer
  56.     Dim wkbActiv As Excel.Workbook
  57.     Dim rngTitlu As Excel.Range, rngDate As Excel.Range, rngSursa As Excel.Range
  58.     '
  59.    ' Se memoreaza caietul activ
  60.    '
  61.    Set wkbActiv = ActiveWorkbook
  62.     If wkbActiv Is wkbCalcule Then 'Compara referinte
  63.        MsgBox "Activati un caiet diferit de caietul Calcule"
  64.         Exit Sub    ' Daca procedura se initiaza dintr-un caiet diferit de Calcule.xls
  65.    End If
  66.     '
  67.    ' Se memoreaza regiunea curenta din caietul sursa
  68.    '
  69.    Set rngSursa = wkbActiv.Worksheets(1).Range("A1").CurrentRegion 'CurrentRegion se refera la un dreptunghi minimal, dar sa fie conexe celulele
  70.    intLinii = rngSursa.Rows.Count  ' Numarul de linii din sursa
  71.    intColoane = rngSursa.Columns.Count ' Numarul de coloane din sursa
  72.    
  73.     wkbCalcule.Activate
  74.     wkbCalcule.Worksheets(1).UsedRange.Delete   ' se elimina datele existente in Calcule.xls
  75.    '
  76.    ' Completarea informatiilor in zona destinatie
  77.    '
  78.    ' Titlul
  79.    '
  80.    Set rngTitlu = Range("A1")
  81.     With rngTitlu
  82.         .Value = "Lista"
  83.         .Font.Name = "Arial"
  84.         .Font.Bold = True
  85.         .Font.Size = 16
  86.         .HorizontalAlignment = xlCenter
  87.     End With
  88.     Range("A1:C1").Merge (True)
  89.     Set rngDate = Range(Cells(3, 1).Address, Cells(intLinii + 3, 1 + intColoane).Address)
  90.     '
  91.    ' Linia de antet
  92.    '
  93.    With rngDate
  94.         .Interior.Color = vbBlue
  95.         .Cells(1, 1) = "Nr.crt."
  96.         .Cells(1, 2) = "Denumire"
  97.         .Cells(1, 3) = "Valoare"
  98.         .Cells(1, 4) = "Altele"
  99.         .Rows(1).Interior.Color = vbGreen
  100.         '
  101.        ' Copierea informatiilor din sursa
  102.        '
  103.        For intIndex = 1 To intLinii
  104.             .Cells(intIndex + 1, 1) = intIndex
  105.             For intIndexCol = 1 To intColoane
  106.                 .Cells(intIndex + 1, intIndexCol + 1) = rngSursa.Cells(intIndex, intIndexCol)
  107.             Next intIndexCol
  108.         Next intIndex
  109.         '
  110.        ' Completarea cu linia de total
  111.        '
  112.        .Cells(intLinii + 2, 2) = "Total"
  113.         For intIndexCol = 2 To intColoane
  114.             .Cells(intLinii + 2, intIndexCol + 1).Formula = "=SUM(" & .Cells(2, intIndexCol + 1).Address & _
  115.             ":" & .Cells(intLinii + 1, intIndexCol + 1).Address & ")"
  116.         Next intIndexCol
  117.        
  118.         .Rows(intLinii + 2).Interior.Color = vbYellow
  119.         .Columns(1).Interior.Color = vbYellow
  120.     End With
  121.    
  122.     wkbActiv.Activate   ' Se activeaza caietul initial
  123. End Sub
  124.  
  125. Private Sub VerificareCaiet()
  126.     Dim wkbCaiet As Workbook
  127.     Dim filName As Variant ' orice tip de var
  128.    '
  129.    ' Se verifica existenta unui caiet deschis cu numele Calcule.xls
  130.    '
  131.    blnCaietExistent = False
  132.    
  133.     For Each wkbCaiet In Application.Workbooks
  134.         If wkbCaiet.Name = "Calcule.xls" Then
  135.             blnCaietExistent = True
  136.             Set wkbCalcule = wkbCaiet
  137.         End If
  138.     Next
  139.     '
  140.    ' Se verifica existenta unui caiet salvat cu numele Calcule.xls
  141.    ' in directorul curent
  142.    '
  143.    ' DEPRECATED
  144.    'If Not blnCaietExistent Then
  145.    '    With Application.FileSearch
  146.    '        .NewSearch
  147.    '        .fileName = "Calcule.xls"
  148.    '        .MatchTextExactly = True
  149.    '    End With
  150.    '
  151.    '    If Application.FileSearch.Execute() > 0 Then ' exista caietul Calcule.xls
  152.    '        Workbooks.Open "Calcule.xls"    ' se deschide caietul. Il face automat activ, fata de cum face add.
  153.    '        Worksheets(1).UsedRange.Delete  ' se elimina informatia existenta. UsedRange e un dreptunghi minim din ala cu A3:C5 care contine toate informatiile din xls
  154.    '        blnCaietExistent = True
  155.    '        Set wkbCalcule = Workbooks("Calcule.xls")
  156.    '    End If
  157.    'End If
  158.    If Len(Dir("Calcule.xls")) > 0 Then
  159.         Workbooks.Open ("Calcule.xls")
  160.         Worksheets(1).UsedRange.Delete
  161.         blnCaietExistent = True
  162.         Set wkbCalcule = Workbooks("Calcule.xls")
  163.     End If
  164. End Sub
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement