Stránka 1 z 1

Excel-VBA-Název listu omezit vložení na 31 znaků

Napsal: 14 čer 2012 21:48
od Jan Pašek
Mám s vaší pomocí Následující makro:

Kód: Vybrat vše

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
 
 'Následující sekvence mění název listu
 If Range("B3") = "" And Range("B4") = "" And ActiveSheet.Name <> "Prázdný protokol (" & Sheets.Count - 8 & ")" Then
     ActiveSheet.Name = "Prázdný protokol (" & Sheets.Count - 8 & ")"
 ElseIf Range("B3") <> "" And Range("B4") = "" And ActiveSheet.Name <> Range("B3") Then
     ActiveSheet.Name = Range("B3").Value
 ElseIf Range("B3") = "" And Range("B4") <> "" And ActiveSheet.Name <> Range("B4") Then
     ActiveSheet.Name = Range("B4").Value
 ElseIf Range("B3") <> "" And Range("B4") <> "" And ActiveSheet.Name = Range("B3") & "_" & Range("B4") Then
     ActiveSheet.Name = Range("B3") & "_" & Range("B4").Value
 End If
 
 'Následující sekvence čísluje protokol (Protokol č.X)
 If Range("H1") = "" And Range("C1") <> "" Then
    Range("C1").ClearContents
   ElseIf Range("C1") = "" And Range("H1") <> "" Then
    Range("C1").Value = "č. " & Sheets.Count - 6
 End If
 
 'Následující sekvence Maže proud a výkon pokud bylo zadáno více jak 240V a jmenované buňky nejsou prázdné
 If Range("R2") And Range("L5,M5") = "" And Range("K5") > 240 Then
    Range("R2") = "Nepravda"
 ElseIf Range("R2") And Range("K5,L5,M5") <> "" And Range("K5") > 240 Then
    Range("L5,M5").ClearContents
    Range("R2") = "Nepravda"
 ElseIf Range("R2") = "Nepravda" And Range("K5") < 241 And Range("K5") <> "" Then
    Range("R2") = "Pravda"
 ElseIf Range("R2") = "Nepravda" And Range("K5,L5,M5") = "" Then
    Range("R2") = "Pravda"
 End If
 
 'Následující sekvence Provádí výpočet proudu nebo příkonu pokud je napětí menší než 241V
 If Range("M5") <> "" And Range("K5") < 241 And Range("K5") <> "" And Range("L5") = "" Then
    Range("L5").Value = Range("M5") / Range("K5")
 ElseIf Range("L5") <> "" And Range("K5") < 241 And Range("K5") <> "" And Range("M5") = "" Then
    Range("M5").Value = Range("K5") * Range("L5")
 End If
End Sub


Potřeboval bych omezit počet znaků vkládaných do názvu listu na 31 aby název listu "nepřetékal" a makro nemohlo vyhlásit chybu. Bohužel VBA není DOS takže v tom plavu a nevím jak přesně napsat.
Zřejmě bych ke každé možnosti přidal podmínku která zjistí délku textu pokud je méně znaků než 32 Zapsat v nezměněné podobě. Pokud délka textu přesáhne 31 znaků zapsat od prvního znaku názvu listu povolených 31 znaků.

Předem dík za pomoc

Re: Excel-VBA-Název listu omezit vložení na 31 znaků

Napsal: 14 čer 2012 22:11
od Azuzula
Mělo by stačit jen

Kód: Vybrat vše

ActiveSheet.Name = Mid(Range("B3") & "_" & Range("B4"), 1, 31)

Kdyby to náhodou nešlo, tak s kontrolou (to první mi funguje i s názvem kratším, takže následující snad nebude nutné)

Kód: Vybrat vše

If Len(Range("B3") + Range("B4")+1) =>31 then 'to +1 je za podtržítko v názvu
ActiveSheet.Name = Mid(Range("B3") & "_" & Range("B4"), 1, 31)
end if

přesnou funkci a syntaxi "Mid" a "Len" najdeš v nápovědě excelu, takže snad nemá smysl se o tom rozepisovat.

Re: Excel-VBA-Název listu omezit vložení na 31 znaků  Vyřešeno

Napsal: 04 črc 2012 10:11
od Jan Pašek
Zde děkuji za pomoc napsáno upraveno a Vyřešeno.