Névkezelő makróval másik munkafüzetre – Olvasói kérés #2

Excelmarketing - Excel VBA makró blog - Névkezelő makróval másik munkafüzetre – Olvasói kérés #2

Az alábbi problémával keresett meg Károly:

Adott két munkafüzet (hívjuk “A” és “B”-nek). Mindkettő nyitva van. “B” munkafüzetben szeretnénk tartományokat elnevezni, viszont fontos, hogy az “A” munkafüzetből indított makróval legyen megoldható.

Csapjunk is bele! Én az alábbi módon oldottam meg a feladatot: “A” munkafüzetben van a kezelőpanelünk, ahol a következő adatokra van szükségünk: “B” munkafüzet elérési útjára (és fájl nevére); a “B” munkafüzetben szereplő munkalap nevére, ahol a tartományt akarjuk elnevezni; a kívánt tartomány névre; a kívánt névtartomány meghatározására, azaz a kezdő és a záró cellákra.

Így néz ki az “A” Excel-emen a kezelő panel:

“A” Excel munkafüzet

B6, B8, B10 és C11 cellákat nekünk kell előre kitölteni értelemszerűen.

Ha az “Elnevezés” gombra kattintunk, akkor ki tudjuk tallózni a kívánt munkafüzetet, jelen esetben a “B munkafuzet.xlsm”-et, ami ezáltal B4 cellába beleírja a “B” munkafüzet elérési útvonalát.

A makrónk lefutásával pedig a “B” munkafüzet Munka2 munkalapjának A1:B2 tartományának “teszt” lesz a neve.

Megjegyzem, hogy akár nyitva van a “B” munkafüzet, akár zárva van, sikeresen elnevezzük benne a kívánt tartományt.

És most lássuk a kódot, amit kommentekkel láttam el az érthetőség kedvéért:

'Ezzel a funkcióval ellennőrizzük, hogy meg van e nyitva már a "B" Excel fájl, vagy sem.
'Az egyszerűség kedvéért erre kerestem egy már kész funkciót.
'Forrás: https://www.mrexcel.com/board/threads/vba-code-to-open-an-excel-file-only-if-not-already-open.431458/
Function CheckFileIsOpen(chkSumfile As String) As Boolean
    On Error Resume Next
    CheckFileIsOpen = (Workbooks(chkSumfile).Name = chkSumfile)
    On Error GoTo 0
End Function

Sub Elnevezes()

'1. Meghatározzuk a változóinkat
    Dim wsA As Worksheet
    Dim wsB As Worksheet
    Dim wsBPath As Variant
    Dim fileName As String
    
    Dim munkalapneve As String
    Dim tartomanynev As String
    Dim tartomany1 As String
    Dim tartomany2 As String
    Dim i As String

'2. Elmentjük egy változóba a "B" Excelünk elérési útját, amit aztán ki is íratunk a B4 cellába, hogy lássuk.
    wsBPath = Application.GetOpenFilename("Text Files (*.xlsm),*.xlsm", , "Please select text file...")
    fileName = Dir(wsBPath)
    'MsgBox fileName
    
    'Ha a megnyitásnál a mégsére kattint
    If wsBPath = False Then
        MsgBox "Nem nyitottál meg egy fájlt sem, így nem tudjuk folytatni"
        Exit Sub
    'Ha megnyitja a fájlt
    Else
        Range("B4") = wsBPath
    End If

'3. Ellenőrizzük, hogy a szükséges mezők ki vannak e töltve.
    'A "B" Excel melyik munkalapján akarunk elnevezni egy tartományt?
    If Range("B6").Value = "" Then
    MsgBox "üres"
    Else
    munkalapneve = Range("B6")
    End If

    'Mi legyen a tartomány neve?
    If Range("B8").Value = "" Then
    MsgBox "üres"
    Else
    tartomanynev = Range("B8")
    End If
    
    'Az új tartomány területének nyitó cellája
    If Range("B10") = "" Then
    MsgBox "üres"
    Else
    tartomany1 = Range("B10").Value
    End If

    'Az új tartomány területének záró cellája
    If Range("C10") = "" Then
    MsgBox "üres"
    Else
    tartomany2 = Range("C10").Value
    End If

'4. "i" nevű változóba meghatározzuk a teljes tartományt, hogy egyszerűbben tudjuk majd hivatkozni rá
    i = "=" & munkalapneve & "!" & tartomany1 & ":" & tartomany2
    'Azaz kvázi egy képletet ollóztunk össze:
    'MsgBox tartomanynev & vbNewLine & tartomany1 & vbNewLine & tartomany2 & vbNewLine & i

'5. Most kezdünk el dolgozni a "B" Excel munkafüzettel
    
    If CheckFileIsOpen(fileName) = False Then
        'Ha a kívánt "B" Excel nincs megnyitva, akkor megnyitjuk
        Workbooks.Open (wsBPath)
    Else
        'Ha nyitva van már, akkor azt tesszük aktívvá
        Workbooks(fileName).Activate
    End If
    
    'A kívánt tartomány elnevezése a "B" Excelben, ez a lényeg, és itt használjuk fel az "i" változónkat.
    ActiveWorkbook.Names.Add Name:=tartomanynev, RefersTo:=i
    
    '"B" Excel mentése és bezárása. Itt szabadon játszhatsz vele, hogy be akarod e zárni,vagy maradjon nyitva a "B" munkafüzet.
    'ActiveWorkbook.Close SaveChanges:=True
    
End Sub

“A” Excel letöltése: ITT

Mennyire találtad hasznosnak ezt cikket?
[Összes szavazat: 0 Átlag értékelés: 0]