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

MvS

Medlem
  • Antal inlägg

    134
  • Gick med

  • Senaste besök

Allt postat av MvS

  1. Briljant! ✨ Du fick till det med flersiffrigt ID också (det grejade inte jag)! Där ser man ─ Det behövdes alltså inga jätteoperationer för att greja detta, det var väl det jag kände... Less is more! (Den Ockhams:ka Rakkniven är fortfarande giltig!)* 👍👍👍 Stort tack för dina inputs! //Magnus * Läs mer om Ockhams Rakkniv här >>>
  2. Jag hittade nu formeln för att plocka ut ID: =OM([@DATA]="INDI";EXTEXT([@KAT];LÄNGD([@KAT])-1;1);"") Det returnerar aktuellt post # men bara i de instanser där "INDI" förekommer. Lekte med idén att i OM-satsens "annars" (dvs längst till höger i strängen) hitta en relativ referens till föregående (ovanstående) cell om strängen returnerar "Falskt" men hittills gått bet! Alltså, jag vill att formeln ger, om villkoret inte uppfylls, värdet från den relativa cellen ovanför (som inte är rubrikcell) . Kan det ordnas med t ex INDIREKT i någon elegant kombination? //Magnus
  3. Hej! Stort tack för ditt engagemang ─ Det var precis i de här banorna jag också tänkte! Bilden jag bifogade tidigare var schematisk (för att jag ville se principen bakom en kodning) och när jag försöker omsätta din kod med de skarpa referenserna verkar det inte funka, sannolikt för att jag satt dessa fel... Jag bifogar ett "tvättat" utdrag från originalfilen med 5 poster så att du kan se strukturen i GEDCOM-filen, och om du har tid & lust är jag dig tacksam om du kan titta på den och ge förslag på åtgärd. mvh //Magnus P.S För att förtydliga: Jag vill alltså skapa ID:n som vidhäftas respektive post i.e. skapa primärnyckel för varje person i databasen! Ds Bok1.xlsx
  4. Tack för svar! Vore det så enkelt... Nä, det enda som då sker är att jag får 8000 kolumner i stället för rader och det blir lika illa... Jag vill försöka ge unika ID:n åt alla 230 posterna så att jag därifrån kan ställa upp en matris med EN uppsättning fältrubriker. //Magnus
  5. Hej! Nu har jag slitit mitt hår i förtvivlan över ett problem som jag tycker borde vara busenkelt för Excel att klara men jag måste tänka helt fel - det är i alla fall vad Excel tycker... Problemet: Har en databas på ett Excel-ark där data är importerat från en släktdatabas. Vid importen kommer alla fält och poster i lodrät formering men jag vill transponera data så att fälten kommer vågrätt för vidare export till Access. Varje post ligger alltså travad under den andra där varje fält upprepas i respektive post vilket gör en tabell på 230 poster att bli nästan 8000 rader i Excel-arket! Vad jag vill göra: Jag vill försöka separera posterna med primärnycklar i form av ID, ett för varje person. Så jag tänkte först i min naiva enfald att det bara går att fixa med villkorsformel, men ack vad jag bedrog mig! Jag har försökt med ett "OM" villkor att få Excel att för varje återkommande "ID" paginera så att Varje "ID" räknas upp ett steg från 1, 2, 3.. osv samt att alla andra fältnamn får samma värde som respektive "ID" typ: ID 1 FNAMN 1 ENAMN 1 ADRESS 1 TELEFON 1 ID 2 FNAMN 2 ENAMN 2 ADRESS 2 TELEFON 2 etc. men det är fullkomligt tji att få till det då det blir lätt en massa cirkelreferenser som ställer till det! Någon på E-forum som har ett listigt knep att delge hur jag ska få till det?
  6. Tack för alla inputs! Tror mig nu ha löst det så att verktyget startar i användarens systemkatalog förutsatt den finns i C-katalogen. Om någon är intresserad så finns programmet bifogat! //Magnus WinSysRep.zip
  7. Tack för svar! Grejen är att jag skapar en exe-fil av bat-varianten och jag tänkte att det skulle bara var himla käckt om det hade gått att få in i gränssnittet en option om användaren till äventyrs skulle ha fler Op installerade på olika diskar! Men detta är inget som jag ligger sömnlös om nätterna och grubblar på så jag nöjer mig med det jag har! Kul att du gillade idén i alla fall! //Magnus
  8. Monshi Jo, det var det första jag övervägde men jag bedömde att organisationen skulle ha lättare att ta emot Excel... Men att Access är ett för ändamålet bättre alternativ får jag hålla med om! Jag tycker det ändå är märkligt, mist sagt, att Microsoft inte har kunnat lösa detta problem, och efter att ha sökt nätet efter svar på ett otal sajter kan jag konstatera att jag inte är ensam om att ha strul med detta fel samt att någon enkel lösning inte verkar stå att finna. Jag tänker mig i min enfald att man skulle kunna använda en VBA-funktion för by-pass av limiten - för att tala ren svengelska! Är det något du som verkar så beläst och insatt i VBA har någon uppfattning om? Som sagt, högst märkligt att man ska stupa på en sådan här irriterande detalj i ett annars så överlägset och mångsidigt program som Excel! Men nåväl, det är ju numer i huvudsak endast för min egen förkovran som jag tragglar med detta och alltid lär man sig något... Jag tror att jag löser detta genom att lägga kopplingskoden i Word-mallen i stället då det har fungerat tidigare! Tack för visat intresse i alla fall! //Magnus
  9. Hej Monshi och polken - Tack för era svar! Monshi: Förvisso kan man ladda hem filen varje gång men eftersom inventeringen görs löpande och arkivet ofta kompletteras med nya poster där serier och registerstruktur justeras regelbundet behöver det vara automatiserat så mycket som möjligt. Dessutom har jag vid tidigare tillfälle fått mail merge att funka med i stort sett samma parametrar men då har jag varit på plats och kört det direkt från nätverket. Nu jobbar jag hemma med detta och det är väl mest för min egen förkovran jag vill hitta en lösning så att verktyget kan användas även i andra sammanhang med vederbörliga ändringar. Jag bifogar skriptet som det nu ser ut. Se även bifogad principskiss längst ner över de flöden jag vill ha! '***************************************************** ' Öppna mall för hyllindex (Word-dokument) '***************************************************** Sub HyllMall() Dim mailMergeStr, SrcH, SQLSheetH, SQLSortH, SQLFilterH, SQLDataH, SQLH As String Call Modul1.DisableEvents Call Modul1.Uppdatera VarPath SQLSheetH = "[Hyllindex$]" SQLFilterH = "WHERE [Hylla] <> []" SQLSortH = "ORDER BY [11] ASC AND [2] ASC AND [3] ASC" SQLDataH = "Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";" & _ "Jet OLEDB:Engine Type=35;Jet OLEDB" SrcH = fldPath & wdNameHylla SQLConnH = "Connection:=" & "Data Source=" & SrcH & ";""" SQLH = "SELECT * FROM" & SQLSheetH & SQLFilterH & SQLSortH mailMergeStr = SQLDataH & SQLConnH & SQLH ' frmSQLnotice.show ' ---------------- Intiera Wordobjekt ------------- Set objWord = CreateObject(Class:="Word.Application") objWord.Visible = True objWord.DisplayAlerts = wdAlertsNone ' ---------------- Kör mailmerge ------------------- Set wDoc = objWord.Documents.Open(SrcH) Set wdMailMergeH = wDoc.MailMerge ' ---------------- Processa Mail merge ------------- With wdMailMergeH .MainDocumentType = wdFormLetters .OpenDataSource Name:=SrcH & mailMergeStr End With Call Modul1.EnableEvents Call Modul1.Uppdatera Call Modul1.SkyddaBlad End Sub polken: Jag har aldrig mappat tidigare... Vad är det och hur kan det hjälpa till med just detta problem? Excel protesterar ju även om jag använder fördefinierade konstant-strängar så det verkar handla om att informationen jag vill skicka till Word helt enkelt är för lång oavsett hur den överförs. Det torde väl bli samma resultat med mapping, eller? Principskiss över de flöden jag vill ha
  10. Hej i forumet! Har tidigare ropat på hjälp med funktionen "mail-merge" i Excel men själv lyckats lösa de problemen. Det problem jag nu adresserar forumet med verkar lite knepigare och jag behöver få hjälp om det finns någon annan som har haft liknande problem och löst det. BAKGRUND: Har en databas jag gjort i Excel där jag behöver kunna skriva ut etiketter i en Word-mall som jag anropar med mail-merge i ett VBA makro. Både Excel-filen och Word mallen ligger i en mapp centralt på en nätverksplats. Excel-filen är utformad så att den sparas automatiskt på nätverket men också med en kopia lokalt på användarens HD. Meningen är att man ska arbeta på den lokala kopian och att den sedan uppdaterar på nätverket. Detta för att säkerställa att arbetsboken inte blockeras av en användare samt att det ska gå att jobba med databasen även i utrymmen där det inte finns WiFi. Det innebär alltså att man ska kunna anropa Word-dokumentet från BÅDE filen på nätverket OCH från den lokala kopian vid behov, varför sökvägarna måste vara relativa. PROBLEMET: När jag kör koden och kommer till själva mail-merge sekvensen ger Excel felsvar att strängen innehåller fler än 255 tecken! Varför sker detta? Har testat både att ha alla mail-merge argument utskrivna i sekvensen samt, som i detta fall, att ange argumenten i variabler ─ utan framgång! Har sökt med ljus och lykta efter svar på webben men det verkar inte som någon har ett bra svar att ge hur man kan komma runt detta problem! Skulle det kunna lösas med en systemfunktion eller ett makro som tvingar Excel att skippa denna begränsning? Är min VBA felaktig på något sätt eller är detta en begränsning i Excel som inte går att åtgärda? Den enkla lösningen är ju att lägga all kopplings-kod i Word-mallen som körs när man öppnar dokumentet (vilket jag f.ö också har prövat) men då måste sökvägen vara absolut vilket inte funkar om man ska kunna etikettera från olika källor. Bifogar även en kopia på makrot jag har problem med. Med hopp om svar från forumet //Magnus
  11. Tack för tipset! Jag vill emellertid att skriptet ska kunna användas på olika systemdiskar vid behov. Sålunda behöver jag en funktion där användaren kan manuellt ange måldisken via en "option"-funktion eller något liknande... //Magnus
  12. Jag har knåpat ihop en .bat-fil och lagt på USB-sticka med vilken man enkelt kan köra systemverktyg ( sfc, DISM och chkdsk ) på datorn. Jag är ingen hejare på DOS-programmering utan har bara "klippt & klistrat" från andra programsekvenser jag hittat på nätet. Den fungerar förvisso utmärkt som ett smidigt verktyg men man måste köra .bat-filen från den drive som man vill fixa. Detta innebär att först måste kopiera över den till aktuell dators HD innan den kan användas. Jag tänker att det bara måste finns ett smidigare sätt där jag vill kunna få upp en lista med aktiva diskar att välja från typ: ("Välj disk: C, D, E... etc) UTAN att behöva kopiera .bat-filen till aktuell HD. Någon som har ett bra tips? Bifogar skriptet som zippad fil! //Magnus Systemverktyg.zip
  13. 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? MailMergeVBA.txt
  14. Det verkar funka om jag skriver =OMFEL(LETARAD($A:$A;Tabell6;9;0);"")
  15. Hur gör jag det? Skriver jag =OMFEL(LETARAD([@Db];Tabell6;$I$7;0);"") så returnerar den blankt...
  16. Jag har som sagt ett formulär som användare ska kunna lägga till data i tabellen med (se bifogat utsnitt av VBA) och hela poängen med formuläret är att enkelt tillföra data som ska uppdatera sig automatiskt via LETARAD-funktionen. Det verkar ju heltossigt att Excel inte skulle kunna klara detta... InfogaRad_VBA.txt
  17. Tack för snabbt svar! Jag har ett formulär som infogar ny rad men jag har även prövat att helt enkelt högerklicka på radrubriken och infoga med samma resultat!
  18. 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. Någon som kan förklara varför detta sker?
  19. 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!
  20. 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!
  21. Hittade lösningen själv! Bara att lägga till On Error Resume Next Fixat!
  22. 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: 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...
  23. Tack alla för intressanta svar! Jag har efter att tagit del av era tips kommit till insikt att detta är ett företag som kommer att ta mer tid och kraft än vad som nyttan kommer att ge så jag lägger helt enkelt ner just denna ambition!
×
×
  • Skapa nytt...