Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Zuordnen von indirekt verknüpften Daten

Frage Entwicklung VB for Applications

Mitglied: LordXearo

LordXearo (Level 2) - Jetzt verbinden

22.05.2014, aktualisiert 23.05.2014, 1574 Aufrufe, 5 Kommentare

Hallo zusammen,

ich könnte etwas Hilfe bei der Erstellung eines Skripts ODER einer SQL-Abfrage gebrauchen ( Falls es bereits mit einer SQL-Abfrage lösbar ist)

Aus Excel wird eine MS SQL Datenbank abgefragt. Hier nur die wesentlichen Daten:

| BELEG-ID | Referenz-ID | Belegart | Belegnummer
12 | 23 | Rechnung | XxXxXxXx
33 | 14 | Rechnung | XxXxxXxX
23 | 3 | Lieferschein | XxxXxXxX
3 | -- | Auftragsbestägiung | XxXxXxXx
14 | 5 | Lieferschein | XxXxXxX
5 | -- | Auftragsbestätigung | XxXXxxX

Nun soll es möglich sein von einer bestimmten Rechnung (anhand der Belegnummer), auf die da zugehörige Auftragsbestätigung (Belegnummer) zugelangen. Ich konnte jetzt anhand der Datenbank nur erkennen, das die Belege nur auf diese weise Verknüpft sind (Rechnung <--> Lieferschein <--> Auftragsbestätigung). Es gibt auch Belege mit mehreren Zwischenschritten (Stornorechnung,Angebot,Gutschrift...)

Bisher habe ich ein "dummes" Skript, das immer der Reihe nach die IDs zwishenspeichert und erneut einen Filter über die ganzen Daten setzt. Die Zuordnung dauert dann für einen Beleg bis zu 10 Sekunden. Bei über 10.000 Datensätzen dauert das einfach zu lange.

Ich hoffe das ist einigermaßen verständlich, sonst versuche ich es nochmal klar zu machen.

Edit:
Ich denke ich bekomme das ganze mit mehreren Hilfsspalten über SVERWEIS gelöst, werd ich mich morgen mal dran setzen.


Viele Grüße

Xearo
Mitglied: colinardo
22.05.2014, aktualisiert um 17:23 Uhr
Hallo Xaero,
also ich habe das ganze hier mal mit einer QueryTable und einer Verbindung mit einem SQL-Server getestet.
Ich weiß nicht ob ich dich korrekt verstanden habe, aber eigentlich sollte hier doch folgende SQL-Query reichen:
SELECT * FROM Rechnungen WHERE Belegnummer = 12345 AND Belegart = 'Auftragsbestätigung'
wenn man dann eine QueryTable im Sheet hat lässt sich die SQL-Query so auf die DB absetzen:
01.
Dim sheet As Worksheet 
02.
Set sheet = Worksheets(1) 
03.
strBelegnummer = "12345" 
04.
sheet.ListObjects("NamedesListObjects").QueryTable.CommandText = "Select * From TestDB.dbo.Rechnungen where Belegnummer = " & strBelegnummer & " and Belegart = 'Auftragsbestätigung'" 
05.
sheet.ListObjects("NamedesListObjects").QueryTable.Refresh
Dann enthält die Tabelle nur noch die gefundene AB zur Belegnummer.

Die Belegnummer lässt sich ja in eine Variable setzen die man dann z.B. in eine Zelle oder eine Textbox eingeben kann und dann die Suche via Button gestartet wird.

Alternativ lässt sich natürlich auch über ein Makro die AB suchen, das wäre auch kein Problem:
http://www.administrator.de/contentid/222871

Eine Hilfsspalte würde natürlich auch reichen.

Grüße Uwe
Bitte warten ..
Mitglied: LordXearo
22.05.2014 um 19:52 Uhr
Hallo Uwe,

ich glaube du hast mich nur so halb verstanden. Gegeben ist die Belegnummer einer Rechnung.

Wie die passende Belegnummer zu der Auftragsbestätigung dieser Rechnung lautet, muss rausgefunden werden. Die Rechnung steht zur Auftragsbestätigung in keinem direkten zusammenhang. Aber von dieser Rechnung, gibt es eine "verlinkung" (RefID) zum Lieferschein, und dieser Lieferschein hat wiederum eine RefID die auf die Auftragsbestätigung zeigt.

Hätte man nun auch noch eine "Stornorechnung", dann geht diese "verfolgung" noch eine Ebene tiefer. (Stornorechnung-->Rechnung-->Lieferschein-->Auftragsbestätigung-->Angebot)

In der Tabelle, wo die Belege abgespeichert sind (Rechnung,Lieferschein etc.), gibt es keine direkte Beziehung zu den einzelnen Belege die zu einem Auftrag gehören.

Gruß
Xearo
Bitte warten ..
Mitglied: colinardo
LÖSUNG 22.05.2014, aktualisiert 23.05.2014
Ah OK, nun verstanden
Dafür habe ich dir mal ein Makro geschrieben, du kannst das Demo-Sheet hier herunterladen

Grüße Uwe
Bitte warten ..
Mitglied: LordXearo
23.05.2014 um 08:23 Uhr
WoW, Klasse =)

Genau so sollte es sein. Jetzt muss ich das nur noch so umbauen, dass das Makro eine ganze Spalte von Belegnummern abarbeitet und das Ergebnis in eine Spalte einträgt.

Hast mir sehr gut geholfen, Danke.

Gruß

Xearo
Bitte warten ..
Mitglied: LordXearo
23.05.2014, aktualisiert um 10:22 Uhr
Hier noch meine verschlimmbesserte Version.

01.
Sub FindAB() 
02.
    Dim ws As Worksheet, loDaten As ListObject, rngBelege As Range, rngX As Range, rngBelegID As Range, rngID As Range, strRechBeleg As String 
03.
    Dim i As Integer 
04.
    ' Worksheet setzen 
05.
    Set ws = Worksheets("AB-Nr. Abfrage") 
06.
    'ListObject referenzieren 
07.
    Set loDaten = ws.ListObjects("Tabelle") 
08.
    For i = 2 To 30000 
09.
NaechsteZeile: 
10.
        'Zelle in der der Suchwert steht 
11.
        strRechBeleg = ws.Range("L" & i).Value 
12.
        If strRechBeleg = "" Then 
13.
            Exit Sub 
14.
        End If 
15.
        'Spalte in der die Belegnummern stehen 
16.
        Set rngBelege = loDaten.DataBodyRange.Cells(, 10).EntireColumn 
17.
        'Spalte in der die BELEG-ID steht 
18.
        Set rngBelegID = loDaten.DataBodyRange.Cells(, 1).EntireColumn 
19.
        'Finde Belegnummer der Rechnung 
20.
        Set rngX = rngBelege.Find(what:=strRechBeleg, LookAt:=xlWhole, LookIn:=xlValues) 
21.
        'Wenn Rechnung gefunden wurde ... 
22.
        If Not rngX Is Nothing Then 
23.
            Set rngX = rngX.Offset(0, -9) 
24.
            'Iteriere so lange bis eine Auftragsbestätigung gefunden wurde 
25.
            Do 
26.
                refID = rngX.Offset(0, 1).Value 
27.
                Set rngID = rngBelegID.Find(what:=refID, LookAt:=xlWhole, LookIn:=xlValues) 
28.
                If rngID Is Nothing Then 
29.
                    'MsgBox "Auftragsbestätigung konnte nicht gefunden werden", vbExclamation 
30.
                    ws.Range("M" & i) = "Auftragsbestätigung konnte nicht gefunden werden" 
31.
                    i = i + 1 
32.
                    GoTo NaechsteZeile 
33.
                    'Exit Sub 
34.
                End If 
35.
                Set rngX = rngID 
36.
            Loop Until rngX.Offset(0, 3).Value = "Auftragsbestätigung" 
37.
             
38.
            If Not rngX Is Nothing Then 
39.
                'MsgBox "Die Belegnummer der Auftragsbestätigung lautet: " & rngX.Offset(0, 9).Value 
40.
                ws.Range("M" & i) = rngX.Offset(0, 9).Value 
41.
            End If 
42.
         
43.
        Else    'Rechnung wurde nicht gefunden 
44.
            'MsgBox "Rechnungsbelegnummer wurde nicht gefunden!", vbExclamation 
45.
            ws.Range("M" & i) = "Rechnungsbelegnummer wurde nicht gefunden!" 
46.
        End If 
47.
    Next i 
48.
End Sub
In Spalte L stehen die zu suchenden Rechnungsbelegnummern.
In Spalte M werden die gefundenen AB Nummern eingetragen
Bitte warten ..
Ähnliche Inhalte
Windows Tools
Excel - Import Daten mehrere Kriterien auf Kalenderwoche zuordnen
gelöst Frage von yuki13Windows Tools3 Kommentare

Hallo Zusammen! :) Ich bin ein Frischling auf diesem Forum und gleichfalls in der "Excel-Welt". Ich habe folgendes Problem: ...

VB for Applications
Zuordnen von Daten per VBA aus zweitem anderen Tabellenblättern
gelöst Frage von 132183VB for Applications4 Kommentare

Hallo :) erstmal an alle Ich würde gern wissen wie man Datenzeilen über VBA zuordnen aber mit abgleich von ...

Microsoft Office
Indirekt-Befehl in Formel einfügen
Frage von datekkMicrosoft Office1 Kommentar

Hallo, ich habe eine Tabelle, welche ich oft anpassen muss und suche nach einer einfacheren Variante. Es geht um ...

Outlook & Mail
Verknüpfte Kalender verloren - Outlook 2010
Frage von freeskierchrisOutlook & Mail3 Kommentare

Hallo, aus ungeklärter Ursache hat mein Outlook 2010 die.pst-Datei verloren. Nach dem erneuten Hinzufügen der Datendatei, waren alle Verknüpfungen ...

Neue Wissensbeiträge
Verschlüsselung & Zertifikate

Die Hölle friert ein weiteres Stück zu: Microsoft integriert OpenSSH in Windows

Information von ticuta1 vor 19 MinutenVerschlüsselung & Zertifikate

Interessant SSH-Kommando in CMD.exe und PowerShell

Apple

IOS 11.2.1 stopft HomeKit-Remote-Lücke

Tipp von BassFishFox vor 1 TagApple

Das Update für iPhone, iPad und Apple TV soll die Fernsteuerung von Smart-Home-Geräten wieder in vollem Umfang ermöglichen. Apple ...

Windows 10

Windows 10 v1709 EN murkst bei den Regionseinstellungen

Tipp von DerWoWusste vor 1 TagWindows 10

Dieser kurze Tipp richtet sich an den kleinen Personenkreis, der Win10 v1709 EN-US frisch installiert und dabei die englische ...

Webbrowser

Kein Ton bei Firefox Quantum über RDP

Tipp von Moddry vor 1 TagWebbrowser

Hallo Kollegen! Hatte das Problem, dass der neue Firefox bei mir auf der Kiste keinen Ton hat, wenn ich ...

Heiß diskutierte Inhalte
Windows Server
RODC kann nicht aus Domäne entfernt werden
Frage von NilsvLehnWindows Server18 Kommentare

HAllo, ich arbeite in einem Universitätsnetzwerk mit 3 Standorten. Die Standorte haben alle ein ESXi Cluster und auf diesen ...

Hardware
Kein Bild mit nur einer bestimmten Grafikkarten - Mainboard Konfiguration
gelöst Frage von bestelittHardware18 Kommentare

Hallo zusammen, ich hatte schon einmal eine ähnliche Frage gestellt. Damals hatte ich genau das gleiche Problem. Allerdings lies ...

Netzwerkmanagement
Mehrere Netzwerkadapter in einem PC zu einem Switch zusammenfügen
Frage von prodriveNetzwerkmanagement17 Kommentare

Hallo zusammen Vorweg, ich konnte schon einige IT-Probleme mit Hilfe dieses Forums lösen. Wirklich klasse hier! Doch für das ...

Hardware
Links klick bei Maus funktioniert nicht
gelöst Frage von Pablu23Hardware16 Kommentare

Hallo erstmal. Ich habe ein Problem mit meiner relativ alten maus jedoch denke ich nicht das es an der ...