15. marts 2008 - 14:10Der er
14 kommentarer og 1 løsning
Send data frem og tilbage mellem to excelfiler.
Jeg har nedenstående kode som kan hente kundenavn over fra en anden excelfil, hvis der findes et kundenavn ud for de oprettede kundenumre.
Findes der ikke et kundenavn skal den i stedet indsætte det kundenavn som jeg indtaster i en inputbox. Fra inputboksen skal kundenavnet indsættes i begge excelfiler.
Men jeg kan ikke få den til at poppe op med inputboksen samt sende dataene over i den anden excelfil.
Det andet er at jeg gerne vil kunne rette i de data den finder ud fra det kundenummer der er indtastet og så returnere rettelserne til den anden excelfil.
En der har et forslag til hvordan jeg får det til at virke?
Const kildeSti = "C:\testfil\Kilde.xls" 'tilpasses Dim kXLS, kildeRækker Const kundeNrindtastesI = "A3:A3" 'kan tilpasses Private Sub worksheet_change(ByVal target As Excel.Range) Dim kundeNavn As String Dim i As Integer Dim Valgt As Variant Dim ws As Worksheet
Set ws = Worksheets("Ark1")
If Not Intersect(target, ws.Range(kundeNrindtastesI)) Is Nothing Then If Len(target) > 0 Then kundeNavn = søgKunde(target.Value) If kundeNavn <> "" Then ws.Cells(target.Row, target.Column + 1) = kundeNavn Else MsgBox ("Kundenr. " + CStr(target.Value) + " kunne ikke findes!") ws.Cells(target.Row, target.Column + 1) = ""
i = MsgBox("Skal kunde gemme?" & Chr(13), vbQuestion + vbYesNo)
Select Case i Case vbOK Valgt = InputBox("Indsæt kundenavn") If Valgt = "" Then Valgt = MsgBox("Ingen kunde at oprette", vbExclamation) Exit Sub ElseIf Valgt <> "" Then Valgt = ws.Cells(target.Row, target.Column + 1) indsætkunde(target.Value) = valg Exit Sub End If Case vbNo Exit Sub
End Select
End If Else ws.Cells(target.Row, target.Column + 1) = "" End If End If End Sub Private Function søgKunde(knr) Set kXLS = CreateObject("Excel.application") With kXLS .Workbooks.Open kildeSti
For r = 2 To kildeRækker If knr = .Cells(r, 1) Then søgKunde = .Cells(r, 2) lukObject Exit Function End If Next r End With lukObject søgKunde = "" End Function Private Sub lukObject() With kXLS .ActiveWorkbook.Close .Application.Quit End With Set kXLS = Nothing End Sub
Private Function indsætkunde(knr1) Set kXLS = CreateObject("Excel.application") With kXLS .Workbooks.Open kildeSti
For r = 2 To kildeRækker If knr1 = .Cells(r, 1) Then .Cells(r, 2) = indsætkunde lukObject Exit Function End If Next r End With lukObject indsætkunde = "" End Function
Private Sub worksheet_change(ByVal target As Excel.Range) Dim kundeNavn As String Dim i As Integer Dim Valgt As Variant Dim ws As Worksheet
Set ws = Worksheets("Ark1")
If Not Intersect(target, ws.Range(kundeNrindtastesI)) Is Nothing Then If Len(target) > 0 Then kundeNavn = søgKunde(target.Value, 0, False) ' bruger samme funktion som i gem, Falsk gør at den læser If kundeNavn <> "" Then ws.Cells(target.Row, target.Column + 1) = kundeNavn Else MsgBox ("Kundenr. " + CStr(target.Value) + " kunne ikke findes!") ws.Cells(target.Row, target.Column + 1) = ""
i = MsgBox("Skal kunde gemme?" & Chr(13), vbQuestion + vbYesNo)
Select Case i Case vbYes Valgt = InputBox("Indsæt kundenavn") If Valgt = "" Then Valgt = MsgBox("Ingen kunde at oprette", vbExclamation) Exit Sub ElseIf Valgt <> "" Then ws.Cells(target.Row, target.Column + 1) = Valgt søgKunde target.Value, Valgt, True ' bruger samme funktion som i søg, True, gør at den gemmer Exit Sub End If Case vbNo Exit Sub
End Select
End If Else ws.Cells(target.Row, target.Column + 1) = "" End If End If End Sub Private Function søgKunde(knr, Valgt, Gem As Boolean) Set kXLS = CreateObject("Excel.application") With kXLS .Workbooks.Open kildeSti
For r = 2 To kildeRækker If knr = .Cells(r, 1) Then If Gem Then ' der gemmes .Cells(r, 2) = Valgt Exit For Else ' der læses søgKunde = .Cells(r, 2) lukObject Exit Function End If End If
Next r End With lukObject søgKunde = "" End Function Private Sub lukObject() With kXLS
.ActiveWorkbook.Close SaveChanges:=True .Application.Quit End With Set kXLS = Nothing End Sub
undskyld svartiden, men skulle lige have konfronteret løsningen. Hvis jeg gerne vil have flere konstanter på a la kundenr, som adresse, by og land hvordan får jeg disse med over når man indtaster et kundenummer.
De skulle gerne hentes over på samme måde som kundenavn. Alle dataene står på samme streng/række over i Kildefilen. Samme funktion som kundenr skal tilføjes hvis ikke der er indtast nogen data endnu.
Jeg har forsøgt at opdatere den udgave du sendte men kan det gøres nemmere i stedet for at skulle oprette ny funktioner hele tiden?
Private Sub worksheet_change(ByVal target As Excel.Range) Dim i As Integer Dim kundeNavn As String Dim adresse As String Dim by As String Dim land As String
Dim KundeValg As Variant Dim adresseValg As Variant Dim byValg As Variant Dim landValg As Variant
Dim ws As Worksheet
Set ws = Worksheets("Ark1")
If Not Intersect(target, ws.Range(kundeNr_indtastes_I)) Is Nothing Then If Len(target) > 0 Then kundeNavn = søgKunde(target.Value, 0, False) ' bruger samme funktion som i gem, Falsk gør at den læser adresse = søgKunde2(target.Value, 0, False) by = søgKunde3(target.Value, 0, False) land = søgKunde4(target.Value, 0, False)
If kundeNavn <> "" Then ws.Cells(target.Row, target.Column + 1) = kundeNavn Else MsgBox ("Kundenr. " + CStr(target.Value) + " kunne ikke findes!") ws.Cells(target.Row, target.Column + 1) = ""
i = MsgBox("Skal kunde gemme?" & Chr(13), vbQuestion + vbYesNo) 'Kunde oprettes og gemmes Select Case i Case vbYes KundeValg = InputBox("Indsæt kundenavn") If KundeValg = "" Then KundeValg = MsgBox("Ingen kunde at oprette", vbExclamation) Exit Sub ElseIf KundeValg <> "" Then ws.Cells(target.Row, target.Column + 1) = KundeValg søgKunde target.Value, KundeValg, True ' bruger samme funktion som i søg, True, gør at den gemmer Exit Sub End If Case vbNo Exit Sub End Select
If adresse <> "" Then ws.Cells(target.Row + 2, target.Column + 3) = adresse Else MsgBox ("adresse. " + CStr(target.Value) + " kunne ikke findes!") ws.Cells(target.Row + 2, target.Column + 3) = ""
i = MsgBox("Skal adresse gemme?" & Chr(13), vbQuestion + vbYesNo) 'adresse oprettes og gemmes Select Case i Case vbYes adresseValg = InputBox("Indsæt adresse") If adresseValg = "" Then adresseValg = MsgBox("Ingen adresse er oprettet", vbExclamation) Exit Sub ElseIf adresseValg <> "" Then ws.Cells(target.Row + 2, target.Column + 3) = adresseValg søgKunde target.Value, adresseValg, True ' bruger samme funktion som i søg, True, gør at den gemmer Exit Sub End If Case vbNo Exit Sub End Select
If by <> "" Then ws.Cells(target.Row + 7, target.Column + 2) = by Else MsgBox ("by " + CStr(target.Value) + " kunne ikke findes!") ws.Cells(target.Row + 7, target.Column + 2) = ""
i = MsgBox("Skal by gemme?" & Chr(13), vbQuestion + vbYesNo) 'by oprettes og gemmes Select Case i Case vbYes byValg = InputBox("Indsæt bynavn") If byValg = "" Then byValg = MsgBox("Ingen by at oprette", vbExclamation) Exit Sub ElseIf byValg <> "" Then ws.Cells(target.Row + 7, target.Column + 2) = byValg søgKunde target.Value, byValg, True ' bruger samme funktion som i søg, True, gør at den gemmer Exit Sub End If Case vbNo Exit Sub End Select
If land <> "" Then ws.Cells(target.Row + 8, target.Column + 3) = land Else MsgBox ("land " + CStr(target.Value) + " kunne ikke findes!") ws.Cells(target.Row + 8, target.Column + 3) = ""
i = MsgBox("Skal land gemmes?" & Chr(13), vbQuestion + vbYesNo) 'land oprettes og gemmes Select Case i Case vbYes landValg = InputBox("Indsæt Landenavn") If landValg = "" Then landValg = MsgBox("Ingen lande info", vbExclamation) Exit Sub ElseIf landValg <> "" Then ws.Cells(target.Row + 8, target.Column + 3) = landValg søgKunde target.Value, landValg, True ' bruger samme funktion som i søg, True, gør at den gemmer Exit Sub End If Case vbNo Exit Sub End Select End If End If End If End If Else ws.Cells(target.Row, target.Column + 1) = "" ws.Cells(target.Row + 2, target.Column + 3) = "" ws.Cells(target.Row + 7, target.Column + 2) = "" ws.Cells(target.Row + 8, target.Column + 3) = "" End If End If End Sub Private Function søgKunde(knr, KundeValg, Gem As Boolean) Set kXLS = CreateObject("Excel.application") With kXLS .Workbooks.Open kildeSti
For r = 2 To kildeRækker If knr = .Cells(r, 1) Then If Gem Then ' der gemmes .Cells(r, 2) = KundeValg Exit For Else ' der læses søgKunde = .Cells(r, 2) lukObject Exit Function End If End If
Next r End With lukObject End Function Private Function søgKunde2(knr, adresseValg, Gem As Boolean) Set kXLS = CreateObject("Excel.application") With kXLS .Workbooks.Open kildeSti
For r = 2 To kildeRækker If knr = .Cells(r, 1) Then If Gem Then ' der gemmes .Cells(r, 3) = adresseValg Exit For Else ' der læses søgKunde2 = .Cells(r, 3) lukObject Exit Function End If End If
Next r End With lukObject End Function Private Function søgKunde3(knr, byValg, Gem As Boolean) Set kXLS = CreateObject("Excel.application") With kXLS .Workbooks.Open kildeSti
For r = 2 To kildeRækker If knr = .Cells(r, 1) Then If Gem Then ' der gemmes .Cells(r, 4) = byValg Exit For Else ' der læses søgKunde3 = .Cells(r, 4) lukObject Exit Function End If End If
Next r End With lukObject End Function Private Function søgKunde4(knr, landValg, Gem As Boolean) Set kXLS = CreateObject("Excel.application") With kXLS .Workbooks.Open kildeSti
For r = 2 To kildeRækker If knr = .Cells(r, 1) Then If Gem Then ' der gemmes .Cells(r, 5) = landValg Exit For Else ' der læses søgKunde4 = .Cells(r, 5) lukObject Exit Function End If End If
Next r End With lukObject End Function Private Sub lukObject() With kXLS
.ActiveWorkbook.Close SaveChanges:=True .Application.Quit End With Set kXLS = Nothing End Sub
Kan forstå du ikke vil hjælpe mere så jeg må oprette spørgsmålet igen, hvor jeg kan få tilføjet flere kolonner og overføre dataene til andre excel og word ark. Samt skal have muligheden for at skrive tilbage igen på samme måde som i det første eksempel..
Hvor mange point vil du have for at lave koden til det??
Jeg har modificeret dit første forslag til det forslag der ligger d. 26/03-2008 21:32:42 og det er dertil mit svar fra d. 28/03-2008 14:50:41 relatere sig til..
Jeg har en række med informationer i ark1 som jeg skal have over i enkelte celler i ark2. Hvis der ændres i ark2 skal dette returneres til ark1.
Rækken tilhøre et kundenummer i ark1.
Er det ikke muligt at lave en funktion som kan søge og hente til alle celler i ark2 fra en række i ark1.. Ændringer skal bare returneres på samme måde som i det første eksemple du lavede bare for alle celler i samme række.
Det tror jeg også vil være en go ide.. Koden vil blive alt for sløv på den anden måde, samt der skal være op til flere bruger, der skal kunne hente og skrive tilbage..
Det skal virke over mod word filer og excel filer.. Er det muligt?
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.