Macro deschidere foaie

Închis
maryurs24
Mesaje: 70
Membru din: Joi Feb 21, 2013 8:34 am

Macro deschidere foaie

Mesaj de maryurs24 » Joi Dec 14, 2017 3:40 pm

Buna seara

Am un workbook cu mai multe foi
In prima foaie(foaia "INTRODUCERE") folosesc doar 2 celule: E7 si E8
Vreau sa fac un macro care sa-mi deschida foaia al carui nume este= cu valoarea din celula E7 din prima foaie si sa-mi copieze valoarea din celula C8 in primul celula goala din coloana B
Folosesc codul asta

Cod: Selectaţi tot

Sub Stoc()

Dim wkSht As Worksheet
For Each wkSht In Sheets
If ActiveSheet.Range("E7").Value = wkSht.Name Then
 ActiveSheet.Range("E8").Copy Destination:=wkSht.Range("B" & Rows.Count).End(xlUp).Offset(1, 0)

    Sheets("INTRODUCERE").Select
    Range("E7:E8").Select
    Selection.ClearContents
    Range("E7").Select

 End If
Next
End Sub
Am urmatoarele probleme
1-daca nu exista foaie cu numele care trebuie, macro nu face nimic si nu stiu ca nu gaseste. am incercat sa bag un elseif inainte de endif, sa apara un MsgBox dar nu stiu cum sa scriu in cod " elseif ActiveSheet.range("E7").value <> wkSht.Name " si imi apare mesajul indiferent daca exista foaie sau nu
2-daca in foaia destinatie, pe coloana B, ultimul rand completat este 8, va scrie in 9 chiar daca randuri intermediare sunt goale(daca B5 este goala ) cum pot rezolva aceste probleme?

Multumesc
Ultima oară modificat Joi Dec 14, 2017 3:58 pm de către IPP, modificat 1 dată în total.
Motiv: Inlocuire majuscule

IPP
Moderator
Moderator
Mesaje: 4196
Membru din: Mie Iul 29, 2009 7:26 am
Localitate: Cluj-Napoca

Re: Macro deschidere foaie

Mesaj de IPP » Joi Dec 14, 2017 4:29 pm

Buna seara

Scrierea unui text folosind doar majuscule este interpretabila. Am corectat textul dar pe viitor va rugam sa evitati acest lucru.

1. In macro apar mai des situatii de "Case Sensitive" asa ca primul lucru pe care va trebui sa il verificati este modalitatea in care e scrisa denumirea foii in E7 vs. numele foii. Asadar sheet3 <> Sheet3. Se poate evita acest lucru punand in cod o convertire a numelor implicate la majuscule/minuscule. ex.

Cod: Selectaţi tot

If UCase(sh.Name) = UCase(Worksheets("INTRODUCERE").Range("E7").Value)
Probleme mai pot sa apara daca indiferent in ce parte s-a mai strecurat cate un caracter netiparibil (ex. un spatiu suplimentar) in denumire.

2. Daca prin "ultimul rand completat" de fapt se intelege prima celula goala din zona B1:Bn atunci va trebui intercalat un cod suplimentar care sa testeze fiecare celula in parte inainte. Fara un fisier exemplu eu evit sa fac propuneri pentru ca sunt "sanse" sa mai fie cate ceva care conteaza si s-a omis in enuntul problemei.

Altfel, ca structura a codului, as merge pe varianta:

Cod: Selectaţi tot

Sub WriteInfo()

Dim sh As Worksheet
Dim vbGasit As Boolean
 vbGasit = False

For Each sh In ThisWorkbook.Worksheets
 If sh.Name = Worksheets("INTRODUCERE").Range("E7").Value Then
  vbGasit = True
  
  'cod gasire celula goala si scriere info
  '.....de facut
  '....
  
  Exit For
 End If

Next sh

If vbGasit = False Then
 MsgBox "Foaia nu a fost gasita"
  Else: MsgBox "Foaia a fost gasita"
End If

'cod golire info veche
'.... de facut ...


End Sub

maryurs24
Mesaje: 70
Membru din: Joi Feb 21, 2013 8:34 am

Re: Macro deschidere foaie

Mesaj de maryurs24 » Joi Dec 14, 2017 6:52 pm

Scuze pt majuscule-folosesc un laptop in franceza si fara numpad si nu sunt atent cand tastez cifre sa tin Shift. E mai usor pt mine sa las capslock si scriu la gramada

Nills
Mesaje: 211
Membru din: Sâm Ian 23, 2016 11:24 am

Re: Macro deschidere foaie

Mesaj de Nills » Joi Dec 14, 2017 7:46 pm

Sal,
1-daca nu exista foaie cu numele care trebuie, macro nu face nimic si nu stiu ca nu gaseste.
Ca sa eviti alegerea unui nume inexistent, foloseste DV (Data Validation) cu numele foilor, in E7

Pentru a afla ultimul rand cu date in coloana B

Cod: Selectaţi tot

LastRow = Cells(Rows.Count, B).End(xlUp).Row 
iar pentru prima celula goala

Cod: Selectaţi tot

LastRow = Cells(Rows.Count, B).End(xlUp).Row + 1
I don't care what you think of me! Unless you think I'm awesome – in which case, you're right! Carry on :D

Închis

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