"inteligentní" vložení čísla na nový řádek   otázka

VB.NET

Dobrý den,

mám takový dotaz a ač jsem to zkoušel všelijak vyřešit jsem ve VB opravdu začátečník.

K věci:

Problém je v tom, že mám vytvořený list (v Excelu) kde po kliknutí na butonku "další řádek" by to mělo vložit pod poslední řádek nový s pořadovým číslem o jedno větším než byl předchozí. Až sem jsem vše zvládl. Problém nastává v případě, kdy je potřeba vložit místo čísla řádku třeba číslo s písmene. Excel poté bere tento formát samozřejmě jako text a hází to logicky Error.

Koukněte mi na to prosím a poraďte jak by jste tuto část scriptíku řešili.

Náhled části kódu:

' inteligentně doplní číslo pol. a označí první buňku nového řádku 
Do 
x = x + 1 
Loop Until Cells(PrvniVolnyRadekDvere - x, 1) <> 0 
Cells(PrvniVolnyRadekDvere, 1) = Cells(PrvniVolnyRadekDvere - x, 1) + 1 
Cells(PrvniVolnyRadekDvere, 3).Select 

Za všechny rady předem velice děkuji. Pokorný

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Přiznám se, že dotazu i kódu moc nerozumím. Uvedu příklad pro přidání nového čísla položky podle vlastní představy, třeba pomůže.

Předpokladem je, že na listu "List1" je tlačítko "DalsiRadek" s níže uvedeným kódem. Ve sloupci "A" je na prvním řádku nadpis (např. "Položka") a pod ním následují čísla položek. Nevolím skok na poslední buňku (ActiveCell.SpecialCells(xlLastCell)), ale procházení řádků, protože někde pod seznamem jsou třeba další data.

Private Sub DalsiRadek_Click()
  Dim PosledniPolozka As Integer
  Dim Radek As Integer
  Dim rd As Variant
  For Each rd In Worksheets("List1").Rows
    Radek = rd.Row
    If rd.Row > 1 And Range("A" & Radek).Value < 1 Then
      If Radek = 2 Then
        PosledniPolozka = 0
      Else
        PosledniPolozka = Range("A" & Radek - 1).Value
      End If
      Range("A" & Radek).Activate
      Exit For
    End If
  Next rd
  ActiveCell.Formula = PosledniPolozka + 1
End Sub

Samozřejmě, že čísla položek musí být čísla. Pokud by to měl být text, musel by se přidat kód, který by problém řešil. Podobně by bylo třeba kód upravit, kdyby seznam nezačínal od horního okraje listu.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Tak to nakonec vyřešil ještě v pátek můj nadřízený celkem elegantně. Pro náhled:

Do

x = x + 1

Loop Until Cells(PrvniVolnyRadekDvere - x, 1) <> 0

kontrola = IsNumeric(Cells(PrvniVolnyRadekDvere - x, 1))

If kontrola = True Then

Cells(PrvniVolnyRadekDvere, 1) = Cells(PrvniVolnyRadekDvere - x, 1) + 1

Cells(PrvniVolnyRadekDvere, 3).Select

Else: Cells(PrvniVolnyRadekDvere, 1).Select

End If

Za rady i tak moc děkuji.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

1.Premenná kontrola je použitá len dvakrát - raz do nej uložíte hodnotu, a raz jej hodnotu prečítate. Čo znamená, že je zbytočná. Za druhé, aj ten riadok If kontrola = True Then mi pripadá zbytočne ukecaný - nestačilo by If kontrola Then ? Alebo ešte lepšie takto(miesto ... doplňte zvyšné časti kódu):

...
If IsNumeric(Cells(PrvniVolnyRadekDvere - x, 1)) Then
...
End If
...

2. Pre lepšiu čitateľnosť vkladajte bloky kódu do príspevkov na fórach vbnet.cz pomocou tlačítka VBCode.

3. Ten kód mi pripadá ako z VBA, na to je tu iné fórum. Alebo je to fakt niektorá verzia VB.NET ?

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback