webForumDet fria alternativet

Access: Hur gör jag för att exekvera min funktion i ett macro?

Databaser & SQL

1 svar · 434 visningar · startad av vurna

Medlem sedan sep. 20102 inlägg
Frågan#1

Hej!

Detta är min första post på detta forum, roligt att äntligen hitta ett svensktalade sådant!

Till mitt problem, jag har en vb funktion som jag hittat på nätet som gör precis det jag behöver ifrån det.
Saken är den att jag kan manuellt exekvera det via VB Editorn i MS Access men jag vet inte alls hur jag gör för att få den att köras i mitt macro eller via en knapp på ett formulär.

Min vb funktion ser ut på följande sätt:

Option Compare Database

Function changefieldnames(oldname As String, newname As String)
'----- oldname and newname are passed to this function from
'----- wherever you are in your process. I would do it via a
'----- form, but if the field names you change are the same every
'----- time the process is run, why not store them in a table. The
'----- code you will need to pass the field names to be corrected
'----- from the table is given in Sub readinfieldnames() below.

Dim db As Database
Dim tdf As TableDef
Dim n As Object

Set db = CurrentDb
Set tdf = db.TableDefs("trans1_SMT")
For Each n In tdf.Fields
    If n.Name = oldname Then n.Name = newname
Next n

Set tdf = Nothing
Set db = Nothing

End Function

Sub readinfieldnames()
Dim rst_data As Recordset
'------ Assumes you have a table with 2 columns. Column 1 contains
'------- downloaded field names, column 2 has the names you want
Dim oldfieldname As String, newfieldname As String

Set rst_data = CurrentDb.OpenRecordset("conv_FieldNames")

With rst_data
    .MoveFirst
    Do Until .EOF
        oldfieldname = .Fields(0).Value
        newfieldname = .Fields(1).Value
        changefieldnames oldfieldname, newfieldname
        .MoveNext
    Loop

 End With
 Set rst_data = Nothing

End Sub

Tar tacksamt emot ideer/förslag!

Medlem sedan sep. 20102 inlägg
#2

Hej igen,

Jag lyckades tillslut efter mycket om och men få detta löst. Hjälpen kom tillslut via ett annat forum men jag postar lösningen på alla ställen jag frågat utifall någon har samma problem.

Lösningen visdade sig förvånansvärt enkel, man skulle helt enkelt köra funktionen med hjälp av den andre delen i funktionen.

Private Sub Command0_Click()
Call readinfieldnames
End Sub
259 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)