< 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(16.9.2013 22:46)#015243 @Paloo: krokovanie a debuggovanie makra - to by sa malo tesať do kameňa, to je skvelé, že to tu zmieňuješ
@Poki: na svoju obhajobu uvediem, že som hľadal v makre chybu, na ktorej to martinovi hnevá, optimalizáciu kódu som neriešil..
citovat
Zvašich reakcí usuzuji, že s velkým množstvím dat v seznamu bude hledání duplicit pomalé. Je tedy možné Vás požádat o úpravu kódu?
citovat
eLCHa(17.9.2013 6:47)#015247 Mno - při snídani.
Nemůžu vyzkoušet, nemám data a definici těch oblastí bych asi udělal jinak, ale v zásadě
Při psaní
kódu VBA musíte
v Excelu přemýšlet,
jak byste to udělali v listu - tam byste použili (jak píše Poki) Ctrl+H (.Find) nebo POZVYHLEDAT(MATCH) nebo COUNTIF.
Tak proč to v kódu potom řešíte pomocí cyklů (není to tak dávno, co jsem to vytýkal i Palooo) a ne stejně.
Sub Export_do_databaze()
ActiveWorkbook.Save
Dim zdroj As String
zdroj = ActiveWorkbook.Name
Dim c_Nabidky As String
c_Nabidky = Worksheets("Nabídka").Cells(13, 18).Value ' Číslo nabídky
With Worksheets("Databáze nabídek")
If Application.WorksheetFunction.CountIf(Range(.Cells(2, 2), .Cells(Columns(1).Rows.Count, 2).End(xlUp)), c_Nabidky) > 0 Then
' If Application.WorksheetFunction.CountIf(Range(.Columns(2)), c_Nabidky) > 0 Then
MsgBox "V databázi už tato nabídka existuje, je nutné změnit číslo cenové nabídky?", vbOKOnly, "Nabídka už existuje"
Else
Dim radek As Integer
radek = Worksheets("Databáze nabídek").Cells(Columns(1).Rows.Count, 2).End(xlUp).Row + 1
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í
MsgBox "Export do databáze byl ukončen", vbOKOnly, "Info"
End If
End With 'Worksheets("Databáze nabídek")
End Sub
Tomu zbytku kódu bez dat nerozumím, takže si to musíte doladit sám.
citovat
Děkuji za opravu, úpravu, kódu:-)
citovat