Toon posts:

[VB6/Excel]Bij gebruik van ATPVBAEN.XLA!Regress-> error 1004

Pagina: 1
Acties:
  • 1.148 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik ben bezig met een VB6 applicatie die de vele regressies die we doen moet automatiseren.
Daarvoor gebruiken we de standaard ATPVBAEN.XLA!Regress addin.

Als ik een macro maak in Excel gaat het prima.
Hier is die macro:
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
'declaraties
Dim ... <knip>

  'init:
  sBlad1Naam = "Blad1"
  sResultaatBladnaam = "Leem"
  sResultaatKolom = "C"
  lEindeRijResultaat = 22
  sStartKolom = "I"
  sEindKolom = sStartKolom
  sRegressiePad = "ATPVBAEN.XLA!Regress"
  
  Application.Run sRegressiePad, Worksheets(sBlad1Naam).Range(sResultaatKolom & "1:" & sResultaatKolom & lEindeRijResultaat), _
     Worksheets(sBlad1Naam).Range(sStartKolom & "1:" & sEindKolom & lEindeRijResultaat), False, True, 95, _
     Worksheets(sResultaatBladnaam).Range("$A$1"), False, False, False, False, , False

Als ik vervolgens deze macro kopieer naar mijn VB6 functie DoeRegressie(), die oExcel als Excel.Application meekrijgt en voor de applicatio.run oExcel. zet (wat normaal genoeg is om macros uit Excel te kunnen gebruiken in VB6) krijg ik de foutmelding:
code:
1
2
Error 1004 (ATPVBAEN.XLA kan niet worden gevonden. Controleer de spelling van de naam en de locatie van het bestand.
Als u het bestand opent in de lijst met laatst geopende bestanden (menu Bestand), controleert u of de naam van het bestand is gewijzigd en of het bestand is verplaatst of verwijderd.) in procedure doeRegressie of Module modRegressie


Dit is de code in VB6:
Visual Basic 6:
1
2
3
4
5
6
7
8
9
10
11
12
  'init:
  sBlad1Naam = "Blad1"
  sResultaatBladnaam = "Leem"
  sResultaatKolom = "C"
  lEindeRijResultaat = 22
  sStartKolom = "I"
  sEindKolom = sStartKolom  
  sRegressiePad = "ATPVBAEN.XLA!Regress"
  
  oExcel.Application.Run sRegressiePad, Worksheets(sBlad1Naam).Range(sResultaatKolom & "1:" & sResultaatKolom & lEindeRijResultaat), _
     Worksheets(sBlad1Naam).Range(sStartKolom & "1:" & sEindKolom & lEindeRijResultaat), False, True, 95, _
     Worksheets(sResultaatBladnaam).Range("$A$1"), False, False, False, False, , False


Als ik vervolgens sRegressiePad wijzig in het volledige pad:
Visual Basic 6:
1
sRegressiePad = oExcel.Application.LibraryPath & "\analysis\ATPVBAEN.XLA!Regress"

dan krijg ik de foutmelding:
code:
1
Error 1004 (De macro C:\Program Files\Microsoft Office\Office10\BIBLIO\analysis\ATPVBAEN.XLA!Regress kan niet worden gevonden.) in procedure doeRegressie of Module modRegressie

Terwijl het bestand ATPVBAEN.XLA wel aanwezig is op de locatie.

Google gaf ook al geen resultaat, misschien dat een van jullie het weet ;)

Ter info:
Ik gebruik Excel 2002 SP3.

  • RaZ
  • Registratie: November 2000
  • Niet online

RaZ

Funky Cold Medina

VBA != VB6

VB6 kent dus geen WorkSheets, Cells, Range's of iets. Een VBA voor Excel zal ook niet werken in Access, en ook niet in Word.

Je kan in VB6 dus geen Excel specifieke commando's gebruiken. Een oplossing heb ik niet zo 1,2,3 voor je. Maar ga maar eens zoeken hoe je in VB6 met Excel moet praten.

Ey!! Macarena \o/


Verwijderd

Topicstarter
@Raz,

Ik heb enorm veel code die gebruik maken van Excel code in VB6.
Het klopt dat VBA != VB6, maar doordat je eerst een Excel-object creeert kun je wel de code gebruiken die de macro's genereren.
Dat doe ik al jaren en dat werkt prima.
Dat was ook niet de vraag ;)
Het gaat hier om een add-in die ik wil gebruiken wat niet lukt. Dit komt vooral omdat ik nog niet eerder een add-in heb gebruikt.

Ter info hier een heel klein stukje code dat in VB6 een worksheet toevoegt aan een Excel bestand:
Visual Basic 6:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Dim oExcel As New Excel.Application
Dim oWorkbook As New Excel.Workbook
Dim oSheet As New Excel.Worksheet
Dim sFileName as string
  
  'init:
  sFileName = "c:\test.xls"
  'Open excelbestand
  Set oWorkbook = oExcel.Workbooks.Open(sFileName)
  'Maak een nieuwe sheet en voeg die achteraan in:
  Set oSheet = oWorkbook.Sheets.Add(, oWorkbook.Sheets(oWorkbook.Sheets.Count))
  'Geef de sheet een andere naam:
  oSheet.Name = "RaZ" ':)
  'Sla workbook op
  Call oWorkbook.Close(True)
  'Toon:
  oExcel.Visible = True
  'Of sluit Excel:
  'oExcel.Quit

Verwijderd

Topicstarter
Uiteraard ben ik zelf ook blijven zoeken en heb ik het opgelost.

Het probleem zit er in dat de add-in geactiveerd moet worden.
Daar heb ik nu een functie voor geschreven die het Excel object mee krijgt:
Visual Basic 6:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
  sLibAnalysisPad = oExcel.Application.LibraryPath & "\analysis\"
  'De Analysis ToolPak-bibliotheek van Excel toevoegen
  oExcel.AddIns.Add sLibAnalysisPad & "analys32.xll"
  Set oAddIn = oExcel.AddIns.Item("Analysis ToolPak")
  
  'Alle functies van Analysis ToolPak registreren
  'Zie Microsoft Knowledge Base-artikel Q108888 of Q213489
  oExcel.RegisterXLL "Analys32.xll"
  
  'De Excel Analysis ToolPak - VBA AddIn - toevoegen
  'dit is de automatiseringsinterface naar de Analysis ToolPak-bibliotheek
  'Open nu de .xla om nu de macro Auto_Open, en nadien nadere macro''s uit te voeren.
  'Zie Microsoft Knowledge Base-artikel Q108888 of Q213489
  oExcel.Workbooks.Open sLibAnalysisPad & "atpvbaen.xla"
  oExcel.Workbooks("atpvbaen.xla").RunAutoMacros 1

Deze code komt uit: How to create an Excel histogram by using Automation and Analysis ToolPak

Bedankt voor het meedenken en misschien heeft iemand anders er nog wat aan.