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

Vba Excel Tabellenblatt nach Zellennamen durchsuchen

Frage Entwicklung VB for Applications

Mitglied: chef1568

chef1568 (Level 1) - Jetzt verbinden

16.08.2014, aktualisiert 17.08.2014, 4199 Aufrufe, 5 Kommentare

Hallo,

ich habe ein Problem bei meinem VBA-Script.
Und zwar möchte ich ein bestimmtes Tabellenblatt durchsuchen ob ein bestimmter Zellenname vorhanden ist.

01.
Sub Zellenname_suchen() 
02.
 
03.
Dim Tabelle As String 'Tabellenblatt Name 
04.
Dim STG(0 To 100, 0 To 2) As String 'Array 
05.
Dim iSTG, jSTG As Integer 'Zähler 
06.
 
07.
'Array einlesen 
08.
For iSTG = 3 To 100                        'Startadresse Zeile 4...54 --> Zeile 10 = Adresse 11 
09.
    For jSTG = 0 To 1                       'Startadresse Spalte A..C --> Spalte A = Adresse 0 
10.
        STG(iSTG, jSTG) = Sheets("Tabelle").Cells(iSTG + 1, jSTG + 1).Value 
11.
    Next jSTG 
12.
 
13.
    If Range(STG(iSTG, 1) & "_SWnummer").Value = STG(iSTG, 1) & "_SWnummer" Then 
14.
        '############## 
15.
        ' Code 
16.
        '############## 
17.
    End If 
18.
Next iSTG 
19.
 
20.
End Sub
Leider funktioniert der Code nicht und gibt immer einen Fehler aus.
Das Problem liegt irgendwo in Zeile 13.

01.
Laufzeitfehler '1004': 
02.
Die Methode 'Range' für das Objekt '_Global' ist fehlgeschlagen
Auch die explizierte Definition des Tabellenblattes funktioniert nicht
01.
    If Sheets("Tabelle").Range(STG(iSTG, 1) & "_SWnummer").Value = STG(iSTG, 1) & "_SWnummer" Then
01.
Laufzeitfehler '1004': 
02.
Anwendungs- oder objektdefinierter Fehler
Wäre für einen Tipp dankbar
Gruß Feder
Mitglied: colinardo
16.08.2014 um 10:59 Uhr
Hallo Feder,
suchst du nach Zellnamen also dem Alias den man für einen Zellbereich auf dem Tab Formeln > Namensmanager festlegen kann, oder nur nach dem Inhalt bzw. Wert einer Zelle ?

Du gibst nämlich in Zeile 13 als Range keine Zelladressierung an sondern einen String-Namen für einen Bereich, und wenn dieser nicht existiert läuft das Script natürlich in eine Exception.
Aber erkläre doch mal was du wo suchst, denn dein Ansatz ist viel zu kompliziert gedacht für diese Aufgabe.
Mit der Range.Find Methode ist das ganze wesentlich schneller und effektiver erledigt.

Grüße Uwe
Bitte warten ..
Mitglied: chef1568
17.08.2014 um 17:36 Uhr
Ja genau, ich suche den Zellennamen - nicht den Inhalt der Zelle!
Und den suche ich in einem ausgewähltem Tabellenblatt (also in allen Spalten des Tabellenblattes XY.

Das Ergebnis soll dann wie folgt aussehen:
Zellenname in ausgewähltem Tabellenblatt vorhanden (egal wo) = TRUE
Zellenname in ausgewähltem Tabellenblatt nicht vorhanden = FALSE
Bitte warten ..
Mitglied: colinardo
LÖSUNG 17.08.2014, aktualisiert um 18:45 Uhr
01.
Sub FindRangeName() 
02.
    Dim ws As Worksheet, cell As Range, found As Boolean, objDic As Object, n As Name 
03.
    'Bestimmtes Worksheet verwenden 
04.
    Set ws = Worksheets("Tabelle") 
05.
    'Dictionary Objekt erstellen 
06.
    Set objDic = CreateObject("Scripting.Dictionary") 
07.
    'Alle Bereichsnamen in das Dictionary laden 
08.
    For Each n In ActiveWorkbook.Names 
09.
        objDic.Add n.Name, "" 
10.
    Next 
11.
    'Suche im belegten Bereich des Worksheets nach einem Bereichsnamen der sich aus dem Zellwert und dem String "_SWNummer" zusammensetzt 
12.
    For Each cell In ws.UsedRange 
13.
        ' wenn der Bereichsname existiert verlasse die Schleife 
14.
        If objDic.Exists(cell.Value & "_SWNummer") Then 
15.
            found = True 
16.
            Exit For 
17.
        End If 
18.
    Next 
19.
    If found Then 
20.
        MsgBox "Gefunden"           'Gefunden 
21.
    Else 
22.
        MsgBox "Nicht gefunden"        'nicht gefunden 
23.
    End If 
24.
    Set objDic = Nothing 
25.
End Sub
Bitte warten ..
Mitglied: chef1568
17.08.2014 um 18:52 Uhr
Hallo colinardo,

danke für deinen Lösungsvorschlag.

Ich habe derzeit eine andere Variante als Lösung gefunden

01.
  
02.
Sub Zellenname_suchen() 
03.
 
04.
Dim Tabelle As String 'Tabellenblatt Name 
05.
Dim STG(0 To 100, 0 To 2) As String 'Array 
06.
Dim iSTG, jSTG As Integer 'Zähler 
07.
Dim STGexist 'mit Range-Informationen 
08.
 
09.
'Array einlesen 
10.
For iSTG = 3 To 100                        'Startadresse Zeile 4...54 --> Zeile 10 = Adresse 11 
11.
    For jSTG = 0 To 1                       'Startadresse Spalte A..C --> Spalte A = Adresse 0 
12.
        STG(iSTG, jSTG) = Sheets("Tabelle").Cells(iSTG + 1, jSTG + 1).Value 
13.
    Next jSTG 
14.
 
15.
    On Error Resume Next 
16.
    STGexist = Names(STG(iSTG, 1) & "_SWnummer") 
17.
             
18.
    If Not STGexist = "" Then 
19.
        '############## 
20.
        ' Code 
21.
        '############## 
22.
    End If 
23.
Next iSTG 
24.
 
25.
End Sub
Trotzdem danke für deine Lösung - werde sie bei Gelegenheit auch mal testen und vielleicht auch so einbauen weil ich deine Lösung etwas eleganter finde
Mit freundlichen Grüßen feder
Bitte warten ..
Mitglied: colinardo
17.08.2014, aktualisiert um 18:54 Uhr
"Dirty" gehts natürlich auch

Grüße Uwe
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
Microsoft Office
gelöst Verschieben von Zellinformation in andere Spalte (per VBA) excel 2010 (5)

Frage von thomas1972 zum Thema Microsoft Office ...

VB for Applications
Bilder vom LDAP in VBA - Excel (3)

Frage von Roadrunner777 zum Thema VB for Applications ...

VB for Applications
gelöst VBA Excel Recordset - Abfrage auf SQL-Server (4)

Frage von Aximand zum Thema VB for Applications ...

VB for Applications
gelöst Excel VBA Eine oder mehrere Zellen Verschieben (2)

Frage von batchnewbie zum Thema VB for Applications ...

Heiß diskutierte Inhalte
Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

Grafikkarten & Monitore
Tonprobleme bei Fernseher mit angeschlossenem Laptop über HDMI (11)

Frage von Y3shix zum Thema Grafikkarten & Monitore ...

Microsoft Office
Keine Updates für Office 2016 (11)

Frage von Motte990 zum Thema Microsoft Office ...