PNG32 PNG32 PNG32 PNG32
PNG32
Forum Excel, VBA, VSTO, Exceltips, Excelhj�lp PNG32 drivs av Excelspecialisten    Logga in     English
PNG32
PNG32 PNG32
PNG32

Logga in

PNG32

Du är inte inloggad. Logga in eller registrera dig för att skriva inlägg eller svara på inlägg.

För frågor om forumet, kontakta oss på webmaster@excelforum.se

PNG32 PNG32
PNG32 PNG32
PNG32

Excelforum

PNG32

 
ForumForumDiskussionerDiskussionerVBAVBABifogad fil hamnar på fel platsBifogad fil hamnar på fel plats
Föregående Föregående
 
Nästa Nästa
Nytt inlägg
 2020-06-26 10:41
 
 Ändrad av SoderKrippa  på 2020-06-26 12:05:09

Hej!

Jag har noll koll egentligen på VBA. Har ändå lyckats få till en funktion i mitt excelark där man som användare klickar på en knapp, får upp dialogrutan för att browsa efter fil och därefter så läggs den till som en klickbar ikon i mitt dokument. Mitt problem är att ikonen hamnar på fel plats. Jag har flera knappar som ska ha samma funktion och tanken är att filen/ikonen ska hamna på samma rad i kolumnen till höger. Kan någon se om något i koden nedan är felaktigt? Jag skulle ju helst vilja ha en kod som typ hämtar knappens cell och sen anger att målfilen ska placeras på samma rad, en kolumn till höger.

Bifogar länk till bild där man ser att det hamnar fel. Just nu hamnar alla ikoner/filer på samma plats för knapparna i kolumn A och alla hamnar på samma plats för knapparna i kolumn C. ibb.co/n6WQrDB

Public Sub Insert_Document()

    

Blad1.Unprotect Password:="XXXXXX"

 

    Dim fd As FileDialog

    Dim selectedFile As String

    Dim docObj As OLEObject

    Dim destCell As Range

    

    If IsError(Application.Caller) Then

        MsgBox "The Insert_Document macro must be called from a button click, not directly.", vbCritical

        Exit Sub

    End If

    

    Set fd = Application.FileDialog(msoFileDialogFilePicker)

    With fd

        .AllowMultiSelect = False

        .Title = "Select document to insert"

        .Filters.Clear

        .Filters.Add "Word documents", "*.doc*"

        .Filters.Add "PDF documents", "*.pdf"

        .Filters.Add "All files", "*.*"

        If Not .Show Then Exit Sub

        selectedFile = .SelectedItems(1)

    End With

    

    Set destCell = ActiveSheet.Buttons(Application.Caller).TopLeftCell.Offset(, 1)

    

    Set docObj = ActiveSheet.OLEObjects.Add(Filename:=selectedFile, Link:=False, DisplayAsIcon:=True, IconFileName:= _

        "C:\Windows\Explorer.exe", IconIndex:=0, IconLabel:=Filename)

    With docObj

        .Name = Left(Mid(selectedFile, InStrRev(selectedFile, "\") + 1), 32)

        .Top = destCell.Top

        .Left = destCell.Left

        .Width = destCell.Width - 5

        .Height = destCell.Height - 5

    End With

Blad1.Protect Password:="XXXXXX"

End Sub 

Nytt inlägg
 2020-06-30 09:36
 

 Hej hej

Pröva nedan kod istället. Sätter in en Shape (rektangel) istället för ett oleobject. Kan vara det som inte vill funka. Annars får du undersöka dina knappar. Är det så att du har laggt knapparna över merged cells(sammanfogade celler), så är det förklaringen till varför objekten hamnar fel. Min kod är dock avsevärt mycket snabbare. 

Public Sub Insert_Document()

 

    Dim fd As FileDialog

    Dim SelectedFile As String

    Dim destCell As Range

        

    Set fd = Application.FileDialog(msoFileDialogFilePicker)

    With fd

 

        .AllowMultiSelect = False

        .Title = "Select document to insert"

        .Filters.Clear

        .Filters.Add "Word documents", "*.doc*"

        .Filters.Add "PDF documents", "*.pdf"

        .Filters.Add "All files", "*.*"

        If Not .Show Then Exit Sub

        SelectedFile = .SelectedItems(1)

    End With

    

    Dim ws As Worksheet: Set ws = ActiveSheet

    'Sätter destcell till att vara cellen längst uppe till vänster för knappen som startade makrot

    Set destCell = ws.Buttons(Application.Caller).TopLeftCell.Offset(, 1)

    Dim shp As Shape

    'Bestämmer placering och storlek för shapen.

    Set shp = ws.Shapes.AddShape(msoShapeRectangle, destCell.Left + 2, destCell.Top + 2, destCell.Width - 4, destCell.Height - 4)

    Dim texttodisplay As String: texttodisplay = Left(Mid(SelectedFile, InStrRev(SelectedFile, "\") + 1), 32)

    shp.TextFrame.Characters.Text = texttodisplay

    ws.Hyperlinks.Add anchor:=shp, Address:=SelectedFile 

End Sub

 
Nytt inlägg
 2020-06-30 13:55
 

 Stort tack! Funkar perfekt! :)

Nytt inlägg
 2020-06-30 14:28
 
 Ändrad av SoderKrippa  på 2020-06-30 14:30:31

 Följdfråga. Om jag vill kunna radera innehållet i cellen där filen "laddats upp", hur gör jag då? Jag har försökt markera cellen som vanligt och klicka delete, men jag gissar att "filen" inte är ett cellinnehåll utan bara placeras "ovanför" själva cellen.

 

EDIT: Fick till det själv. Återigen stort tack!

Nytt inlägg
 2020-06-30 15:32
 

Hej igen.

 

Nu när jag testade att öppna filen på en annan dator så funkar det inte. Jag ser att den bara länkar till filens plats på datorn där jag skapat dokumentet. Jag vill ju att filen ska bäddas in i excelarket, inte att det länkas till filen på datorn. Jag vill att någon ska kunna fylla i den samt bifoga filer på sitt håll, för att därefter skicka den till mig som endast en excelfil och att då alla bifogade filer följer med.

 

Är det då nödvändigt med oleobject-lösningen, eller kan man justera din kod så att detta blir möjligt? 

Nytt inlägg
 2020-07-01 08:15
 

 Hej hej

Allt går, på flera olika sätt. OleObj är nog snabbast i ditt fall. Du kan sätta nya knappens position på ett annorlunda sätt. Pröva att döpa om dina knappar till deras respektiva destinationsceller och plocka upp knappens namn för att sätta dest.

I exemplet döper jag knappen med att skriva in btn_C3 i namnrutan till vänster och trycka enter. Därefter lägger jhag till följande i koden:

  Dim btn As Button

    Set btn = ActiveSheet.Buttons(Application.Caller)

    Dim destStrName As Variant: destStrName = Split(btn.Name, "_")

    Dim destCell As Range: Set destCell = ActiveSheet.Range(destStrName(1))

 

Kan det funka för dig tro?

 

 

Nytt inlägg
 2020-07-01 09:37
 

 Tack för att du tar dig tid. Jag ska pilla runt lite utifrån vad du skrivit. Härligt att befinna sig på hal is ibland. ;)

Föregående Föregående
 
Nästa Nästa
ForumForumDiskussionerDiskussionerVBAVBABifogad fil hamnar på fel platsBifogad fil hamnar på fel plats

PNG32 PNG32
Excelforum drivs av Excelspecialisten som bedriver utbildning i Excel och VBA, tillhandahåller support och hjälp med Excel, utvecklar program i Excel. Är ni i behov av en konsult inom Excel, VBA eller VSTO, eller söker en excelkurs, kontakta oss.
Copyright 2013 ExcelSpecialisten XLS AB   Användarvillkor  Personliga uppgifter