Fejl i makro i Excel når jeg ændrer filnavnet

Anonym
2023-08-03T09:23:01+00:00

Jeg har lavet en makro i Excel, der kopierer data fra et ark i en projektmappe til et ark i en anden projektmappe (den jeg skal arbejde i). Når jeg gemmer modtager-projektmappen med nyt versions/fil-navn holder makroen op med at virke og data bliver ikke overført. - Hvordan fikser jeg dette?

(OBS: Projektmappen jeg kopierer data fra vil altid have samme navn)

Microsoft 365 og Office | Excel | Andet | Windows

Låst spørgsmål. Dette spørgsmål blev migreret fra Microsoft Support-community'et. Du kan stemme om, hvorvidt det er nyttigt, men du kan ikke tilføje kommentarer eller svar eller følge spørgsmålet.

0 kommentarer Ingen kommentarer
Svar accepteret af spørgsmålets forfatter
Anonym
2023-08-03T12:45:07+00:00

Hej

For at løse problemet og få makroen til at fungere uanset modtagerprojektmappens navn skal du opdatere koden for at bruge projektmappeobjektvariabler og undgå at bruge hårdkodede navne.

Her er den opdaterede version af makroen:

VBA Kopier kode Underafsnit Opdater_fra_PoS() Dim sourceWB som projektmappe Dim targetWB som projektmappe Dim sourceWS som regneark Nedtoning af targetWS som regneark

' Indstil kildeprojektmappen (forudsat at kildeprojektmappen altid er åben) Indstil sourceWB = Projektmapper ("ExpPstExcel.xls")

' Indstil målprojektmappen (modtagerens projektmappe) Indstil targetWB = ThisWorkbook

' Indstil kilderegnearket i kildeprojektmappen (skift "SP" til det faktiske arknavn) Indstil sourceWS = sourceWB.Sheets ("SP")

' Indstil målregnearket i målprojektmappen (skift "Oversigt" til det faktiske arknavn) Indstil targetWS = targetWB.Sheets ("Oversigt")

' Fjern beskyttelsen af målregnearket targetWS.Fjern beskyttelsen

' Kopier data fra kilde til målark sourceWS.Range ("B1:P535"). Eksemplar targetWS.Range ("A1"). IndsætSpeciel indsæt:=xlIndsætværdier

' Ryd udklipsholder Application.CutCopyMode = Falsk

' Beskyt målregnearket targetWS.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True Afslut Sub I denne opdaterede version bruger vi projektmappeobjektvariabler (sourceWB og targetWB) til at henvise til henholdsvis kilde- og modtagerprojektmapperne. På denne måde finder makroen altid de korrekte projektmapper, uanset deres filnavne, så længe de er åbne, når makroen udføres.

Sørg for at justere arknavnene ("SP" og "Oversigt") i koden, så de svarer til dine faktiske regnearksnavne.

Hvis du har brug for andet, er du velkommen til at kontakte os igen.

Hvis svaret var nyttigt, så glem ikke at stemme eller acceptere det som et svar, tak

Venlig hilsen

Ajibola

Dette svar er blevet automatisk oversat. Derfor kan der være grammatikfejl eller mærkelige formuleringer.

Var dette svar nyttigt?

1 person fandt dette svar nyttigt.
0 kommentarer Ingen kommentarer

4 ekstra svar

Sortér efter: Ældste
  1. Anonym
    2023-08-03T10:01:56+00:00

    Hej

    Det lyder som om problemet kan være relateret til den absolutte filsti, der bruges i din makro. Når du gemmer modtagerprojektmappen med en ny version eller et nyt filnavn, forsøger makroen muligvis stadig at referere til den gamle filsti, hvilket medfører, at overførslen af dataene mislykkes.

    Du kan løse dette problem ved at ændre makroen, så den bruger relative filstier i stedet for absolutte. Ved hjælp af relative filstier kan makroen finde kildeprojektmappen korrekt, uanset filnavnet eller placeringen.

    Sådan kan du ændre makroen:

    1. Åbn modtagerprojektmappen (den, hvor du vil have dataene kopieret).
    2. Åbn Visual Basic for Applications (VBA) editor ved at trykke på "Alt + F11" i Excel.
    3. Find din makro i VBA-editoren. Det skal være i et modul eller i arkmodulet i regnearket, hvor du udløser dataoverførslen.
    4. Find den kodelinje, der refererer til kildeprojektmappen. Det kan se nogenlunde sådan ud:

    '''VBA Workbooks.Open "C: \ Sti \ Til \ Din \ Kilde \ Projektmappe.xlsx"

    
    5. Udskift den absolutte filsti med en relativ. Hvis du vil oprette en relativ sti, skal du bruge egenskaben 'ThisWorkbook.Path', som repræsenterer stien til projektmappen, hvor makroen er placeret. Hvis du antager, at kildeprojektmappen er i samme mappe som modtagerprojektmappen, kan du gøre noget som dette:
    
    '''VBA
       Workbooks.Open ThisWorkbook.Path & "\SourceWorkbook.xlsx"
    

    Denne kode åbner "SourceWorkbook.xlsx" i samme mappe som modtagerprojektmappen.

    1. Gem og luk VBA-editoren.

    Nu skal makroen fungere korrekt, selv når du gemmer modtagerprojektmappen med et nyt filnavn eller en ny version. Det vil altid søge efter "SourceWorkbook.xlsx" i samme mappe som modtagerprojektmappen. Bare sørg for, at kildeprojektmappen faktisk er i den samme mappe, eller juster den relative sti i overensstemmelse hermed, hvis den er i en anden mappe.

    Hvis du har brug for andet, er du velkommen til at kontakte os igen.

    Hvis svaret var nyttigt, så glem ikke at stemme eller acceptere det som et svar, tak

    Venlig hilsen

    Ajibola

    Dette svar er blevet automatisk oversat. Derfor kan der være grammatikfejl eller mærkelige formuleringer.

    Var dette svar nyttigt?

    0 kommentarer Ingen kommentarer
  2. Anonym
    2023-08-03T12:34:02+00:00

    Jeg kan ikke få det til at virke???

    Koden ser således ud:

    Sub Opdater_fra_PoS()

    '

    ' Opdater_fra_PoS Makro

    '

    '

    *Sheets("SP").Select* 
    
    *ActiveSheet.Unprotect* 
    
    *Range("A1").Select* 
    
    *Windows("ExpPstExcel.xls").Activate* 
    
    *Range("B1:P535").Select* 
    
    *Selection.Copy* 
    
    *Windows("TEST\_1.xlsm").Activate* 
    
    *ActiveSheet.Paste* 
    
    *Application.CutCopyMode = False* 
    
    *ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True* 
    
    *Sheets("Oversigten").Select* 
    

    End Sub

    Det er TEST_1.xlsm der er modtagerprojektmappen.

    Var dette svar nyttigt?

    0 kommentarer Ingen kommentarer
  3. Anonym
    2023-08-04T06:31:56+00:00

    Vil du prøve at sende koden igen? Uden oversættelse :-)

    Var dette svar nyttigt?

    0 kommentarer Ingen kommentarer
  4. Anonym
    2023-08-04T06:41:38+00:00

    Fik det til at virke! Tusind tak for hjælpen :-)

    Var dette svar nyttigt?

    0 kommentarer Ingen kommentarer