Hallo
Ik ben op zoek naar een macro om een Excel-document te onderzoeken dat bestaat uit twee kolommen: een kolom met hoogtes en de tweede met een referentiecode die aan elke hoogte is toegewezen (een bestand is als voorbeeld bijgevoegd).
De gebruiker registreert een hoogtewaarde in een UF en ik wil graag dat de macro naar het Excel-bestand kijkt en mij in een ander vak van de UF de referentie laat zien die aan deze hoogte is toegewezen. Tot nu toe kan ik Excel openen, maar als ik probeer om de vergelijkingsbewerkingen uit te voeren: de waarde die door de gebruiker in de UF is ingevoerd, is gelijk aan de waarde van de onderzochte kolom, het werkt niet.
Ik heb het gecontroleerd en mijn programma onderzoekt alle waarden (ik heb msgboxen weergegeven voor elke geteste lus: als, terwijl, voor, enz.), maar de vergelijking werkt niet. Alsof hij nooit gelijke waarde heeft gevonden.
Ik ben op SW 2012
Private Sub MAJCmd_Click()
Dim xlApp As Excel.Application
Dim xlWB As Excel.Workbook
Dim exSheet As Excel.Worksheet
Dim i As Integer
'On ouvre Excel
Set xlApp = New Excel.Application
xlApp.Visible = True
'On ouvre le fichier de références des panneaux
Set xlWB = xlApp.Workbooks.Open("Y:\PDM\NAVIRES\TEST VALIDATION\CAO\TEST-Standards\Hauteurs Panneaux.xlsx")
Set exSheet = xlWB.ActiveSheet
xlApp.Visible = True
For i = 1 To 50 Step 1
If exSheet.Cells(i, 2).Value <> oCabinHigh Then
Else
oCodeHigh = Val(exSheet.Cells(i, 3))
End If
Next
MsgBox oCodeHigh
xlWB.Close
xlApp.Quit
Set exSheet = Nothing
Set xlWB = Nothing
Set xlApp = Nothing
End Sub
Bij voorbaat dank.
Een zeemeeuw in nood
hauteurs.xlsx
Hoi Meeuw,
Gezien de code die je weergeeft, is het Vba excel en ik weet het een en ander over vba SW, maar het moet vergelijkbaar zijn. Als ik het goed begrijp wat je WILT schrijven is dat het zoekt in kolom A en in rij i, i is de variabele van je lus om alle rijen te maken?
Maar voor mij SCHRIJF je dat je in kolom i wilt kijken, dus 1=A, 2 = B etc in rij 2 dus je beweegt niet in de goede richting. Bekijk uw voorwaarden, want om alle regels onder de loep te nemen, moet u beginnen bij 2 en de volgorde in uw celaanduiding herzien, want een cel is een letter en een cijfer.
Daarnaast weet ik het niet in vba excel maar op solidworks moet je het getal omzetten in tekens om de letter van de kolom te krijgen.
Hallo
Het probleem komt van de for-lus.
Wanneer de waarde is gevonden, moet je uit de lus komen, anders blijft de code worden uitgevoerd en wordt de gevonden waarde overschreven. Groothandel:
For i = 1 To 50
If exSheet.Cells(i, 2).Value = oCabinHigh Then
oCodeHigh = Val(exSheet.Cells(i, 3))
Exit For
End If
Next
En voor de cellen en kolom in Excel begint het vanaf 1. In feite Kolom A, rij 1 = Cellen(1,1), in dit geval in uw code, u onderzoekt B en retourneert C, wat een lege waarde is.
4 likes
@Roub25
Destijds heb ik voor mij een copy/paste van mijn code gemaakt, op mijn originele excel sta ik op kolom B bij het lezen en krijg ik een kolomwaarde C, ik weet dat ik daarvoor geen probleem heb. zoals ik al zei, had ik de lussen getest door MsgBoxes te laten lijken te valideren dat ik de gegevens uit de spreadsheet kon lezen.
Dus ik heb een VBA-code geschreven onder SW om Excel te lezen, ik heb mijn For-lus aangepast zoals aangegeven door @Cyril.f en ik vraag om te zoeken naar de waarde 2110 (die bestaat in de eerste 50 waarden met de referentie 0) maar de overeenkomst wordt niet herkend.
For i = 3 To 20 Step 1
MsgBox exSheet.Cells(i, 2).Value & "....." & exSheet.Cells(i, 3).Value
If exSheet.Cells(i, 2).Value = oCabinHigh.Value Then
oCodeHigh = Val(exSheet.Cells(i, 3))
Exit For
End If
Next
Misschien heb ik een fout bij het declareren van variabelen die een probleem zouden veroorzaken? of de Val(...) formule werkt niet of ...?
De lus scant alle cellen van B3 tot B20 (getest door de msgbox-weergave) maar dat is alles, ik heb niets meer.
Hallo
Wijzig na een test op het bijgevoegde Excel-bestand het aantal kolommen:
Voor i = 1 tot 50 Stap 1
Als exSheet.Cells(i, 1). Waarde <> oCabinHigh Dan
Anders
oCodeHigh = Val(exSheet.Cells(i, 2))
Einde als
Volgend
Vriendelijke groeten
1 like
Bedankt allemaal door het maken van cumulaties van alle antwoorden heb ik de oplossing gevonden (die op dit moment lijkt te werken)
If Val(exSheet.Cells(i, 2)) = Val(oCabinHigh) Then
oCodeHigh = exSheet.Cells(i, 3)
Exit For
Else
Dus a priori was het de manier om de waarde van mijn variabelen te identificeren die niet correct was.
Nogmaals bedankt aan iedereen voor de snelheid van uw antwoorden.
Dus soms moet je weten hoe je het eenvoudig kunt houden en de native tools van Excel kunt gebruiken:
Je selecteert je eerste rij, je gaat naar 'Data' 'Auto Filter'
Dus door op de naam van je column te klikken kun je een mooie filter maken met geavanceerde opties.
Als het doel alleen is om de code te vinden die bij de lengte hoort, is dat meer dan genoeg zonder dat je je er zorgen over hoeft te maken......