Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[VBA] excel add-in vautomatisch inladen

Pagina: 1
Acties:

  • Vulchare
  • Registratie: December 2013
  • Laatst online: 21:29
Er zijn x aantal bestanden waarvan de inhoud wordt gebruikt voor aantekeningen. Hiervoor heb ik een add-in gemaakt. Deze add-in zorgt ervoor dat de gemaakte aantekeningen netjes verschijnen in een verslag(op een apart tabblad).

Zodra de plugin is ingeladen update hij automatisch door middel van de volgende code en callt hij het userform:

Visual Basic .NET:
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
Private Sub openForm()

lastSaved = FileDateTime("DIRECTORY USERFORM\userform.xlam")
lastVersion = "Z" & Replace(Format(lastSaved, "dd-mm-yyyy"), "-", "")

On Error Resume Next
Application.Run "userform.xlam!" & lastVersion
If Err.Number <> 0 Then
    MsgBox "Het formulier is nog niet actief of er is een nieuwe versie." & vbNewLine & "Klik ja voor de volgende melding."
        Err.Clear
    Call updateForm
    Err.Clear
End If
Application.Run "userform.xlam!LoadUserForm"

End Sub

Private Sub updateForm()
Dim formLoc As String
formLoc = Environ("HOMEDRIVE") & Environ("HOMEPATH") & "\AppData\Roaming\Microsoft\Invoegtoepassingen\userform.xlam"
On Error Resume Next
    AddIns("Userform").Installed = False 'deactiveren addin
    Kill formLoc 'verwijderen uit local
    AddIns.Add Filename:="DIRECTORY USERFORM\userform.xlam" 'opnieuw inladen
    AddIns("Userform").Installed = True 'activeren
End
End Sub


Het probleem is echter dat degene die hier mee moeten werken absoluut niet weten hoe je zo'n add-in moet toevoegen. Hoe kan ik dit voorkomen ipv voor iedereen de addin te laden?

Op het moment heb ik in elk bestand bovenstaande code geplakt icm een button om hem aan te roepen. Ik heb begrepen dat je de ribbon met XML automatisch toe kan laten voegen op basis van de add-in. (Dit is overigens nog in de onderzoekfase, tips zijn welkom).

Kortom, een kip-ei verhaal. Is dit onvermijdelijk of zie ik weer dingen die er niet zijn?

  • Tribits
  • Registratie: Augustus 2011
  • Laatst online: 02:56

Tribits

Onkruid vergaat niet

Ik weet niet of ik het helemaal goed begrijp maar met de volgende VBScript code kun je een add-in in Excel installeren als het goed is:

VBScript:
1
2
3
4
5
6
7
8
9
Sub Install_Addin()
   Set Application=CreateObject("Excel.Application")
   Application.Visible=True
   if Application.Workbooks.Count=0  Then Application.Workbooks.Add
   Application.Addins.Add "C:\Data\Add_In.xlam" 
   Application.Addins("Add_in").Installed = True
End Sub

Install_Addin

Master of questionable victories and sheer glorious defeats


  • Bolukan
  • Registratie: Oktober 2002
  • Laatst online: 18-11 21:18
In een XLStart directory plaatsen

  • Tribits
  • Registratie: Augustus 2011
  • Laatst online: 02:56

Tribits

Onkruid vergaat niet

Dat is de algemene folder voor bestanden die automatisch geladen worden. Het zou kunnen dat TS dat bedoelt of er voldoende aan heeft maar het is niet de manier om add-ins te installeren.

[ Voor 10% gewijzigd door Tribits op 20-07-2014 02:38 ]

Master of questionable victories and sheer glorious defeats


  • Vulchare
  • Registratie: December 2013
  • Laatst online: 21:29
Dit is inderdaad een oplossing. Nadeel hiervan is dat óf voor _alle_ gebruikers de add-in wordt geladen, of ik per gebruiker de addin moet plaatsen. Het eerste zorgt voor onnodige buttons op de ribbon en dat laatste probeer ik juist te vermijden.

Ik denk dat ik dit project maar even op pauze zet, totdat ik de bestanden uit automatisch uit een database kan genereren. Dan koppel ik de add-in daar wel aan.

In ieder geval bedankt voor de tip, wellicht in de toekomst handig ;)

  • DustMan4u
  • Registratie: Maart 2001
  • Laatst online: 21-11 18:31
Je kunt middels een apart stukje VBA code geautomatiseerd VBA code in een bestaand werkboek schrijven.

Hiermee zou je een simpele macro kunnen schrijven waarmee je een file opent en de code toevoegt. Wellicht is dat een oplossing voor je?

Als voorbeeld een stukje code wat ik ooit heb geschreven:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Sub AddNoSave()

'This function adds a macro to the active workbook which adds a function to not ask to save the workbook upon closing it

        Dim LineNum As Long
        Const DQUOTE = """" ' one " character

        Set VBProj = ActiveWorkbook.VBProject
        Set VBComp = VBProj.VBComponents("ThisWorkbook")
        Set CodeMod = VBComp.CodeModule
        
        With CodeMod
            LineNum = .CountOfLines + 1
            .InsertLines LineNum, "Private Sub Workbook_BeforeClose(Cancel As Boolean)"
            LineNum = LineNum + 1
            .InsertLines LineNum, "    Me.saved=true"
            LineNum = LineNum + 1
            .InsertLines LineNum, "End Sub"
        End With
    
End Sub

Domotica: Fibaro HC2 met diverse modules in het hele huis, Nest Hello & Cam IQ | 3D: Voron Switchwire


  • Bolukan
  • Registratie: Oktober 2002
  • Laatst online: 18-11 21:18
Vulchare schreef op maandag 21 juli 2014 @ 17:22:
[...]
Nadeel hiervan is dat óf voor _alle_ gebruikers de add-in wordt geladen, of ik per gebruiker de addin moet plaatsen. Het eerste zorgt voor onnodige buttons op de ribbon en dat laatste probeer ik juist te vermijden.
Op basis van userid kun je de ribbon buttons installeren/activeren.
Voor de userid is dit een mogelijkheid:
code:
1
Declare Function WNetGetUser Lib "mpr.dll" Alias "WNetGetUserA" (ByVal lpName As String, ByVal lpUserName As String, lpnLength As Long) As Long

  • Vulchare
  • Registratie: December 2013
  • Laatst online: 21:29
@DustMan4u

Momenteel heb ik de nodige modules met de volgende code geïmporteerd:

Visual Basic .NET:
1
        DestinationWB.VBProject.VBComponents.Import "LoadUserForm.bas"  


Dit proces is/was dus al geautomatiseerd. Overigens nooit geweten dat je met een macro, een macro kan schrijven. :D

@Bolukan

Ik ben gewend aan Environ("USERNAME"), in hoeverre verschilt dit van het stukje code wat jij plaatste?


De wens ligt er ondertussen om over te stappen naar een 'echte' database die een rapport genereert, in plaats van excel te gebruiken als database en telkens in een ander bestand met formules gegevens op te halen.

Welke mogelijkheden zijn hiertoe? Waarbij het rapport meteen de nodige code bevat?

  • Bolukan
  • Registratie: Oktober 2002
  • Laatst online: 18-11 21:18
Eerst een correctie. Ik gebruikte niet de eerder genoemde, maar deze code:
code:
1
Private Declare Function apiGetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long


De enige reden die ik vind is deze.
Environment variables can be set and unset by anyone, go missing and whatnot, and these cases tend to be difficult to reproduce if anyone even thinks of it as a source of errors.
Mijn reden zou kunnen zijn dat in mijn begintijd de API er wel was, maar de Environ nog niet ;), en ik nooit meer verder gezocht heb.
Pagina: 1