Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

VBA Blatt einblenden bei bestimmten Zellenwerten


Betrifft: VBA Blatt einblenden bei bestimmten Zellenwerten von: Tobias Barthel
Geschrieben am: 18.01.2019 11:52:24

Hallo liebes Forum,

Ich stehe erneut vor einem Problem und hoffe auf eure Lösung dabei :)
Leider kann ich meine Datei nicht hochladen, da diese extrem komplex ist und mit noch 2 anderen Dateien verknüpft ist etc.. Daher versuch ich mal zu erklären was ich brauche.

Also ich habe in einer Mappe *zig verschiedene Blätter mit je verschiedenem Namen. Diese Mappe erzeugt einen Fertigungsauftrag für unsere Firma und wird als Vorlage verwendet.
Bis auf ein paar Blätter sind alle anderen standardmäßig ausgeblendet.
In einem der sichtbaren Blätter steht eine Formel in Zelle S16 welche mir dann einen Wert ausgibt der in etwa so aussieht:

DS1200/439; AS2000/216; AS2000/217; WP0600/004; CO3000/1155

Dieser Wert ändert sich je nach Projekt.

Wenn nun also in dieser Zelle der Wert "DS" vorkommt, soll das Tabellenblatt "Drehscheibe" und "Antrieb (DS)" eingeblendet werden.
Das selbe gilt für die Werte "CO", "WP" und "AS". Da soll dann entsprechend "Controller", "Wand-Polarisator" und "Antennenstativ" eingeblendet werden.

und jetzt kommts...

Bei manchen Projekten sind (wie oben gezeigt) mehrere des selben Typs enthalten.
D.h. wenn in S16 der Wert, 2x oder öfter "AS" enthält (oder "CO"...), soll dann auch noch zusätzlich "Antennenstativ (2)" (oder "Controller (2)") eingeblentet werden.

habe als Grundlage folgenden code:

Sub FA_einblenden()
ActiveSheet.Range("S16").Select
If strCellValue Like "*" & CO & "*" Then
Sheets("Controller").Visible = True
End If
If strCellValue Like "*" & DS & "*" Then
Sheets("Drehscheibe").Visible = True
End If
If strCellValue Like "*" & DS & "*" Then
Sheets("Antrieb (DS)").Visible = True
End If
End Sub

Der funktioniert soweit, nur dass wenn mehr als einmal "CO" oder "AS" in S16 steht, weis ich nicht wie ich ihm sagen soll, dass er das vorkommen Zählen soll und dementsprechend die Blätter einblenden soll....

Also vielleicht nochmal kurz zusammengefasst:

Wenn in Zelle S16 beispielsweise "CO" steht, soll er Blatt "Controller" einblenden(sichtbar machen). Wenn in Zelle S16 "CO" zwei mal vorkommt, soll er die Blätter "Controller" und "Controller (2)" einblenden. usw...

Ich hoffe ihr versteht mich und freue mich auf eure Hilfe :)

Liebe Grüße,
Tobi

  

Betrifft: AW: VBA Blatt einblenden bei bestimmten Zellenwerten von: Alex Muster
Geschrieben am: 18.01.2019 13:22:01

Hallo Tobi,
anbei eine Function die das mehrfache zählen eines Teilstrings ermöglicht und wie du sie aufrufst.
In das CallFunction Makro kannst du deine Logik Wenn result = 0 oder 1 oder > 1 ist einbauen.

Hoffe das hilft. LG, Alex

Funktion von: http://codevba.com/visual-basic-source-code/vb-string/count_occurrences_in_a_string.htm#.XEHAPWeWyTM

Function StringCountOccurrences(strText As String, strFind As String, _
                                Optional lngCompare As VbCompareMethod) As Long
' Counts occurrences of a particular character or characters.
' If lngCompare argument is omitted, procedure performs binary comparison.
'Testcases:
'?StringCountOccurrences("","") = 0
'?StringCountOccurrences("","a") = 0
'?StringCountOccurrences("aaa","a") = 3
'?StringCountOccurrences("aaa","b") = 0
'?StringCountOccurrences("aaa","aa") = 1
Dim lngPos As Long
Dim lngTemp As Long
Dim lngCount As Long
    If Len(strText) = 0 Then Exit Function
    If Len(strFind) = 0 Then Exit Function
    lngPos = 1
    Do
        lngPos = InStr(lngPos, strText, strFind, lngCompare)
        lngTemp = lngPos
        If lngPos > 0 Then
            lngCount = lngCount + 1
            lngPos = lngPos + Len(strFind)
        End If
    Loop Until lngPos = 0
    StringCountOccurrences = lngCount
End Function

Sub CallFunktion()
Dim result As Integer
Dim strSearchFor As String
Dim strSearchIn As String

strSearchIn = "dc example dc"
strSearchFor = "dc"

result = StringCountOccurrences(strSearchIn, strSearchFor)
MsgBox result

End Sub



Beiträge aus dem Excel-Forum zum Thema "VBA Blatt einblenden bei bestimmten Zellenwerten"