Nicknero1405
Gebruiker
- Lid geworden
- 16 jul 2010
- Berichten
- 18
Hallo allemaal.
Ik ben voor mijn werk bezig met het maken van een VBA macro die een excel bestand opent en daarin naar een naam gaat zoeken in kolom D, vervolgens de artikelnummer uit kolom B in de zelfde regel te halen en terug te sturen als string.
Alleen nu kom ik met de volgende stap, en daar snap ik nog niet zo veel van:
Nu wil ik er voor zorgen dat als je de naam die je zoekt twee of meerdere keren vind in kolom D, dat hij dan van iedere rij die hij gevonden heeft de descriptie uit kolom A haalt (iedere rij heeft dus een andere descriptie) en dat gebruikt in een custom msgbox zodat je kan selecteren welke van de gevonden rijen je wilt gebruiken.
Ik hoop dat ik hiermee duidelijk ben, anders probeer ik het wel stap voor stap uit te leggen wat er moet gebeuren:
- als hij maar 1 regel vind, moet hij doen wat hij nu al doet.
- als hij meer regels vind. moet hij OF:
-- iedere gevonden regel de informatie uit kolom B halen en in een aparte string stoppen. Bijvoorbeeld
gevonden regel 1 = strmatch1
gevonden regel 2 = strmatch2
-- of hij moet een custom msgbox openen met een lijst met alle gevonden regels, informatie uit kolom B, en uit kolom A om te
weten welke daarvan je nodig hebt. en dan kun je selecteren welke je wilt gebruiken.
Voorbeeld van de custom msgbox layout:
"De database bevat bevat meerdere gevonden regels. Selecteer de juiste descriptie, en druk volgens op OK"
o <info kolom B> - <info kolom A>
o <info kolom B> - <info kolom A>
o <info kolom B> - <info kolom A>
OK
Het script wat ik gemaakt heb waar dit dus bij hoort:
Ik ben voor mijn werk bezig met het maken van een VBA macro die een excel bestand opent en daarin naar een naam gaat zoeken in kolom D, vervolgens de artikelnummer uit kolom B in de zelfde regel te halen en terug te sturen als string.
Alleen nu kom ik met de volgende stap, en daar snap ik nog niet zo veel van:
Nu wil ik er voor zorgen dat als je de naam die je zoekt twee of meerdere keren vind in kolom D, dat hij dan van iedere rij die hij gevonden heeft de descriptie uit kolom A haalt (iedere rij heeft dus een andere descriptie) en dat gebruikt in een custom msgbox zodat je kan selecteren welke van de gevonden rijen je wilt gebruiken.
Ik hoop dat ik hiermee duidelijk ben, anders probeer ik het wel stap voor stap uit te leggen wat er moet gebeuren:
- als hij maar 1 regel vind, moet hij doen wat hij nu al doet.
- als hij meer regels vind. moet hij OF:
-- iedere gevonden regel de informatie uit kolom B halen en in een aparte string stoppen. Bijvoorbeeld
gevonden regel 1 = strmatch1
gevonden regel 2 = strmatch2
-- of hij moet een custom msgbox openen met een lijst met alle gevonden regels, informatie uit kolom B, en uit kolom A om te
weten welke daarvan je nodig hebt. en dan kun je selecteren welke je wilt gebruiken.
Voorbeeld van de custom msgbox layout:
"De database bevat bevat meerdere gevonden regels. Selecteer de juiste descriptie, en druk volgens op OK"
o <info kolom B> - <info kolom A>
o <info kolom B> - <info kolom A>
o <info kolom B> - <info kolom A>
OK
Het script wat ik gemaakt heb waar dit dus bij hoort:
Code:
Sub main()
Dim oExcel As Excel.Application
Dim oWB As Workbook
Dim oWS As Excel.Worksheet
Dim strartno, strmodel As String
Dim retval As Boolean
Dim strRow
Dim part
Dim noMatch As String
Dim frmCustom
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swConfigMgr As SldWorks.ConfigurationManager
Dim swConfig As SldWorks.Configuration
Set oExcel = New Excel.Application
Set swApp = CreateObject("SldWorks.Application")
Set part = swApp.ActiveDoc
strFilename = part.GetTitle
oExcel.Visible = False
Set oWB = oExcel.Workbooks.Open("file:///\\savas-sbs1\Openbaar\400 Ont\00 Bibliotheek\Tekeningen\TEKART.xls")
On Error GoTo Einde:
With oWB.Sheets("Sheet1")
strRow = WorksheetFunction.Match((strFilename), .Range("D1:D15000"), 0) 'Hier zoekt hij het bestandsnaam in kolom D
strartno = .Range("B" & strRow).Value 'Hier haalt hij de info uit kolom B en zet het in een string
End With
Excel.Application.DisplayAlerts = False
Excel.Application.Quit
oExcel.Quit
On Error GoTo 0
sConfig = ("Default")
strCP2 = "Art. nr"
strCP = "Art. nr."
strartno3 = part.CustomInfo2(sConfig, strCP2)
If strartno3 <> "" Then
retval = part.DeleteCustomInfo2(sConfig, strCP2)
End If
strartno2 = part.CustomInfo2(sConfig, strCP)
If strartno2 = "" Then
retval = part.DeleteCustomInfo2(sConfig, strCP)
retval = part.AddCustomInfo3(sConfig, strCP, swCustomInfoText, strartno)
MsgBox ("Van " & strFilename & " is artikelcode " & strartno & " gevonden en toegevoegd als custom property: " & strCP)
ElseIf strartno2 <> strartno Then
strexist = MsgBox("Artikelnummer van " & strFilename & " bestaat al. Wil je " & strartno2 & " vervangen voor " & strartno & "?", 36)
If strexist = 6 Then
retval = part.DeleteCustomInfo2(sConfig, strCP)
retval = part.AddCustomInfo3(sConfig, strCP, swCustomInfoText, strartno)
MsgBox ("Artikel nummer van " & strFilename & " is van " & strartno2 & " vervangen voor " & strartno & " en toegevoegd als custom property: " & strCP)
End If
End If
Einde:
'error afhandeling
Select Case Err.Number
Case 0
Case 1004
noMatch = MsgBox(strFilename & " is niet gevonden in de database.")
Excel.Application.Quit
oExcel.Quit
Case Else
MsgBox "Er is een fout opgetreden" & vbCr & _
Err.Description & "(" & Err.Number & ")"
Excel.Application.Quit
oExcel.Quit
End Select
'Objects to void
Set oExcel = Nothing
Set oWB = Nothing
Set part = Nothing
Set strFilename = Nothing
Set strartno = Nothing
Set strRow = Nothing
End Sub