< návrat zpět

MS Excel


Téma: Najdi nejbližší následující datum rss

Zaslal/a 2.6.2016 10:10

Dobrý den.

Potřeboval bych pomoci s níže uvedeným makrem ve sloupci G na nalezení nejbližšího data k dnešnímu dni a následně pod tento řádek vložit řádek prázdný

Prvně jsem to zkoušel přes toto, ale marně (pokud v tabulce není zítřejší datum tak se makro zastaví)

Cells.Find(Date + 1).Offset(0, 0).Select 'najdi dnešní datum +1 den
Selection.EntireRow.Insert , CopyOrigin:=xlFormatFromLeftOrAbove

Následovala varianta tato, ale rovněž marně

Set Rng = Range("G:G")
i = 1
For counter = 1 To Rng.Columns.Count
If Rng.Cells(i) = Cells.Find(Date + 1) Then
Rng.Cells(i).Select
Else
i = i + 3
End If
Next

Děkuji za ochotu

Zaslat odpověď >

Strana:  1 2   další »
#031664
Jeza.m
Něco jako ... (v případě nejbližšího nadcházejícího)
Public Sub VLOZITRD()

Dim tadress As String
Dim radek As Single
tadress = NAJDI(Date + 1, Range("G:G"))
If tadress <> "" Then
radek = Range(tadress).Row + 1
Else
radek = ActiveSheet.UsedRange.Rows.Count + 1
End If

ActiveSheet.Rows(radek).EntireRow.Insert
Cells(radek, 1) = "Nově vložený řádek"
End Sub
Public Function NAJDI(dt As Date, sloupec As Range)
On Error Resume Next
Dim tadress As String
tadress = sloupec.Find(dt).Address
If tadress <> "" Then NAJDI = tadress
End Function


M@citovat
#031670
avatar
Moc děkuji za snahu pomoci.

Pokud však níže uvedenou formulaci vložím do celkového makra vyskakuje chyba v podobě:

Compile error:

Ambiguous name detected: NAJDI

Pokud Vás mohu požádat, celé makro v příloze, mohl by jste to prosím do něj zakomponovat?

Dělám s makry cca měsíc a toto je nad moje síly.

Je to poslední věc, která mi do dokončení celého makra schází a je to opravdu dost velké makro :)

Děkuji
Příloha: 7z31670_denniplanypokus.7z (4kB, staženo 30x)
citovat
#031671
avatar
jo zapomněl bych, v makru jsem vyznačil, kam je potřeba zápis zakomponovat a to textem

'SEM NAJDI NáSLEDUJÍCÍ DATUM A VLOŽ ŘÁDEK

To jen pokud by jste se do toho pustil.

Děkujicitovat
#031672
elninoslov
Dosť veľké makro to teda je. A zbytočne. Žiaľ nemám na to čas, ani chuť (a ani by sa to bez reálneho súboru nedalo) Vám celých 1826 riadkov kódu prerobiť, tak iba upozorním na to, aby ste si v budúcnosti pozreli nejaké hotové projekty napr tu na fóre, a zistíte, že neustále .Select, .Activate, Selection, ActiveSheet nemusíte používať. Je to veľmi pomalé. Na list môžete pristupovať aj bez toho, aby ste si ho najskôr Selectli alebo Activovali...
Aby ste si to upravili, tak to Vás čaká naozaj hromada práce. Trošku si pozisťujte ako sa pristupuje na iný list. Každý si najskôr nahrá makro, a nevie si ho upraviť, ale časom sa do toho dostanete.citovat
#031673
avatar
Děkuji za odpověď i okomentování. Jistě mě v blízké budoucnosti čeká školení od profesionálů, protože to po mě v práci vyžadují.

Nyní bych však s tímto případem potřeboval pomoct.citovat
#031674
avatar
no ja osobne som zacinal asi takto, niesom ziaden programator aby som si ti to komplikoval kadejakymi zjednoduseniami (funkciami), skratka prehladam oblast bunku po bunke a je to (nie rychle ale trva to cely zlomok sekundy a pre mna je to ok), kod musi byt taky , aby som mu rozumel na prvy pohlad 1
Sub vloz_radek()
Dim x As Date
x = 0
For radek = 1 To ActiveSheet.UsedRange.Rows.Count + 1
x = x + 1
'Cells(radek, 7).Select - iba pre testovanie, aby si vedel kde sa nachadzas
If Cells(radek, 7) = Date + 1 Then
ActiveSheet.Rows(radek + 1).EntireRow.Insert
GoTo konec
End If
Next radek
konec:
End Sub
citovat
icon #031679
eLCHa
Ambiguous = máte tam stejně pojmenovanou funkci NAJDI minimálně 2x a to VBA neumožňuje
Stačíjednu přejmenovat

Pokud jsou data seřazená, tak bude stačit fce POZVYHLEDAT - worksheetfunction.match
Píšu z tabletu - omluvte prosím chybycitovat
#031680
avatar
TO - eLCHa

jak jsem psal, jsem v tomto absolutní nováček, ale vedení na mě tlačí.

Pokud pošlu zdrojový txt a samotné makro s informací v něm, kam je potřeba tuto formulaci umístit, mohl by jsi to prosím upravit?

Děkuji moc.citovat
#031685
elninoslov
Môžete použiť aj následujúci postup:
1. na koniec makra pridajte
Sub VlozRadek(SH As String)
Dim H(), R As Long, i As Long, MIN As Date, DNES As Date
With Worksheets(SH)
R = .Cells(.Rows.Count, 7).End(xlUp).Row
If R > 1 Then
H = .Cells(2, 7).Resize(R - 1).Value
DNES = Date: MIN = DateSerial(9999, 9, 9)
For i = 1 To UBound(H, 1)
If H(i, 1) > DNES And H(i, 1) < MIN Then MIN = H(i, 1): R = i
Next i
If Year(MIN) <> 9999 Then
.Rows(R + 1).Insert
End If
End If
End With
End Sub


2. Na miestach v kóde, kde chcete vyvolať prehľadanie stĺpca G v práve aktívnom liste, a nájsť najbližší dátum väčší ako DNES a pred neho vložiť riadok (máte to tam tuším na 4 miestach), tak tam dajte
Call VlozRadek(ActiveSheet.Name) 'Meno listu na ktorom sa má vyhľadávať dátum a vkladať riadok


Ale ešte raz vravím, že implementácia čohokoľvek do takéhoto makra plného Selectov, kde nič nieje isté ani len názov listu, či pozícia dátumov, a nevieme o štruktúre nič, napr. či je to tabuľka alebo Tabuľka (ListObject), od ktorého po ktorý riadok sú dátumy, či má tabuľka hlavičky ... je obtiažne. Toto čo Vám popisujem funguje aj na nezotriedených dátumoch, a počíta to s hlavičkou tabuľky na 1. riadku, a s dátumami začínajúcimi na 2. riadku, a s tým, že pod tabuľkou s dátumami v stĺpci G nie sú ďalšie/iné dáta, a že dátumy sú vždy v stĺpci G.citovat
#031686
avatar
LoL děkuji za pomoc. Již na tom pracuji.

Chtěl jsem se ještě zeptat, pokud list ve kterém budu chtít vložit řádek se jmenuje "20371+20372" tak bude zápis vypadat takto?

Call VlozRadek(ActiveSheet(20371 + 20372))

Děkuji moc za vstřícnost.

Jinak v příloze finální podoba tabulky, pokud by jste se chtěl podívat o co jde.
Příloha: 7z31686_plany-ohr.7z (110kB, staženo 30x)
citovat

Strana:  1 2   další »

Uživatelské menu

Nejste přihlášen(a)
avatar\n

Menu

Formulář Faktura

Formulář Faktura IV

Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.

Helios iNuvio

Používáte podnikový systém Helios iNuvio? Potřebujete pomoci se správou nebo vyvinout SQL proceduru? Více informací naleznete na stránce Helios iNuvio.

On-line nástroje