Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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

Den Wert eines Speichers mit einer Spalte einer anderen Excelmappe vergleichen

Frage Entwicklung VB for Applications

Mitglied: Tobias1900

Tobias1900 (Level 1) - Jetzt verbinden

26.05.2014, aktualisiert 14:19 Uhr, 1318 Aufrufe, 6 Kommentare

Hallo!

Folgendes Problem:

Betätige ich in meinem Visualisierungsprogramm (iFix), welches mit VBA programmiert ist, einen Button, wird eine TCP/IP-Socket verbindung aufgebaut und ein Wert in ein dataBuf (String) geschrieben. Das Funktioniert.

Jetzt soll der Wert im dataBuf mit der Spalte A einer Excelmappe verglichen werden. Diese liegt auf dem selben Rechner wie das Visualisierungsprogramm.

Die Excelmappe lässt sich öffnen:

Dim strDateiname As String


strDateiname = "C:\Dokumente und Einstellungen\Schule\Desktop\Anpreßwalzenauswertung_Kartei.xls"


Dim Excel As Object


Set Excel = CreateObject("Excel.Application")
If Excel Is Nothing Then
MsgBox "Konnte keine Verbindung zu Excel herstellen!", 16, "Problem"
Exit Sub
End If

With Excel
.Visible = True
.Workbooks.Open strDateiname
End With
Exit Sub


Exit_Konten_Click:
Exit Sub

Err_Konten_Click:
MsgBox Err.Description
Resume Exit_Konten_Click

Wie vergleiche ich nun den Wert im dataBuf mit der Spalte A der Excelmappe?

Danke und Grüße
Mitglied: Eintagsfliege
26.05.2014, aktualisiert um 15:59 Uhr
Hallo Tobias1900!

Das kommt darauf an:
- Befindet sich die Zelle im ersten Tabellenblatt oder muss eine bestimmte Tabelle angesprochen werden?
- Soll der gesamte Inhalt mit/ohne Klein/Groß-Unterscheidung oder nur ein Teil des Inhalts verglichen werden?

Ansonsten frage ich mich, wieso Du ein Excel-Object mit 'Visible=True' erzeugst, wenn Du eh schon Excel ausführst?

Grüße Dieter
Bitte warten ..
Mitglied: colinardo
26.05.2014, aktualisiert um 20:00 Uhr
Hallo Tobias1900, Willkommen auf Administrator.de!
Da du uns etwas wenig Informationen lieferst um welchen Datentyp es sich mit deiner Variablen dataBuf() handelt können wir nur spekulieren, vermutlich ein Array aus Strings. Wenn es nur darum geht um zu vergleichen ob der Inhalt des Arrays identisch mit der gleichen Anzahl an Zellen in Spalte A des Worksheets ist(gleiche Reihenfolge), kannst du es ungetestet etwa so machen (ich gehe mal davon aus das du deinen Code aus einer anderen Anwendung ausführst als Excel, da du ja ein Excel-Objekt erzeugst):
01.
Sub DeineSub() 
02.
    Dim strDateiname As String, Excel As Object, wb As Object, ws As Object, arr As Variant, identical As Boolean 
03.
    strDateiname = "C:\Dokumente und Einstellungen\Schule\Desktop\Anpreßwalzenauswertung_Kartei.xls" 
04.
    Set Excel = CreateObject("Excel.Application") 
05.
     
06.
    ' Der Variablen noch dein 'dataBuf()' Array zuweisen 
07.
    arr = dataBuf 
08.
     
09.
    identical = True 
10.
    'eventuelle Dialoge unterdrücken 
11.
    Excel.DisplayAlerts = False 
12.
     
13.
    If Excel Is Nothing Then 
14.
        MsgBox "Konnte keine Verbindung zu Excel herstellen!", 16, "Problem" 
15.
        Exit Sub 
16.
    End If 
17.
     
18.
    With Excel 
19.
        'Sichtbar ausführen 
20.
        .Visible = True 
21.
        'Workbook öffnen 
22.
        Set wb = .Workbooks.Open(strDateiname) 
23.
        'Tabelle festlegen 
24.
        Set ws = wb.Worksheets(1) 
25.
        'Vergleiche Array mit Zellen in Spalte A 
26.
        If IsArray(arr) Then 
27.
            For i = 0 To UBound(arr) 
28.
                'Wenn Wert des Arrayelementes nicht mit dem Inhalt der Zelle übereinstimmt, gebe 'False' zurück 
29.
                If ws.Cells(i + 1, 1).Value <> arr(i) Then 
30.
                    identical = False 
31.
                    Exit For 
32.
                End If 
33.
            Next 
34.
            If identical Then 
35.
                'Array ist identisch mit Inhalt 
36.
                MsgBox "Inhalt ist identisch mit Spalte A", vbInformation 
37.
            Else 
38.
                'Array ist unterschiedlich 
39.
                MsgBox "Inhalt ist unterschiedlich zu Spalte A", vbExclamation 
40.
            End If 
41.
        Else    'Inputvariable ist kein Array 
42.
            MsgBox "Variable ist kein Array", vbExclamation 
43.
        End If 
44.
    End With 
45.
     
46.
    Excel.DisplayAlerts = True 
47.
    Excel.Quit 
48.
    Set Excel = Nothing 
49.
    Set wb = Nothing 
50.
    Set ws = Nothing 
51.
End Sub
Im jetztigen Zustand wird zwischen Groß und Kleinschreibung unterschieden. Wenn das nicht gewollt ist Zeile 29 so abzuändern:
If LCase(ws.Cells(i + 1, 1).Value) <> LCase(arr(i)) Then 
Viel Erfolg
Grüße Uwe
Bitte warten ..
Mitglied: Tobias1900
26.05.2014 um 20:03 Uhr
Hallo!

Danke für eure Hilfen!

Bei dem dataBuf handelt es sich um einen Speicher bzw. Wert des Typs String. Es ist richtig das ich den Code aus einer anderen Anwendung heraus ausführe.

Im dataBuf können die Werte "WA0001-WA0100" (fortlaufende Nummern) stehen.

Diese Werte stehen so auch in der Spalte A Zeile 1 bis Spalte Zeile 100 der Excelliste.

Nun soll wie schon richtig vermutet der Wert im dataBuf mit der Spalte verglichen werden und der Inhalt der Zeile ausgelesen werden.

Alles sehr komplex wie ich finde. Vor allem wenn die VBA-Programmierung neuland ist...

Güße und vielen Dank!
Bitte warten ..
Mitglied: Eintagsfliege
LÖSUNG 27.05.2014, aktualisiert 28.05.2014
Hallo Tobias!

Dann in etwa so:
01.
Private Const ExcelFile = "C:\Dokumente und Einstellungen\Schule\Desktop\Anpreßwalzenauswertung_Kartei.xls" 
02.
 
03.
Private Const xlWhole = 1           'Vergleiche ganzen Inhalt 
04.
Private Const xlPart = 2            'Vergleiche Teil-Inhalt 
05.
Private Const xlValues = -4163      'Suche in Zellwerten 
06.
 
07.
Private Const vbCritical = 16 
08.
Private Const vbExclamation = 48 
09.
Private Const vbInformation = 64 
10.
 
11.
Sub Test() 
12.
    Call ExcelSearch("Testabc") 
13.
End Sub 
14.
 
15.
Sub ExcelSearch(ByVal strSearch As String) 
16.
    Dim objExcel As Object, objWkb As Object, objWks As Object, objFound As Object 
17.
     
18.
    On Error Resume Next 
19.
     
20.
    Set objExcel = CreateObject("Excel.Application") 
21.
    Set objWkb = objExcel.Workbooks.Open(ExcelFile) 
22.
    Set objWks = objWkb.Sheets(1) 
23.
     
24.
    If objExcel Is Nothing Then 
25.
        MsgBox "Konnte keine Verbindung zu Excel herstellen!", vbCritical, "Problem" 
26.
    ElseIf objWkb Is Nothing Then 
27.
        MsgBox "Excel-Datei konnte nicht geöffnet werden!", vbCritical, "Problem" 
28.
    Else 
29.
        'Args: Suchstring, , in Zellwerten suchen, Vergleich teil (xlPart) / ganzer(xlWhole) Inhalt 
30.
        Set objFound = objWks.Range("A:A").Find(strSearch, , xlValues, xlWhole) 
31.
         
32.
        If objFound Is Nothing Then 
33.
            MsgBox strSearch & ": Nicht gefunden!", vbInformation, "Hinweis" 
34.
        Else 
35.
            MsgBox strSearch & ": In Zeile " & objFound.Row & " gefunden!", vbInformation, "Hinweis" 
36.
        End If 
37.
        objWkb.Close False 
38.
    End If 
39.
         
40.
    If IsObject(objExcel) Then objExcel.Quit 
41.
     
42.
    On Error GoTo 0 
43.
End Sub
Grüße Dieter
Bitte warten ..
Mitglied: Tobias1900
28.05.2014 um 08:52 Uhr
Hallo Dieter!

Vielen Dank für deine Hilfe! Besonders das die Excelmappe nich sichtbar aktiv wird gefällt mir sehr sher gut! Super

Hat funktioniert! Super Forum super Hilfe!

Bei weiteren Fragen werde ich wohl wieder auf dieses Forum zurückkommen.

Grüße Tobias
Bitte warten ..
Mitglied: Eintagsfliege
28.05.2014 um 09:12 Uhr
Hallo Tobias!

Hat funktioniert! Super Forum super Hilfe!
Freut mich zu hören

Dann bitte den Thread noch als gelöst markieren, Danke

Grüße Dieter
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Windows 7
Verteillösung für IT-Raum benötigt (12)

Frage von TheM-Man zum Thema Windows 7 ...