Upload z Excelu do Oracle SQL tabulky

Příklad insertu sedmi sloupců (A-G) do tabulky na SQL.

Pro insert musí být v nastavení VBA povoleno „Microsoft ActiveX Data Objects 6.x Library“

Do sloupce „K“ skript vloží příkaz na INSERT v textové podobě, který se pak v cyklu provádí po jednotlivém řádku.

Je ošetřeno opakované spuštění – smaže předchozí data, pokud jsou vloženy ten samý den.
Jsou vynechány prázdné řádky.
Nakonec se vyčistí sloupec „K“.

----------------
Skript
----------------
Sub upload()

'Musi byt povoleno "Microsoft ActiveX Data Objects 6.0+ Library"

Dim objADO As ADODB.Connection
Dim strSQL
Dim dotaz As String
Dim ConString As String

' Priprava dat
Sheets("Zdroj").Select

Range("K2").FormulaLocal = "=KDYŽ(A2="""";""""; ""INSERT INTO DATA (JEDNA,DVA,TRI,CTYRI,PET,SEST,DATUM_VLOZENI) VALUES ('"" & A2 & ""','""& B2 & ""','""& C2 & ""','""& D2 & ""','""& E2 & ""','""& F2 & ""','"" & KDYŽ(G2="""";HODNOTA.NA.TEXT(DNES();""dd.mm.rrrr"");G2) &""')"")"
Range("K2").Select
Selection.AutoFill Destination:=Range("K2:" & "K" & Range("A" & Rows.Count).End(xlUp).Row)

' Application.Wait Now + TimeValue("00:00:01")

'Smazani predchozich dat - update pri znovuspusteni reportu
Range("K1").FormulaLocal = "=""delete FROM DATA where DATUM_VLOZENI like '""& HODNOTA.NA.TEXT(DNES();""dd.mm.rr"") & ""'"""

' Upload na SQL
Set objADO = CreateObject("ADODB.Connection")
' Rucni dotaz na DB
'objADO.Properties("Prompt") = 2

objADO.Open "Driver={Microsoft ODBC for Oracle}; CONNECTSTRING=SERVER; UID=LOGIN; PWD=PASSWORD;"

'SQL spusteni dotazu generovaneho v excelu jako text

pocet = Range("K" & Rows.Count).End(xlUp).Row

For provedeni = 1 To pocet ' prvni radek
dotaz = Sheets("Zdroj").Range("K" & provedeni)
If dotaz <> "" Then
objADO.Execute dotaz

End If
Next provedeni
objADO.Close
Set objADO = Nothing

'Vymaz prikazu
Range("K:K").Clear

End Sub

Rubriky: Excel notes, VBA | Komentáře nejsou povolené u textu s názvem Upload z Excelu do Oracle SQL tabulky

Podmínka při počtu hledané hodnoty

If WorksheetFunction.CountIf(Range("F:F"), "VYMAZAT") > 0 Then

'co udělat

endif

Rubriky: Excel notes, VBA | Komentáře nejsou povolené u textu s názvem Podmínka při počtu hledané hodnoty

Počet hledané hodnoty ve sloupci

Dim x As Long
x = Range("L" & Rows.Count).End(xlUp).Row
If x < 2 Then x = 1 'Ošetření prázdného sloupce kontrola = Application.WorksheetFunction.CountIf(Range("L1:L" & x), "Not_in_Agenda") endif

Rubriky: Excel notes, VBA | Komentáře nejsou povolené u textu s názvem Počet hledané hodnoty ve sloupci

Výmaz netisknutelných znaků – funkce

Function CleanTrim(ByVal S As String, Optional ConvertNonBreakingSpace As Boolean = True) As String
Dim X As Long, CodesToClean As Variant
CodesToClean = Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, _
21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 127, 129, 141, 143, 144, 157)
If ConvertNonBreakingSpace Then S = Replace(S, Chr(160), " ")
For X = LBound(CodesToClean) To UBound(CodesToClean)
If InStr(S, Chr(CodesToClean(X))) Then S = Replace(S, Chr(CodesToClean(X)), "")
Next
CleanTrim = WorksheetFunction.Trim(S)
End Function

————————-
nebo lze i klasickým způsobem konkrétní znak pomocí vzorce

=PROČISTIT(DOSADIT(A2;ZNAK(9);ZNAK(32))))

Rubriky: Excel notes, VBA | Komentáře nejsou povolené u textu s názvem Výmaz netisknutelných znaků – funkce

Ukončení programu v systému – task kill

Sub Test()
If TaskKill("notepad.exe") = 0 Then MsgBox "Terminated" Else MsgBox "Failed"
End Sub

Function TaskKill(sTaskName)
TaskKill = CreateObject("WScript.Shell").Run("taskkill /f /im " & sTaskName, 0, True)
End Function

Rubriky: Excel notes, VBA | Komentáře nejsou povolené u textu s názvem Ukončení programu v systému – task kill

Hledání duplicity ve sloupci

=COUNTIF($A$2:$A2;A2)>1

*Roztáhnout vzorec na celý sloupec

Rubriky: Excel notes | Komentáře nejsou povolené u textu s názvem Hledání duplicity ve sloupci

Přizpůsobení velikosti buňky dle obsahu – autofit

Přizpůsobení ve sloupci

ThisWorkbook.Worksheets("List1").Columns("O:O").EntireColumn.AutoFit

Přizpůsobení na listu

ThisWorkbook.Worksheets("List1").Cells.EntireColumn.AutoFit

Přizpůsobení v celém sešitu

For Each sht In ThisWorkbook.Worksheets
sht.Cells.EntireColumn.AutoFit
Next sht

Rubriky: Excel notes, VBA | Komentáře nejsou povolené u textu s názvem Přizpůsobení velikosti buňky dle obsahu – autofit

Počet použitých sloupců

Dim currentColumn As Integer
currentColumn = ActiveSheet.UsedRange.Columns.Count

Rubriky: Excel notes, VBA | Komentáře nejsou povolené u textu s názvem Počet použitých sloupců

Přidání sloupce

Columns("N:N").Select
Selection.Insert Shift:=xlToRight

Rubriky: Excel notes, VBA | Komentáře nejsou povolené u textu s názvem Přidání sloupce

Přidání listu na konec

Sheets.Add(After:=Sheets(Sheets.Count)).Name = "Poslední"

Rubriky: Excel notes, VBA | Komentáře nejsou povolené u textu s názvem Přidání listu na konec