< návrat zpět
MS Excel
Téma: Chyba v kódu
Zaslal/a Martin12345678 14.9.2013 23:47
Prosím o radu. V kódu je podmínka, která má najít již uložený záznam na listu a pokud jej najde, tak se má proces kopírování ukončit, bohužel prostě nevím jak na to, pravděpodobně bude v kódu něco chybět, nebo jsem něco dal někam blbě. Díky
Sub Export_do_databaze()
Application.ScreenUpdating = False
Dim c_Nabidky As String
zdroj = ActiveWorkbook.Name
Dim doDB As Boolean
' EXPORT NABÍDKY
doDB = True
ActiveWorkbook.Save
c_Nabidky = Worksheets("Nabídka").Cells(13, 18).Value ' Číslo nabídky
'existuje už v databazi?
For i = 2 To Worksheets("Databáze nabídek").Cells(65000, 2).End(xlUp).Row + 1
If c_Nabidky = Worksheets("Databáze nabídek").Cells(i, 2) Then
f_zprava = MsgBox("V databázi už tato nabídka existuje, je nutné změnit číslo cenové nabídky?", vbNo, "Nabídka už existuje")
Select Case f_zprava
Case vbNo
doDB = False
'Exit Sub
End Select
End If
Next i
'ulozeni do databaze
radek = Worksheets("Databáze nabídek").Cells(65000, 2).End(xlUp).Row + 1
If doDB = True Then
Worksheets("Databáze nabídek").Cells(radek, 2) = Worksheets("Nabídka").Range("R13") 'Číslo nabídky
Worksheets("Databáze nabídek").Cells(radek, 3) = Worksheets("Nabídka").Range("K16") 'Datum vystavení
End If
f_zprava = MsgBox("Export do databáze byl ukončen", vbYes, "Info")
End Sub
Uzamčeno - nelze přidávat nové příspěvky.
AL(15.9.2013 0:45)#015230 Ten Exit Sub je zakomentovaný z akého dôvodu?
citovat
Mnoho pokusů o to aby to fungovalo, ale i když zakomentovaný není, prostě to nefunguje. Funguje to pouze pokud je v MsgBoxu vbYesNo, ale potřebuji tam mít pouze jedno tlačítko OK. Tak nevím, kde dělám chybu:-(
citovat
Zde je ukázka. Export je z listu Nabídka
Příloha: 15232_databaze.rar (80kB, staženo 35x) citovat
AL(15.9.2013 1:24)#015233 Mno, argumentom u msgboxu vbNo byť nemôže, čiže do úvahy pripadá iba vbOKOnly alebo vbYes, pokiaľ teda trváš na jednom tlačítku. Nakoľko ale máš nad tým podmienku if a ten msgbox vyskočí na základe splnenia podmienky tak asi select case je zbytočný a makro by sa malo ukončiť hneď po tom, čo odklikneš msgbox, čiže asi takto (zakomentoval som tie pôvodné riadky, ktoré tam pmn byť nemusia, ale netvrdím, že rozumiem presne tomu, o čo sa snažíš):
For i = 2 To Worksheets("Databáze nabídek").Cells(65000, 2).End(xlUp).Row + 1
If c_Nabidky = Worksheets("Databáze nabídek").Cells(i, 2) Then
MsgBox("V databázi už tato nabídka existuje, je nutné zmìnit èíslo cenové nabídky", vbYes, "Nabídka už existuje")
' Select Case f_zprava
'
' 'Case vbNo
Exit Sub
' Case vbYes
' doDB = False
' End Select
' Else
End If
Next icitovat
Díky moc, vyzkoušeno a vše ok
citovat
AL(15.9.2013 1:38)#015235 Čo ten combobox v tom druhom vlákne, to už tiež funguje?
citovat
No k tomu jsem se ještě nedostal, po pravdě nevím kam to umístit. Do listu ve VBA?
citovat
AL(15.9.2013 1:56)#015237 no, určite do nejakého kódu vo VBA, napadá ma napr. do kódu pre formulár, asi v ňom máš nejaké potvrdzovacie tlačítko alebo niečo podobné, tak doňho, nejaký ButtonClick event alebo čo...
citovat
Palooo(16.9.2013 9:26)#015239 popravde na debugovanie kodu je najlepsie si ho odkrokovat a postupne sledovat jeho procesy ci su spravne:
navod1:
- V kode vlavo klikneme tam kde chceme zastavit proces a vytvori sa tam taka hneda gulicka.
- ked potom stlacime makro tak pri tej hnedej gulicke zastane proces a mozme postupne s degurerom krokovat az kym nenajdeme chybu
navod2:
- do kodu zapiseme: debug.print PREMENA
- s tymto sa do Immediate vypise sledovana premena
navod2 sa povecsinou pouziva ked sa odkazuje na SQL databazu a potrebuje vediet ci ste dobre zapisali SELECT, DELETE, INSERT atd.
citovat
Poki(16.9.2013 14:53)#015240 Nebudu se do toho moc michat, jen na zamysleni:
Proc prochazet vsechny polozky v oblasti a hledat duplicitu, pri velkem poctu bunek by to mohlo byt velice pomale.
Radeji bych pouzil:
1) Metodu
.Find
2) funkci
Match
...na zaklade vyskytu chyby pri vyhledani pak lze rozhodnout o tom, ze v oblasti zadna stejna hodnota neni...a bude to mnohem rychlejsi
citovat