Redenumire sheet

tuxman
Mesaje: 43
Membru din: Sâm Ian 29, 2011 9:22 am

Redenumire sheet

Mesaj de tuxman » Lun Iul 23, 2018 10:08 am

Salutare,

Am un fisier Excel care contine 2 sheet-uri: Template si SURSA.
Vreau sa execut urmatoarele sarcini cu cod VBA:
1)- la click pe Insert Worksheet, sa se creeze un nou sheet identic cu "Template"
2)- in sheet nou creat: dupa ce user-ul selecteaza ceva din listele aflate in celulele B2, B3 ,B4 si B5 (listele fiind legate intre ele), sa se inlocuiasca numele sheet-ului cu B4 & "_" & B5

1) functioneaza ok, dar 2) deloc.

Codul meu:

Cod: Selectaţi tot

Private Sub Workbook_NewSheet(ByVal Sh As Object)
    Dim wsSource As Worksheet
    
    Set wsSource = Worksheets("Template")
   
    
   Sheets("Template").Select
   Range("A1:K100").Copy
   
   Sh.Select
   Range("A1").Select
   ActiveSheet.Paste

End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
    
        If Not Intersect(Target, Range("B5")) Is Nothing Then
            
            Select Case Range("B5")
                  Call MyMacroRename
            End Select
        End If
    
End Sub

Sub MyMacroRename()
    Dim sheetXXX As Worksheet
    Set sheetXXX = ActiveWorkbook.ActiveSheet
    sheetXXX.Name = sheetXXX.Range("B4").Value & "_" & sheetXXX.Range("B5").Value
End Sub
Nu aveţi permisiunea de a vizualiza fişierele ataşate acestui mesaj.

TudyBTH
Moderator
Moderator
Mesaje: 993
Membru din: Joi Feb 11, 2016 2:12 pm
Localitate: Cluj Napoca

Re: Redenumire sheet

Mesaj de TudyBTH » Lun Iul 23, 2018 3:12 pm

Buna,
Din pacate cred ca ati inceput cu stangul, codurile trebuiesc puse intr-un modul standard.
In modulele ThisWorkbook sau modulele foilor se pun doar codurile care depin de evenimentele cere au loc in acel workbook sau intr-o anumita foaie.


Mai mult, nu este prea clara nici logica a ceea ce solicitati.
Din ceea ce spuneti, pare a fi vorba de inregistrarea unor date legate de anumiti parametrii
Nava:
Expeditie:
Profil:
Statie:
Numele foii ar trebui stabilit inainte de completarea ei pentru ca orice apelare ulterioara a acestei foi prin cod se va face cu acel nume (se poate si altfel dar e mult mai complicat).
Pe de alta parte, nu cred ca stocare datelor in foi diferite este o solutie foarte buna. Daca ulterior veti dori sa centralizati datele din mai multe foi veti intampine probleme. Normal ar fi sa introduceti toate datele intr-un singur tabel si de acolo pot fi afisate/listate/editate chiar, intr-un formular separat (acel template de exemplu).

Daca ne oferiti mai multe detalii despre modul in care introduceti si mai ales cum doriti sa folositi in continuare acele date va putem da solutii concrete.
Am invatat sa inotam in apa, ca pestii
Am invatat sa zburam in aer, ca pasarile
A ramas doar sa invatam sa traim pe Pamant, ca Oamenii.

H2SO4
Mesaje: 135
Membru din: Mar Apr 19, 2016 12:50 pm

Re: Redenumire sheet

Mesaj de H2SO4 » Mar Iul 24, 2018 10:25 am

Salut,
Vreau sa execut urmatoarele sarcini cu cod VBA:
1)- la click pe Insert Worksheet, sa se creeze un nou sheet identic cu "Template"
2)- in sheet nou creat: dupa ce user-ul selecteaza ceva din listele aflate in celulele B2, B3 ,B4 si B5 (listele fiind legate intre ele), sa se inlocuiasca numele sheet-ului cu B4 & "_" & B5
Se poate face, dar nu ar fi mai simplu ca userul sa completeze B2:B5 in sheetul "Template" si apoi cu ajutorul unui Worksheet_change event, sa se creeze o noua foaie cu numele din B4&"-"&B5, eventual cu o verificare a existentei foii?
Daca e OK asa am sa revin cu un cod VBA.
“Tell me and I forget, teach me and I may remember, involve me and I learn.”

tuxman
Mesaje: 43
Membru din: Sâm Ian 29, 2011 9:22 am

Re: Redenumire sheet

Mesaj de tuxman » Mar Iul 24, 2018 10:48 am

Salut,

Multumesc mult pentru raspuns.

Foile vor fi inserate intr-o baza de date MySQL; o foaie corespunde unui tabel, legatura dintre ele se face pe baza numelui foii.

Numele se creeaza in functie de ceea ce selecteaza utilizatorul, in celulele B2, B3, B4 si B5. Deci, dupa ce a selectat un item in B5, ar trebui sa se redenumeasca foaia.

Numai bine !

H2SO4
Mesaje: 135
Membru din: Mar Apr 19, 2016 12:50 pm

Re: Redenumire sheet

Mesaj de H2SO4 » Mar Iul 24, 2018 10:55 am

Eu nu am inteles cui ai raspuns!
“Tell me and I forget, teach me and I may remember, involve me and I learn.”

tuxman
Mesaje: 43
Membru din: Sâm Ian 29, 2011 9:22 am

Re: Redenumire sheet

Mesaj de tuxman » Mar Iul 24, 2018 11:17 am

H2SO4 scrie:Eu nu am inteles cui ai raspuns!
Scuze, am raspuns lui TudyBTH.
Se poate face, dar nu ar fi mai simplu ca userul sa completeze B2:B5 in sheetul "Template" si apoi cu ajutorul unui Worksheet_change event, sa se creeze o noua foaie cu numele din B4&"-"&B5, eventual cu o verificare a existentei foii?
Pai atunci, mai bine userul completeaza toate campurile din "Template", si cand apasa pe un buton, sa se creeze o foaie noua cu valorile din "Template", si cu numele format din B4&"-"&B5. Asa ar fi mult mai ok.

TudyBTH
Moderator
Moderator
Mesaje: 993
Membru din: Joi Feb 11, 2016 2:12 pm
Localitate: Cluj Napoca

Re: Redenumire sheet

Mesaj de TudyBTH » Mar Iul 24, 2018 11:21 am

Buna,
aveti in atasament o solutie

Noua foaie este creata automat in momentul in care toate cele patru campuri sunt completate (nici unul dintre ele nu este blank) iar selectia trece la alta celula
Daca noua denumire exista deja, se adauga un index la sfarsitul denumirii (ex: Sulina_10m_2, Sulina_10m_3, ...)
Nu aveţi permisiunea de a vizualiza fişierele ataşate acestui mesaj.
Am invatat sa inotam in apa, ca pestii
Am invatat sa zburam in aer, ca pasarile
A ramas doar sa invatam sa traim pe Pamant, ca Oamenii.

TudyBTH
Moderator
Moderator
Mesaje: 993
Membru din: Joi Feb 11, 2016 2:12 pm
Localitate: Cluj Napoca

Re: Redenumire sheet

Mesaj de TudyBTH » Mar Iul 24, 2018 11:29 am

in versiunea "caiet_de_mare_test_2B.xlsm" se sterg toate campurile din Template dupa fiecare salvare (am creat un nume definit "_inputRange" pentru toate campurile editabile din sheet
Nu aveţi permisiunea de a vizualiza fişierele ataşate acestui mesaj.
Am invatat sa inotam in apa, ca pestii
Am invatat sa zburam in aer, ca pasarile
A ramas doar sa invatam sa traim pe Pamant, ca Oamenii.

tuxman
Mesaje: 43
Membru din: Sâm Ian 29, 2011 9:22 am

Re: Redenumire sheet

Mesaj de tuxman » Mar Iul 24, 2018 11:58 am

Super ! Multumesc mult !

H2SO4
Mesaje: 135
Membru din: Mar Apr 19, 2016 12:50 pm

Re: Redenumire sheet

Mesaj de H2SO4 » Mar Iul 24, 2018 12:23 pm

Pai atunci, mai bine userul completeaza toate campurile din "Template", si cand apasa pe un buton, sa se creeze o foaie noua cu valorile din "Template", si cu numele format din B4&"-"&B5. Asa ar fi mult mai ok.
Testeaza codul asta, pus in modul normal (deci nu in foaie si nici in ThisWorkbook):

Cod: Selectaţi tot

Sub CopyTemplate()
    Application.ScreenUpdating = False
    Dim ws As Worksheet
    Dim numeFoaie As String
    numeFoaie = Range("B4") & "-" & Range("B5")
    If numeFoaie = "" Then
        MsgBox "Completati celulele din coloana B"
        Exit Sub
    Else
        On Error Resume Next
        Set ws = Sheets(numeFoaie)
        If Err.Number <> 0 Then
            Sheets("Template").Copy After:=Sheets("Sursa")
            ActiveSheet.Name = numeFoaie
            ActiveSheet.Shapes.Range(Array("Button 1")).Delete
        Else
            MsgBox "Foaia " & numeFoaie & " exista deja."
        End If
    End If
    Sheets("Template").Range("B2:B100").ClearContents
    Application.ScreenUpdating = True
End Sub
“Tell me and I forget, teach me and I may remember, involve me and I learn.”

Închis

Înapoi la “Visual Basic for Application (VBA) cu Excel - Intrebari tehnice”