Microsoft Excel

Herbers Excel/VBA-Archiv

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

Code optimieren

Betrifft: Code optimieren von: Andreas
Geschrieben am: 18.10.2020 14:17:41

Hallo Excelfreunde,
Ich habe folgenden Code aus dem Internet mir in meiner Datei entsprechend anzupassen.
So gesehen funktioniert auch alles.
Mein Problem was ich habe und gern gelöst bekommen würde ist folgendes
in der Codezeile
(Bereich = "B5:IV697" ' aus welchem Bereich soll er holen?)
wird der Bereich "B5:IV697" korrekt aus der geschlossenen Datei kopiert und in die geöffnete Datei wieder eingefügt
da sich aber der Bereich in der Quelldatei in der Zeilenanzahl sich ändern kann hätte ich das Ende gern mit Rows.End(xlUp) gelöst.
Mein Ansatz war dies evtl. mit der CodeZeile
Bereich = .Range("B5", .Cells(.UsedRange.Rows.Count, .UsedRange.Columns.Count))
zu lösen.
Dies funktioniert aber leider nicht.
Auch mehrere Recherchen im Internet konnten mir nicht wirklich weiterhelfen
Kann mir da vielleicht jemand von Euch helfen und den Code entsprechend anpassen?
bin so langsam am verzweifeln.

Public Function GetDataClosedWB(SourcePath As String, _
    SourceFile As String, sourceSheet As String, _
        SourceRange As String, TargetRange As Range) As Boolean
    'Holt einen Bereich aus einer _geschlossenen_ Arbeitsmappe
    'Nur in VBA zu verwenden; nicht aus einer Tabellenzelle heraus
    '© t.ramel@mvps.org
    ' wird durch die HoleDaten aufgerufen
    Dim strQuelle       As String
    Dim Zeilen          As Long
    Dim Spalten         As Byte
    On Error GoTo InvalidInput
    strQuelle = "'" & SourcePath & "[" & SourceFile & "]" & sourceSheet & "'!" & Range( _
SourceRange).Cells(1, 1).Address(0, 0)
    Zeilen = Range(SourceRange).Rows.Count
    Spalten = Range(SourceRange).Columns.Count
    With TargetRange.Cells(1, 1).Resize(Zeilen, Spalten)
        .Formula = "=IF(" & strQuelle & "="""",""""," & strQuelle & ")"
        .Value = .Value
    End With
    GetDataClosedWB = True
    Exit Function
InvalidInput:
    MsgBox "Die Quelldatei oder der Quellbereich ist ungültig!", vbExclamation, "Get data from  _
closed Workbook"
    GetDataClosedWB = False
End Function

Public Sub HoleDatenRessourcenplanungErfassungBearbeitung()
    ' Die Funktion arbeitet mit der obrigen GetDataClosedWB zusammen
    Dim Pfad            As String
    Dim Dateiname       As String
    Dim Blatt           As String
    Dim Bereich         As String
    Dim Ziel            As Range
    'Dim lngZeile        As Long
    
    
    Pfad = "G:\Arbeit_Station und Service\07_Ressourcenplanung\"
    Dateiname = "PM aktuelle Ressourcenplanung.xlsm" ' aus welcher Datei soll er holen?
    Blatt = "Erfassung_Bearbeitung"  ' von welcher Tabelle soll er holen?
    
    'diese CodeZeile funktioniert 
        Bereich = "B5:IV697"   ' aus welchem Bereich soll er holen?

    'nehme ich stattdessen diese CodeZeile wird nichts kopiert und eingefügst
    'wie müsste der Code abgeändert werden das ich ab Zeile "B5" bis Zeile "IV : Letzte"  _
kopieren kann
         'Bereich = .Range("B5", .Cells(.UsedRange.Rows.Count, .UsedRange.Columns.Count)) '. _
Select

    ' in welchen Bereich soll er kopieren? Genauer gesagt: 
    'Bei welcher Zelle soll er anfangen, Daten reinzukopieren? Bsp: ActiveCell geht auch
    Set Ziel = Worksheets("Erfassung_Bearbeitung").Range("B5")  
          If GetDataClosedWB(Pfad, Dateiname, Blatt, Bereich, Ziel) Then
              MsgBox "Daten Bereich importiert"
          End If
End Sub

Für Eure Bemühungen bedanke ich mich bereits jetzt
Gruß Andreas

Betrifft: AW: Nur Info ...
von: Dieter(Drummer)
Geschrieben am: 18.10.2020 15:15:34

Hallo Andreas,

suche mal im Internet nach: VBA Zeilen und Spalten Count. Da gibt es einiges, dass dir evtl. hilft.

Gruß, Dieter(Drummer)

Betrifft: AW: Nur Info ...
von: Andreas
Geschrieben am: 18.10.2020 15:55:44

Hallo Dieter,

danke für Deine schnelle Antwort und Info,
habe das alles schon probiert aber für mein Problem dabei nichts passendes gefunden.
Ich probiere schon seit Tagen wie ich das lösen kann.

Brauche dazu echt Hilfe
Gruß Andreas

Betrifft: AW: Nur Info ...
von: Nepumuk
Geschrieben am: 18.10.2020 16:23:38

Hallo Andreas,

du kannst in einer geschlossenen Mappe nicht feststellen was der benutzte Bereich ist. Was spricht dagegen die Mappe zu öffnen, zur Not auch schreibgeschützt? Das würde auch schneller gehen.

Gruß
Nepumuk

Betrifft: AW: Nur Info ...
von: Andreas
Geschrieben am: 18.10.2020 16:47:46

Hallo Nepumuk,

Danke für die Info,
dachte nicht das das so nicht gehen würde.

Wie müsste ich das dann machen das er mir die Daten aus der Quelldatei Tabelle "Erfassung_Bearbeitung" ab Zelle "B5" bis "IV:LoLetzte"
in die Zieldatei Tabelle "Erfassung_Bearbeitung" ab Zelle "B5" wieder einfügt

könntest du mir dabei nochmals helfen?

Danke Andreas

Betrifft: AW: Nur Info ...
von: Nepumuk
Geschrieben am: 18.10.2020 17:05:45

Hallo Andreas,

teste mal:

Option Explicit

Public Sub HoleDatenRessourcenplanungErfassungBearbeitung()
    Dim objWorkbook As Workbook
    With Application
        .Calculation = xlCalculationManual
        .EnableEvents = False
        .ScreenUpdating = False
    End With
    Set objWorkbook = Workbooks.Open(Filename:="G:\Arbeit_Station und Service\" & _
        "07_Ressourcenplanung\PM aktuelle Ressourcenplanung.xlsm", ReadOnly:=True)
    With objWorkbook.Worksheets("Erfassung_Bearbeitung")
        Call .Range(.Cells(5, 2), .Cells(.Rows.Count, 256).End(xlUp)).Copy( _
            Destination:=ThisWorkbook.Worksheets("Erfassung_Bearbeitung").Cells(5, 2))
    End With
    Call objWorkbook.Close(SaveChanges:=False)
    Set objWorkbook = Nothing
    With Application
        .Calculation = xlCalculationAutomatic
        .EnableEvents = True
        .ScreenUpdating = True
    End With
End Sub

Gruß
Nepumuk

Betrifft: AW: Nur Info ...
von: Andreas
Geschrieben am: 18.10.2020 17:33:56

Hallo Nepumuk,

Danke für Deine schnelle Hilfe
Damit kann ich was anfangen und es funktioniert

Gruß Andreas