Just nu i M3-nätverket
Gå till innehåll

Listrutan är tom, men excel öppnas.


Darada

Rekommendera Poster

Hej. Jag försöker lära mig att lägga in en kod i word som går in i ett excelark och hämtar data till en kombobox men när koden är klar och listrutan poppar upp så finns det inget i listrutan. Vad är det för fel på koden? Den är tagen ur en bok så den borde fungera!

 

Private Sub cboKunder_Change()
   Dim xlA As Excel.Application, xlW As Workbook
   Dim xlS As Worksheet
   Set xlA = CreateObject("Excel.Application")
   xlA.Visible = True
   Set xlW = xlA.Workbooks.Open("C:\Users\emelie.kastell\Documents\ROTOTEST db test.xlsx")
   Set xlS = xlW.Worksheets(1)
   xlS.Activate
   Antal = xlS.Range("A2").CurrentRegion.Rows.Count
   For i = 2 To Antal
   cboKunder.AddItem Cells(i, 2).Value
   Next
   Set xlS = Nothing
   Set xlW = Nothing
   Set xlA = Nothing
End Sub

 

 

Snälla hjälp mig!

 

// EM\Ingenting är omöjligt. Bara mer eller mindre svårt.

 

Länk till kommentar
Dela på andra webbplatser

Tja, du kör koden på fel ställe så att säga.

 

Du har lagt den under händelserutinen som körs när cboKunder ändras. Men den kan ju inte ändras innan du fyllt den med värden...

 

Under ThisDocument finns rutinen

Private Sub Document_Open()

 

End Sub

Använd förslagsvis denna om du vill initiera comboboxen vid start av dokumentet.

Sedan bör du undvika hårdkodade sökvägar. Kan du inte se till att Excel-filen du behöver finns i samma mapp som Word-dokumentet eller i en fast relativ sökväg?

 

 

/T

 

Even when we know we´ll never find the answers, we have to keep on asking questions.

 

Länk till kommentar
Dela på andra webbplatser

Privat Epost från Darada:

Lade koden i ThisDocument, sparade, stängde och öppnade. Vad som hände då var att när jag öppnade så öppnades excel boken oxå och jag fick ett Runtime error 424 Object Required på cboKunder.AddItem Cells(i, 2).Value. Om jag sedan försöker köra igen utan att stänga så får jag 1004 Method 'Cells' of object'_Global' failed på samma rad.

 

och mitt svar:

Felet beror helt enkelt på att du inte anger objektet som Cells hänger ihop med, i detta fall xlS som du döpt det.

 

I min version ser det ut såhär:

Sub MyInit()

Dim xlA As Object, xlW As Object

Dim Antal As Integer, i As Integer

Dim xlS As Object

Set xlA = CreateObject("Excel.Application")

xlA.Visible = True

Set xlW = xlA.Workbooks.Open(Me.Path & "\test.xls")

Set xlS = xlW.Worksheets(1)

xlS.Activate

Antal = xlS.Range("A2").CurrentRegion.Rows.Count

For i = 2 To Antal

Me.cboBox.AddItem xlS.Cells(i, 2).Value

Next

Set xlS = Nothing

Set xlW = Nothing

Set xlA = Nothing

End Sub

 

 

ändringen till Object istället för specifika Excel-klasser ger att man ej behöver i Word ha referensen till Excel satt (vad den nu heter). Problemen med en fast referens till Excel, eller annan Office-applikation är två:

1: Den måste vara installerad, satt, på den dator man ska köra koden

2: Den är låst till en specifik version av Office.

 

Det man tappar är "hjälpen" i VBA-editorn med möjliga anrop till objekten då kompilatorn inte vet vad det är för typ av objekt man skapat. Sedan går det lite långsammare att köra med en mjuk referens som det ovan kallas.

 

 

/T

 

Even when we know we´ll never find the answers, we have to keep on asking questions.

 

Länk till kommentar
Dela på andra webbplatser

Jag får ett "Compile Error - Method or data member not found" på

Me[i].cboBox[/i].AddItem xlS.Cells(i, 2).Value

 

 

 

 

 

Em

Ingenting är omöjligt. Bara mer eller mindre svårt.

 

Länk till kommentar
Dela på andra webbplatser

Ja, du får givetvis döpa om den så den adresserar din ComboBox. Samt ditt Excel ark osv..

 

 

/T

 

Even when we know we´ll never find the answers, we have to keep on asking questions.

 

Länk till kommentar
Dela på andra webbplatser

Det har jag gjort..:

 

Sub MyInit()
Dim xlA As Object, xlW As Object
Dim Antal As Integer, i As Integer
Dim xlS As Object
Set xlA = CreateObject("Excel.Application")
xlA.Visible = True
Set xlW = xlA.Workbooks.Open("C:\Users\emelie.kastell\Documents\Kunder db test.xlsx")
Set xlS = xlW.Worksheets(1)
xlS.Activate
Antal = xlS.Range("A2").CurrentRegion.Rows.Count
For i = 2 To Antal
Me[color="#006400"].cboBox[/color].AddItem xlS.Cells(i, 2).Value   
Next
Set xlS = Nothing
Set xlW = Nothing
Set xlA = Nothing
End Sub

 

Länk till kommentar
Dela på andra webbplatser

Du kallade din box för cboKunder förut...

 

Skriv Me. och se vad den fyller i för något. Du bör finna finna din box bland valen. Me. - prefixet gäller alltså om koden finns på ThisDocument. Notera det.

 

 

/T

 

Even when we know we´ll never find the answers, we have to keep on asking questions.

 

Länk till kommentar
Dela på andra webbplatser

 

Du kallade din box för cboKunder förut...

 

Skriv Me. och se vad den fyller i för något. Du bör finna finna din box bland valen. Me. - prefixet gäller alltså om koden finns på ThisDocument. Notera det.

 

Jo jag döpte om den till cboBox..

 

 

Det jag får som heter som lådan är:

 

Me.cboBox_Change

 

Men det är väl inte det jag är ute efter??

 

 

Länk till kommentar
Dela på andra webbplatser

Mmh, något kardinalfel någonstans. Inte hos dig men kanske i det du gjort :)

 

Radera din combobox och skapa en ny. Ge den ett bra namn och använd det, med eller utan Me-prefixet.

 

 

/T

 

Even when we know we´ll never find the answers, we have to keep on asking questions.

 

Länk till kommentar
Dela på andra webbplatser

Det där va spännande!!!!

När jag satte igång koden öppnades excelarket ca 800 ggr!! Blev det en loop eller??? Fick stänga av datorn för att det skulle upphöra!

 

Länk till kommentar
Dela på andra webbplatser

Nu så har jag gjort det så här:

 

 

Sub cboBox()
Dim xlA As Object, xlW As Object
Dim Antal As Integer, i As Integer
Dim xlS As Object
Set xlA = CreateObject("Excel.Application")
xlA.Visible = True
Set xlW = xlA.Workbooks.Open("C:\Users\emelie.kastell\Documents\Kunder db test.xlsx")
Set xlS = xlW.Worksheets(1)
xlS.Activate
Antal = xlS.Range("A2").CurrentRegion.Rows.Count
For i = 2 To Antal
Me.[color="#ff0000"]cboBox.[/color]AddItem xlS.Cells(i, 2).Value
Next
Set xlS = Nothing
Set xlW = Nothing
Set xlA = Nothing
End Sub

 

Den ligger Under ThisDocument och jag får felmeddelande: Expected function or variable

 

Länk till kommentar
Dela på andra webbplatser

Direkt olämpligt att döpa din funktion till samma namn som din combobox! Hur ska Word kunna veta vilken du menar? Funktionen eller boxen?

 

Testade din kod och det gav ofelaktigt att Word kraschade. Lade till ett tecken på funktionens namn och det fungerar.

 

 

 

/T

 

Even when we know we´ll never find the answers, we have to keep on asking questions.

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...