I can even give you the whole piece of code for this one window, but it's irrelevant for this solution, and there are many comments in strange (polish) language. It includes one time run option for importing data from excel to access. And ones again - it couldn't be done with access automate option because of different formats, improper values and so on, so there was much to do with those data:
Option Explicit
Dim computerName As String
Dim userName As String
Dim databaseLocation As String
Dim fileWithDatabase As String
Dim currentWorkbook As String
Dim dataSheet As String
Dim rs As New ADODB.Recordset
Dim connDB As New ADODB.Connection
Dim strSQL As String
Dim NumberOfClaims As Integer
Dim LiczbaWierszyWPliku As Integer 'import
Dim importName As String 'import
Dim xlSourceApp As New Excel.Application 'import
Dim sourceWb As Workbook 'import
Dim doClip As DataObject
Dim zakladka As String 'import
Dim daneDoImportu() As String 'import
Dim iImport As Integer 'import
Dim iKolumna As Integer 'import
Dim iEksport As Integer 'import
Dim importSQL As String 'import
Dim ubezpString() As String 'import
Dim poszkString() As String 'import
Dim adresSzkodyString() As String 'import
Dim i As Integer ' import
Dim adresZeStringa As String 'import
Dim azs As Integer 'import (do powyższego stringa)
Dim tempDate As String 'import
Dim nrSzkody As String 'import
Dim nrFufi As String 'import
Dim nrPolisy As String 'import
Dim ochrOd As Variant 'import
Dim ochrDo As Variant 'import
Dim agentNr As String 'import
Dim agentNazw As String 'import
Dim koordNr As String 'import
Dim koordNazw As String 'import
Dim ubezpNazw As String 'import
Dim ubezpAdres As String 'import
Dim ubezpTel As String 'import
Dim poszkNazw As String 'import
Dim poszkAdres As String 'import
Dim poszkTel As String 'import
Dim zglaszajacySzkode As String 'import
Dim szkodaPowst As Variant 'import
Dim szkodaUjaw As Variant 'import
Dim szkodaZglo As Variant 'import
Dim szkodaAdres As String 'import
Dim przedmUbezp As String 'import
Dim klauzula As String 'import
Dim ryzyko As String 'import
Dim klasaRach As String 'import
Dim grupaUbezp As String 'import
Dim opisSzkody As String 'import
Dim przyczSzkody As String 'import
Dim rezerwa As Double 'import
Dim rezerwaTechn As Double 'import
Dim likwProw As String 'import
Dim dataWyplOdm As Variant 'import
Dim status As String 'import
Dim kwotaWypl As Double 'import
Dim rezerwaAkt As Double 'import
Dim rozwiazaneRezerwy As Double 'import
Dim kosztyTechnDataWypl As Variant 'import
Dim kosztyTechnKwota As Double 'import
Dim regres As String 'import
Dim uwagi As String 'import
Dim rejestrujacy As String 'import
Dim dataRejestracji As Variant 'import
Dim IPkomputera As String 'import
Dim genForms As Integer
Dim genFrame As Object
Private Sub btnNewClaim_Click()
FormRegisterClaim.Show
End Sub
Private Sub CommandButton1_Click()
'liczenie ilości szkód w istniejącym rejestrze szkód
importName = Application.GetOpenFilename("Excel Workbooks (*.xls*), *.xls*")
zakladka = "REJESTR SZKÓD"
Set xlSourceApp = GetObject(, "Excel.Application")
Set sourceWb = xlSourceApp.Workbooks.Open(importName)
LiczbaWierszyWPliku = sourceWb.Worksheets(zakladka).Range("C1", Range("C1").End(xlDown)).Count 'liczenie liczby szkód (odliczony nagłówek)
'sczytywanie danych z excela do tablicy, a potem eksport do accessa
ReDim daneDoImportu(LiczbaWierszyWPliku - 1, 33)
iImport = 0
iKolumna = 0
'przeniesienie danych do tablicy
For iImport = 2 To LiczbaWierszyWPliku
For iKolumna = 1 To 33
daneDoImportu(iImport - 1, iKolumna) = sourceWb.Worksheets(zakladka).Cells(iImport, iKolumna)
Next iKolumna
Next iImport
sourceWb.Close SaveChanges:=False
Set xlSourceApp = Nothing
iEksport = 0
iKolumna = 0
'przeniesienie danych do accessa
[cut]
MsgBox ("export done")
End Sub
Private Sub UserForm_Initialize() 'inicjalizacja formularza - ustawienie i sprawdzenie danych
GetEnvData
If userName = "john" Or userName = "mark" Or userName = "ana" Then 'funkcja dostępna tylko dla "adminów"
MultiPage.Page2.Visible = True
GenerateClaimList
Else
MultiPage.Page2.Visible = False
End If
textbox_database.Text = databaseLocation ' pole z linkiem do pliku bazodanowego
CheckDatabaseConnection (databaseLocation)
End Sub
Private Sub GenerateClaimList()
strSQL = "SELECT COUNT(*) as NoClaims FROM SZKODY"
ConnectDB (databaseLocation)
Set rs = connDB.Execute(strSQL)
NumberOfClaims = rs!NoClaims
DisconnectDB
'MsgBox (NumberOfClaims)
'generate new controls - frames, labels, buttons and so on.
For genForms = 1 To 2000 'NumberOfClaims
Set genFrame = FrameListaSzkod.Controls.Add("Forms.CommandButton.1")
With genFrame
.Name = "claim" & genForms
.Caption = "nr " & genForms
.Top = (genForms * 40) - 40
.Left = 0
.Height = 40
.Width = 988
End With
Next genForms
FrameListaSzkod.ScrollHeight = genForms * 40
End Sub
Private Sub UserForm_Terminate()
DisconnectDB
End Sub
Sub GetEnvData() 'pobranie (ustawienie) zmiennych środowiskowych wymaganych do pracy programu
computerName = Environ$("computername")
userName = Environ$("username")
currentWorkbook = ThisWorkbook.Path & "\" & ThisWorkbook.Name
dataSheet = "envData"
databaseLocation = Sheets(dataSheet).Cells(2, 1)
End Sub
Private Sub ConnectDB(dbLocation)
connDB.Open ConnectionString:="Provider = Microsoft.ACE.OLEDB.12.0; Persist Security Info = False; data source=" & dbLocation & ";"
Set rs = New ADODB.Recordset
'rs.Open Source:="szkody", ActiveConnection:=connDB, CursorType:=adOpenStatic, LockType:=adLockOptimistic
End Sub
Private Sub DisconnectDB()
'close the objects (jeśli istnieją)
If rs.State = 1 Then
rs.Close
connDB.Close
End If
'destroy the variables
Set rs = Nothing
Set connDB = Nothing
End Sub
Private Sub btn_acceptDatabase_Click() 'potwierdzenie (zapisanie) lokalizacji pliku bazodanowego
Worksheets(dataSheet).Range("A2").Value = textbox_database.Text
ThisWorkbook.Save 'SaveChanges:=True
CheckDatabaseConnection (databaseLocation)
End Sub
Private Sub btnSelectDatabase_Click() 'wybranie pliku bazodanowego z eksploratora windows
fileWithDatabase = Application.GetOpenFilename("Excel Workbooks (*.accdb*), *.accdb*")
textbox_database.Text = fileWithDatabase
If textbox_database.Text <> "False" Then
btn_acceptDatabase.Visible = True
Else
btn_acceptDatabase.Visible = False
End If
databaseLocation = fileWithDatabase
End Sub
Private Sub CheckDatabaseConnection(dbLoc) ' sprawdzenie, czy plik bazodanowy ACCESS istnieje.
If Dir(dbLoc) <> "" Then
lblDbStatus.Caption = "OK"
lblDbStatus.BackColor = RGB(0, 200, 0)
lblDbStatus.ForeColor = RGB(0, 0, 0)
frameClaims.Visible = True
ConnectDB (dbLoc)
Else
lblDbStatus.Caption = "BŁĄD!"
lblDbStatus.BackColor = RGB(255, 0, 0)
lblDbStatus.ForeColor = RGB(255, 255, 255)
frameClaims.Visible = False
End If
End Sub
Bookmarks