1.2k Aufrufe
Gefragt in Tabellenkalkulation von lianaw Einsteiger_in (9 Punkte)
Hallo liebes Forum,

ich habe Folgendes vor: in eine Excel-Datei (Tabelle "Import") Werte aus einer .xml Datei importieren. Dafür habe ich folgendes Makro, leider nicht selbst geschrieben, im Forum gefunden (an dieser Stelle vielen Dank an den Autor!):
Option Explicit
Dim Stamm As String
Dim varFile As Variant
Dim varName As Variant
Dim Blatt As String
Dim LastValue As Variant
Dim Target As Range


Public Sub Dateien()
On Error GoTo Err
Stamm = ActiveWorkbook.Name
varFile = Application.GetOpenFilename("Excel Files (*.xml), *.xml", , "XML", "Auswahl", False)
If TypeName(varFile) Like "Boolean" Then
MsgBox "Keine Datei gewahlt!", vbInformation
Exit Sub
Else

varName = Right$(varFile, Len(varFile) - InStrRev(varFile, "\"))
Workbooks.Open varFile
Workbooks(varName).Sheets("Import").Range("A1:S50").Copy
Workbooks(Stamm).Sheets("Import").Range("A1:S50").PasteSpecial xlPasteValues
Workbooks(varName).Close
Application.CutCopyMode = False

End If
Exit Sub
Err:
Call MsgBox("Bitte uberpruffen ob die Tabelle" _
& vbCrLf & "Import vohanden ist 1" _
, vbExclamation, "Fehler")

End Sub


In Tabelle 2 "Layout" möchte ich als Ausgangssituation die Zeilen 67:355 ausgeblendet haben.
In Abhängigkeit von den importierten Werten ( Tabelle "Import", Spalte G, ab Zeile 17, Anzahl der befüllten Zeilen variierend) sollen bestimmte Zeilen wieder eingeblendet werden.
Beispiel:
wenn G17 ("Import") = leer, dann Zeilen 67:355 in ("Layout") ausgeblendet;
wenn G17 ("Import") = "gelb" dann Zeilen 72:75 in ("Layout") eingeblendet;
wenn G17 ("Import") = "blau" dann Zeilen 107:110 in ("Layout") eingeblendet;
wenn G17 ("Import") = "orange" dann Zeilen 177:180 in ("Layout") eingeblendet;
wenn G17 ("Import") = "grau" dann Zeilen 267:270 in ("Layout") eingeblendet;
Es gibt nur diese 5 Möglichkeiten die in einer Auswahlliste in der Ursprungsdatei zur Verfügung stehen.
Es soll geprüft werden ob in den Folgezellen, also G18, G19, G20 etc. Werte stehen, bis zur nächsten leeren Zelle. Wenn Werte vorhanden dann soll wie im Beispiel oben vorgegangen werden nur jeweils die nächsten 5 Zeilen, Bsp:
wenn G18 ("Import") = "gelb" dann Zeilen 76:80 in ("Layout") eingeblendet;

Dafür habe ich folgendes Makro gefunden/angepasst (hat auch vor dem "Importieren-Makro" zumindest für die Zelle G17 funktioniert, jetzt nicht mehr). Weiß auch nicht wie ich es auf andere Zellen anwenden kann :-(
Im unteren Bsp werden immer 2 Bereiche ein/ausgeblendet, da sind noch die Überschriften, aber das kann ich dann hoffentlich selbst anpassen...

Public Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
If Target.Address(0, 0) <> "G17" Then Exit Sub

Select Case Target
Case ""
Worksheets("Layout").Range("A67:A355").EntireRow.Hidden = True
End Select

Select Case Target
Case "gelb"
Worksheets("Layout").Range("A68:A70").EntireRow.Hidden = False
Worksheets("Layout").Range("A71:A75").EntireRow.Hidden = False
Case Else
Worksheets("Layout").Range("A68:A70").EntireRow.Hidden = True
Worksheets("Layout").Range("A71:A75").EntireRow.Hidden = True
End Select

Select Case Target
Case "blau"
Worksheets("Layout").Range("A103:A105").EntireRow.Hidden = False
Worksheets("Layout").Range("A106:A110").EntireRow.Hidden = False
Case Else
Worksheets("Layout").Range("A103:A105").EntireRow.Hidden = True
Worksheets("Layout").Range("A106:A110").EntireRow.Hidden = True
End Select

Select Case Target
Case "orange"
Worksheets("Layout").Range("A168:A170").EntireRow.Hidden = False
Worksheets("Layout").Range("A171:A175").EntireRow.Hidden = False
Case Else
Worksheets("Layout").Range("A168:A170").EntireRow.Hidden = True
Worksheets("Layout").Range("A171:A175").EntireRow.Hidden = True
End Select

Select Case Target
Case "grau"
Worksheets("Layout").Range("A263:A265").EntireRow.Hidden = False
Worksheets("Layout").Range("A266:A270").EntireRow.Hidden = False
Case Else
Worksheets("Layout").Range("A263:A265").EntireRow.Hidden = True
Worksheets("Layout").Range("A266:A270").EntireRow.Hidden = True
End Select
Application.ScreenUpdating = True

End Sub


Wie gesagt die Datei wird mit dem ersten Makro importiert (funktioniert wunderbar!) aber das ein/ausblenden Makro "greift" nicht, ich glaube die importierte Zelle wird als leer "wahrgenommen". Dazu muss ich sagen, dass ich die beiden Sub's einfach untereinander reinkopiert habe.

Vielen lieben Dank im Voraus!

LG,
Liana

Ich gebe zu, ich habe keine Ahnung von VBA, aber ich würde sehr gerne lernen!

Deine Antwort

Dein angezeigter Name (optional):
Datenschutz: Deine Email-Adresse benutzen wir ausschließlich, um dir Benachrichtigungen zu schicken. Es gilt unsere Datenschutzerklärung.
Anti-Spam-Captcha:
Bitte logge dich ein oder melde dich neu an, um das Anti-Spam-Captcha zu vermeiden.
...