Just nu i M3-nätverket
Gå till innehåll

MvS

Medlem
  • Antal inlägg

    122
  • Gick med

  • Senaste besök

Foruminlägg postade av MvS


  1. Hallå i forumet!
    Har tidigare adresserat detta forum angående problem med kopplad utskrift av db till Word och trodde först jag hittat svaret. Men efter månader av petande och sökande i så gott som det mesta som skrivits om mailmerge har jag fortfarande problem, om än ett par nivåer upp i kunskapshierarkin!

     

    Har samplat ihop ett VBA-skript från olika källor och som jag har modellerat om lite efter egna behov (Se bifogad fil "MailMerge.txt") och använder tillsammans med den databas jag skapat i Excel med relativt stort omfång (ca 8100 poster). Med denna vill jag via VBA koppla en etikettutskrift-funktion där ett av tre för-preppade Worddokument (Etiketter1, 2, 3.docm) öppnas med uppdaterad etikett-data beroende på mellan vilka årtal posterna har. Jag har tre perioder där villkoren är: (Före 1994), (Efter 1993 och Före 2013) samt (Efter 2012) som jag har angett två konstanter som får agera brytpunkter (1994 och 2012).

    Har som sagt prövat det mesta men har problem med kopplingen som genererar fel svar (se bif. bild "Dialog1.jpg")!
    Någon som kan se var felet ligger i bifogad kopia av VBA?

     

    Dialog1.jpg

    MailMergeVBA.txt


  2. Här är något riktigt mysko som jag råkat ut för:

    Har en tabell med data och i en kolumn använder jag funktionen "LETARAD" för att länka information mot en annan flik som innehåller "databasen" eller rådata. Allt frid & fröjd so far, MEN när jag infogar en ny rad i tabellen så ändrar Excel argumentet i min LETARAD-funktion så att kolumnreferensen ökar ett steg (från 9 till 10)! Se bifogad bild.

    Image.thumb.png.b7845e83c084af3c7d5d3c53d4414ca8.png 
    Någon som kan förklara varför detta sker?

     


  3. Tack för svar!
    Menar du att jag redan i källdokumentet (Excel-tabellen) kan styra filtret? Som det ser ut nu har jag följande kod i Excel:

    Sub Etiketter()
    
    	On Error Resume Next
            Set ws = Sheets("Lista")
            Dir = ThisWorkbook.Path
            Opt = ws.Range("O1")
            Set objWord = CreateObject("Word.Application")
            objWord.Activate
        objWord.Visible = True
        AppActivate (objWord.Windows(1).Caption)
            Select Case Opt
                
                Case Is = 2                                     ' Före 1970
                Result = objWord.Documents.Open(Dir & "\Etiketter_1.docm")
                AppActivate (objWord.Windows(2).Activate)
    '            & (objWord.Windows("Etiketter_1.docm").Close)
                    
                    Case Is = 3                                 ' Mellan 1970 och 1990
                    Result = objWord.Documents.Open(Dir & "\Etiketter_2.docm")
                    AppActivate (objWord.Windows(2).Activate)
    '                & (objWord.Windows("Etiketter_2.docm").Close)
                        
                        Case Is = 4                             ' Efter 1990
                        Result = objWord.Documents.Open(Dir & "\Etiketter_3.docm")
                        AppActivate (objWord.Windows(2).Activate)
    '                    & (objWord.Windows("Etiketter_3.docm").Close)
                            
                            Case Is = 1                         ' Om inget av ovanstående
                            Result = objWord.Documents.Open(Dir & "\Etiketter_3.docm")
                            AppActivate (objWord.Windows(2).Activate)
    '                        & (objWord.Windows("Etiketter_3.docm").Close)
            End Select
        Call Workbook_RefreshAll
    
    End Sub

    Jag har således tre olika dokument (Word) med etikettmallar som jag vill öppna beroende på hur jag filtrerat på tidsperiod.  Det vore ju bra om jag redan härifrån kunde styra urvalet!


  4. Jag har gjort en databas i Excel 2013 åt en kompis för hans stora skivsamling. Jag försöker att skapa ett automatiserat flöde där det enkelt ska gå att skriva ut etiketter ur samlingen att fästa på hyllor och lådor där skivorna förvaras. För detta ändamål har jag skapat tre etikettmallar i Word för olika tidsperioder (Mall 1 = 1950 - 1970. mall 2 = 1970 - 1990, mall 3 = Från 1990) som kan användas att märka upp de många lådor som skivsamlingen finns i.

    Jag har försökt hitta VBA-kod som kan bistå med detta så att man bara behöver klicka på en knapp i Excel-databasen för att automatiskt skapa en etikettserie  i Word (mailmerge). Det verkar funka så långt att Word öppnar och påbörjar mailmerge med sen hänger sig programmet i flera minuter och Word kraschar. 

    Så här ser min kod ut för första tidspannet (1950-1970):

    Private Sub Document_Open()
    
        Dim wd As Object
        Dim wDocSource As Object, wDocPath As String
        Dim strWorkbookName As String
        Set wDocSource = ThisDocument
        wDocPath = ThisDocument.Path
        strWorkbookName = wDocPath & "\Etiketter+Db.xlsm"
        On Error Resume Next
        Set wd = GetObject(, "Word.Application")
        If wd Is Nothing Then
        Set wd = CreateObject("Word.Application")
        End If
        On Error GoTo 0
        wDocSource.MailMerge.OpenDataSource Name:= _
            strWorkbookName, _
            Connection:="Data Source=" & strWorkbookName & ";Mode=Read", _
            SQLStatement:="SELECT * FROM `Db$`"
    
        With wDocSource.MailMerge
            .Destination = wdSendToNewDocument
            .SuppressBlankLines = True
            With .DataSource
                .FirstRecord = wdDefaultFirstRecord
                .LastRecord = wdDefaultLastRecord
            End With
            .Execute Pause:=False
        End With
        ActiveDocument.SaveAs2 FileName:= _
                    wDocPath & "\Etiketter_Pre-1970.docx", _
                    FileFormat:=wdFormatXMLDocument
        ChangeFileOpenDirectory _
            wDocPath
        ActiveDocument.SaveAs2 FileName:= _
            wDocPath & "\Etiketter_Pre-1970.docx", _
            FileFormat:=wdFormatXMLDocument, LockComments:=False, Password:="", _
            AddToRecentFiles:=True, WritePassword:="", ReadOnlyRecommended:=False, _
            EmbedTrueTypeFonts:=False, SaveNativePictureFormat:=False, SaveFormsData _
            :=False, SaveAsAOCELetter:=False, CompatibilityMode:=15
    
    End Sub

    Då jag kapar sekvensen efter SQLStatement  (i.e. INNAN begäran om att fullfölja mailmerge) så verkar det gå bra, men då måste man "manuellt" välja "Slutför och koppla" för att etikettserien ska genereras och jag vill att hela processen ska funka automatiskt så att det bara är för användaren att skriva ut! Grunddelen av VBA-koden ovan har jag fått genom en makroinspelning och sedan har jag lagt till delar jag hittat på nätet. En märklig sak dock är att själva filtreringen jag gör underinspelningen i "Redigera mottagarlista" kommer av någon anledning inte med i koden - varför då?

    Jag har också prövat att lägga in "WHERE" argument i SQL-statement efter tips när jag Googlat runt men då hittar inte Word sökvägen till Excel-filen och dokumentet kan inte öppna!

    Känner spontant att detta bara måste funka men antagligen är det något knas med kodningen som ställer till det. Om det finns någon i forumet som har råkat ut för motsvarande och till äventyrs hittat en bra lösning vore jag stort tacksam för hjälp!

     

     


  5. Hej alla Excelkunniga!

    Har ett problem jag inte kan förstå hur det ska lösas. Har gjort en inventeringslista i Excel som jag vill kunna skriva ut etiketter på olika poster. Etiketterna kan ha tre olika symboler (bilder) i sig beroende på om posten skapades före ett visst årtal, mellan två år eller efter ett tredje årtal. Så jag har skapat tre wordmallar som jag vill anropa vid etikettutskrift från min Excelfil. Har snokat runt webben och landat i ett VBA-skript som verkade kunna göra jobbet. Jag har med mina något rudimentära kunskaper i VBA försökt anpassa skriptet att öppna beroende på vad man anger via en  combobox: Före 1994, mellan 1994-2011 samt efter 2011.

    Jag har använt case-anrop för kommandona (se skript nedan) men när jag försöker köra det så öppnar Excel visserligen rätt Worddokument men skriptet stannar sedan och felmeddelande visas:

    2080457937_Image1.jpg.579d787edd2697aa0b5878600f679199.jpg

     

    Har prövat att modda skriptet på olika sätt, googlat efter lösning på problemet men inte lyckats finna vad som fattas. Nu står mitt sista hopp till om någon VBA-kunnig på Eforum kan hjälpa mig.

    Sub Etiketter()
    
        Call TaBortSkydd
        Dim ws As Worksheet
        Dim Opt As Integer, Result As Action
        Dim objWord As Object
        Set ws = ActiveSheet
        Opt = ws.Range("$O$1").Value
        Set objWord = CreateObject("Word.Application")
        objWord.Visible = True
            Select Case Opt
                Case Is = 1
                Result = objWord.Documents.Open(Application.ActiveWorkbook.Path & "\Etiketter_1.docx")
                Case Is = 2
                Result = objWord.Documents.Open(Application.ActiveWorkbook.Path & "\Etiketter_2.docx")
                Case Is = 3
                Result = objWord.Documents.Open(Application.ActiveWorkbook.Path & "\Etiketter_3.docx")
            End Select
        ws.Range("$O$1").ClearContents
        Call Workbook_RefreshAll
        Call SkyddaBlad
        
        
    End Sub

    Med hopp om räddning...


  6. Tack för tipset men det funkade inte heller. Bland annat så finns överhuvudtaget inte alternativet Klistra in bildlänk så länge man står i tabellen, endast om jag väljer en cell utanför tabellstrukturen! Då jag i alla fall prövar det senare (dvs klistra in bildlänk utanför tabellstrukturen) och sen ska ange t ex =pdf i formulärfältet så blir resultatet Ogiltig Referens!

    Jag börjar misströsta om att detta är ens möjligt med så pass många tabeller jag har i arbetsboken...

     


  7. Hej alla Excelfantaster!

    Jag har ett lite klurigt problem som jag undrar om någon kan lista ut hur man ska gå tillväga för att lösa.

    Har en arbetsbok med förteckning över en mängd olika dokument sorterade på år de skapats. Årtalen är på 21 separata flikar (1998 - 2018). Som en liten finess hade jag tänkt att en ikon på filändelsen visas efter varje dokument beroende på vilket filformat det handlar om; Är det en t ex pdf-fil ska en pdf ikon visas och om det är en Word-fil ska en Word-ikon dyka upp etc. Det handlar om inalles 13 olika dokumenttyper som jag vill ska automatisk tilldelas en liten ikonbild och eftersom detta ska vara ett levande dokument kommer filerna att ändras successivt varför jag då vill att Excel uppdaterar med rätt ikon om och när en post uppdateras!

    Jag har själv kommit så långt att jag lagt alla 13 ikonerna på en separat flik samt namngett dem i namnhanteraren. Har också skapat en namnrymd åt "Ikoner" med värdet INDIREKT + årtal (fliknamn) samt tabellkolumn (t ex =INDIREKT(2018![Filtyp]) ) men det fungerar inte!

    Någon som har en Quick-Fix till detta lilla problem?

     


  8. Tack för svar!

    Jag har prövat det mesta inklusive de tips du kommer med men utan framgång...
    När jag gjort föreslagna ändringar så antingen skapas ingen tidstämpel alls eller så skapas en men med dialogrutan "Ogiltigt proceduranrop..." som pop-up!


  9. Jag har en matrikel där jag har infogat en tidstämpelfunktion som har funkat hyggligt men nu krånglar. 

    Har prövat lite olika varianter men får vid varje uppdatering upp en dialogruta med "Ogiltigt proceduranrop eller argument". (Se bifogad bild.)
    Det är ett enkelt skript men jag blir inte klok på vad som felas - någon som vet bättre än mig? 

    Bifogar skriptet som txt-fil!

     

    error.png

    VBA Timestamp.txt

     

    Infogar texten direkt, förenklar kanske lite:

    Private Sub Worksheet_Change(ByVal Target As Range)
    
        Call Modul1.TaBortSkydd
        
        Application.EnableEvents = False
        ActiveSheet.ListObjects("Tabell2").Range.Select
            With Selection
                If Target.Column <= 13 Or Target.Column >= 15 Then
                Range("N" & Target.row).Value = Date
                End If
            End With
        Application.EnableEvents = True
        Call Modul1.Skydd
        
    End Sub

    /Mikael63, moderator


  10. Tack för din hjälp!

    Jag tar som sagt tacksamt emot hjälp som kan lösa detta lilla problem. Även om just nuvarande ändamål kanske inte har så hög prioritet så "samlar" jag på användbara VBA-skript och den vägen försöker lära mig kodning genom att stöta och blöta olika "kvistigheter" som kan uppstå i applicerandet av dessa skript. Du har i detta varit till stor hjälp både nu och tidigare och det ska du ha en eloge för!

    En liten följdfråga bara:

    Varför måste skriptet först skapa nya bladflikar i arbetsboken för att  sedan exportera till en extern .txt-fil? Känns spontant lite som att gå över ån efter vatten s.a.s.!

    Jag har som sagt Googlat runt och hittat ett antal mer eller mindre komplicerade varianter som skapar txt-filen direkt. Jag kan dock inte modifiera dessa till just mitt behov då jag inte förstår VBA tillräckligt bra.  

    //Magnus
     

     

     

     

     


  11. Jag beskrev nog lite dåligt vad jag var ute efter. Grejen är att jag skulle bara vilja exportera innehållet i kolumn A och J i Tabell2 till en .txt-fil. I det skript exemplet du (så välvilligt) bifogade skapas nya (tomma)  bladflikar i min arbetsbok. Jag spårade det till sekvensen "Set sh = ThisWorkbook.Worksheets.Add" och detta upphör om jag kommenterar denna rad.

    Sedan undrar jag lite över sekvenserna "Me.Cells(1, 10)" då verkar lägga till ett löpnummer i filnamnet som jag inte behöver...

    Med detta sagt vill jag i alla fall tacka dig storligen för att du tar dig tid med mitt bagatellartade lilla problem! 


  12. Jag knotar på och har kommit så långt att det handlade om ett dokumentskydd jag hade aktivt! I ditt exempel hade du kolumnerna i Tabell1 och du kallade dina exportkolumner för "ID" och "Annat". Detta har jag nu ändrat till min "Tabell2" samt mina kolumners namn ("Namn" i A-kolumnen samt "Email" i J-kolumnen) för att anpassa skriptet. Jag har även anpassat filnamn och sökväg för exporten och nu kör skriptet visserligen en export men innehållet i den exporterade txt-filen är oläsligt! (Se bild) Kan detta ha att göra med kolumnhänvisningen i skriptet?

    Vad syftar tex "Me.Cells(1, 10) + 1",  "sh.Cells(1, 1)" och "sh.Cells(1, 2)" på - bör jag ändra dessa cellreferenser också?

    Export output:
    1143773879_Image1.thumb.jpg.04aa6e525538212789b18ac931ec3cdf.jpg

×
×
  • Skapa nytt...