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

 
ForumForumDiskussionerDiskussionerVBAVBAHur löser jag bäst felmeddelandet "We found a problem with some content..."?Hur löser jag bäst felmeddelandet "We found a problem with some content..."?
Föregående Föregående
 
Nästa Nästa
Nytt inlägg
 2023-09-17 07:06
 
 Ändrad av Sleipner  på 2023-09-17 08:28:15

Jag har lagt upp en exempelarbetsbok här:

easyupload.io/ehb1x3
 

Prova att välja några alternativ i listrutorna på fliken Overview i cellområdena G4:I18, G30:I44 och G56:I70 och sedan spara arbetsboken. När du sedan försöker öppna arbetsboken igen visas det här felmeddelandet:
 

"We found a problem with some content in 'Worksheet Overview drop-downs in columns G, H, I, AV.xlsm'. Do you want us to try to recover as much as we can? If you trust the source of this workbook, click Yes."

Det rör sig om en arbetsbladskod och en modulkod. Jag har fått följande kommentarer av andra Excel-experter:

I am discomforted by using worksheet event subs to update things on other worksheets. You don't want to be triggering a cascade of event subs, each one causing another event sub to run. In addition, the statement DropDownOP.SetDropDownList implies the sub of an Active-X object, something that won't be recognized if its parent worksheet isn't active.

Any particular reason why you made the Sub 'private'? It means that the subroutine is inaccessible outside the project bounds:
https://learn.microsoft.com/en-us/office/vba/language/reference/user-interface-help/sub-statement

Event subs are private by default. If you remove the Private keyword, you'll see Sheet5.Worksheet_Activate listed in the ALT + F8 macro selector dialog, something that is undesirable and confusing to users in my opinion.

To avoid triggering a chain of event subs, turn events off whenever a macro does something that would trigger an event sub to run. Then do the triggering activity. And finally restore events. 

I frequently put code like the following in both event subs and regular subs:
Application.EnableEvents = False 'Do triggering action(s) Application.EnableEvents = True

 

Finns det något sätt att skriva om mina två VBA-koder på så att arbetsboken går att öppna igen efter att den har sparats?

Nytt inlägg
 2023-09-17 08:24
 
 Ändrad av Gondi  på 2023-09-17 07:25:06

Hej Sleipner och välkommen till forumet.

Det första man bör göra när man får dylika problem är att "backa bandet" och försöka komma ihåg när arbetsboken senast gick att öppna utan felmeddelande, och därigenom ringa in vad det är man har ändrat som fått det att sluta fungera.

Om man inte har en gammal fungerande version av arbetsboken eller vet när eller varför problemet uppstod får man använda sig av uteslutningsmetoden för att ringa in vad felet är.

Prova därför följande och se om du blir av med felmeddelandet.

  • Öppna en tom Excelarbetsbok och ändra de globala Excelinställningarna under Alternativ -> Formler till "Manuell beräkning" istället för "Automatisk". Öppna sedan dokumentet från Arkiv -> Öppna menyn och se om det gör någon skillnad.
  • Kommentera ut all VBA-kod, arbetsblad för arbetsblad och sedan koden i modulen för att se om det är koden som körs som gör arket korrupt, och isåfall vilken kod (Worksheet eller Module).

När du testat ovan återkoppla då med resultatet så kanske vi kan hjälpa dig när du har ringat in var felets ursprung är.

Nytt inlägg
 2023-09-17 09:10
 
 Ändrad av Sleipner  på 2023-09-17 08:29:03

Tack Gondi, det låter rimligt som du säger. 
 

Den första felsökningsmetoden gav inget utslag. Jag öppnade en tom arbetsbok, ändrade de globala inställningarna till manuell beräkning och öppnade sedan dokumentet från Öppna-menyn under Arkiv. Det gjorde ingen skillnad mot tidigare.

Jag vet sedan tidigare att det är inga problem att spara arbetsboken och öppna den igen så länge jag inte har valt något listobjekt i någon listruta. Jag testade detta:

1) Jag valde ett värde i listrutan G4:G11 på fliken Overview. Men jag valde ett värde i taget i listrutan, sparade och öppnade igen (valde värde i G4, sparade, öppnade igen - valde värde i G5, sparade, öppnade igen, osv.). Då kunde jag spara och öppna igen åtta gånger efter varandra.

2) Sedan valde jag ett värde i G17, sparade och öppnade igen. Sedan valde jag ett värde i I17 sparade och öppnade igen. Det fungerade också.

3) Jag valde sen sju värden i G56:I70 (alla värden på en gång), sparade och öppnade igen. Det fungerade.

4) Men när jag bytte flik till Fundfakt-kateg-vinkl och valde värden i listrutorna där i de gråtonade cellerna och sedan sparade och försökte öppna igen, då visades felmeddelandet.

Jag fick ovanstående bekräftat genom att nu välja flera värden på en gång i alla gråtonade cellers listrutor på fliken Overview, spara och öppna igen. Det fungerade. Och när jag sen gick till fliken Fundfakt-kateg-vinkl och valde bara ett värde i en listruta, i cellen E12, och sedan sparade och försökte öppna igen, då visades felmeddelandet.

Då är problemet alltså när jag väljer ett värde i någon listruta i någon av de gråtonade cellerna på fliken Fundfakt-kateg-vinkl och sedan sparar. Då går inte arbetsboken att öppna igen utan att felmedelandet visas. (Det är för fliken Fundfakt-kateg-vinkl som det finns VBA-kod, förutom modulkoden.)

Jag har lagt upp en ny exempelarbetsbok där det finns listrutor i de gråtonade cellerna i kolumnen AV på fliken Overview också:

easyupload.io/ehb1x3

Nytt inlägg
 2023-09-17 12:39
 

Hej igen Sleipner,

Problemet finns rödmarkerat i nedan procedur.

Function getFormula1(drDownSourceName As String) As String

    Const strStrange As String = "@#$%^"

    Dim rng As Range, arr, arr1

    Set rng = Range(drDownSourceName) 'set the range where from to extract the list  (without blanck  cells)

    arr1 = rng.Value 'place the range in an array to finally drop its content back

    rng.Replace "", strStrange, xlWhole 'replace the empty cells with strStrange

    arr = Application.WorksheetFunction.Transpose(rng) 'place the range in a 1D array

    arr = Filter(arr, strStrange, False) 'replace the former empty cells (strStrange array elements)

    getFormula1 = Join(arr, ",")

    rng.Value = arr1 'place back the original range content

 

End Function

 

Excel tillåter inte att man använder vissa ledande specialtecken i cellerna. Snabel-A (@) är ett sådant specialtecken. Pga. detta så fungerar inte funktionen ovan som den ska och tar inte bort tomma celler. När koden körs och skapar nya dataverifieringsregler så läggs samtliga 1000 rader som finns definierade i Namnhanteraren (Angle, Angle1 och Angle2) till i dataverifierinsfältet "Källa". Fältet "Källa" stödjer max 256 tecken, inklusive separationstecken (;) och därför blir Exceldokumentet korrupt när du sparar det och kan inte öppnas igen.

Ta därför bort @-tecknet i nedan rad:

    Const strStrange As String = "@#$%^"


så den ser ut så här istället: (utan @-tecken)

    Const strStrange As String = "#$%^"

 

Nu borde koden fungera, lycka till! 

 

 

Nytt inlägg
 2023-09-17 15:12
 

Gondi,

Jag försökte precis med det du förklarade och tog bort snabel-a i koden, valde listruteobjekt i listrutorna på flikarna Overview och Fundfakt-kateg-vinkl, sparade och försökte öppna. Men det blir samma felmeddelande som tidigare tyvärr. Och det är manuell beräkning. Jag öppnade en tom arbetsbok, ändrade till manuell beräkning för formler, och öppnade därifrån arbetsboken.

Nytt inlägg
 2023-09-17 16:16
 
 Ändrad av Gondi  på 2023-09-17 16:04:16

Hej igen Sleipner,

Det fungerar för mig.

Jag tror du kanske gör saker i "fel ordning" för så fort man aktiverar arbetsbladet "Fundfakt-kateg-vinkl" så körs VBA-koden och gör arket korrupt.

Följ nedan steg:

  1. Aktivera beräkna "Automatiskt" i Excel igen.
  2. Öppna den senaste Excelfilen du publicerade i morse. Då ska du utan felmeddelande hamna på fliken "Overview"
  3. Öppna VBA editorn med Alt+F11.
  4. Dubbelklicka på VBA-modulen som heter "DropDownOP"
  5. Längst ner i hittar du proceduren jag postade tdigare. Ta bort @ enligt tidigare instruktion
  6. Tillbaka i Excel klicka på fliken "Fundfakt-kateg-vinkl" så VBA-koden triggas.
  7. Spara Exceldokumentet och stäng det.
  8. Nu borde du kunna öppna det utan felmeddelanden.

Om det fortfarande inte fungerar publicera ditt dokument online ånyo så får jag titta på det igen.

Nytt inlägg
 2023-09-18 05:02
 

Hej Gondi,

Jag fick fjärrhjälp igår söndags så att exempelarbetsboken fungerar som den ska. Den som hjälpte mig ersatte @ med | (piptecknet), men han sa att det inte spelar någon roll vilket tecken. Iallafall så fungerade arbetsboken som den ska efter det, går nu att öppna igen efter att jag valt listruteobjekt på flikarna Overview och Fundfakt-kateg-vinkl och sparat.

Problemet är att få det att fungera i min masterarbetsbok. Jag klistrade in modulkoden och arbetsbladskoden i den, men när jag därefter ska gå till  flken Fundfakt-kateg-vinkl för att trigga VBA-koden så börjar markörbollen att snurra en lång stund, sen visas det här felmeddelandet:

Run-time error '1004':
Application-defined or object-defined error

Jag klickar på Debug, och följande markeras i gult i VBA-redigeraren i modulkoden:

.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop,  _
                        Operator:=xlBetween,  _
                        Formulal:=getFormulal (CStr(arrSource(i))) 

Jag väljer Debug/Step into, och följande markeras i gult i modulkoden DropDownOP:

Function getFormulal (drDownSourceName As String) As String

Jag väljer Continue, och felmeddelandet öppnas i VBA-redigeraren:

Run-time error '1004':
Application-defined or object-defined error

Faktiskt, nu när jag tog bort piptecknet (och @ också är borttaget från modulkoden) slutar felmeddelandet att öppnas. Men det tar väldigt lång tid när jag växlar till arbetsbladet Fundfakt-kateg-vinkl, 4-5 sekunder som markörbollen snurrar och jag inte kan placera markören på arbetsbladet.

Nytt inlägg
 2023-09-18 06:54
 

God morgon Sleipner,

Det spelar visst roll vilka tecken man försöker använda sig av.

Se här vad som händer om jag försöker skriva in strängen @#$%^ i en cell i Excel;

Om jag däremot tar bort @-tecknet så accepterar Excel strängen enligt nedan.

Problemet detta skapar är att VBA-koden försöker ersätta alla tomma celler i cellområdet med denna textsträng. Metoden Range.Replace som utför detta misslyckas därför om strängen inleds med ett @.

Function getFormula1(drDownSourceName As String) As String

    Const strStrange As String = "@#$%^"

<…>

    rng.Replace "", strStrange, xlWhole 'replace the empty cells with strStrange <--Kommer misslyckas 

 

Det finns flera potentiella problem med koden. I proceduren nedan som skapar dataverifieringsreglerna så tas ingen hänsyn till längden på textsträngen som ska skrivas in i fältet ”Källa”.

Sub SetDropDownList()

<…>

           .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _

                        Operator:=xlBetween, _

                        Formula1:=getFormula1(CStr(arrSource(i)))<--här tillåts max 256 tecken

<…>

 

End Sub 

 

Fältet “Källa” (Formula1:=) stödjer maximalt 256 tecken som jag tidigare förklarat. Eftersom DropDown-listorna för de namngivna områdena ”Angle” och ”Angle1” pekar på cellområdena $A$8:$A$1008 - vilka innehåller tusen rader - så kommer koden krasha Excel, eller göra dokumentet korrupt så fort du överskrider 256-tecken gränsen. Det är precis detta jag misstänker händer i ditt Masterdokument. 

Om du själv inte har skrivit koden varför kontaktar du inte personen som skrivit koden åt dig för att få hjälp?

Nytt inlägg
 2023-09-18 10:07
 
 Ändrad av Sleipner  på 2023-09-18 10:29:12

Hej Gondi,

Jag började med min master-Excel 2013 och har utvecklat den allteftersom. Under årens lopp har jag fått hjälp från vänster och höger med olika delar av arbetsboken.

Hur kan jag ändra koden som inte sätter någon gräns för längden på textsträngen? Kan jag alltså inte ha ett källområde för listrutor som är längre än 256 rader? Helst skulle jag  ha behövt 1000 rader, men om det inte går, hur kan jag sätta gränsen 256 rader i VBA-koden?

Jag försöker nu att kopiera tre arbetsblad från en senare version av arbetsboken till en tidigare version av arbetsboken. Av någon anledning orsakar detta problem i VBA-redigeraren - jag kan inte ta bort en modulkod, och jag kan inte högerklicka och visa en VBA-kod. Har aldrig hänt förut. Ändringarna jag behöver göra i den tidigare versionen av arbetsboken (den senare versionen har ett korrupt arbetsblad) är:

Kopiera och klistra in tre arbetsark från en senare version av arbetsboken till en tidigare version (samma namn, men det blir ett "(1)" efter arbetsarksnamnet efter inklistringen innan jag raderat det gamla arbetsarket med samma namn).
Lägga till kolumner på arbetsblad.
Ändra named ranges (tre stycken för tre arbetsblad).
Ändra en modulkod och radera tre arbetsbladskoder.

Jag gjorde i ovanstående ordning. Är det bättre att ändra ordningsföljd på stegen för att undvika problemen som uppstår nu?

Nytt inlägg
 2023-09-18 11:19
 
 Ändrad av Sleipner  på 2023-09-18 12:15:41

Det är väl bara för mig att ändra i named ranges, va? Så att Angle och Angle1 pekar på cellområdet A8:A264? Ja, det fungerade, jag ändrade först i VBA-koden och sedan i named ranges för Angle och Angle1. Nu visas inte felmeddelandet längre. Men varför visades detta felmeddelande nu och inte tidigare?

Tyvärr kom det ett nytt felmeddelande när det förra blev fixat:

Compile error: Constant expression required.

Den här raden i VBA-koden är markerad i blått:
DropDownsSourceRangeAddress

Och den här raden är markerad i gult: 
Sub AddNamedRangeAndSetDropDown()

Enligt denna tråd är det ett fel i själva Excel och lösningen är att bara klippa ut och klistra in hela VBA-koden igen:

https://www.reddit.com/r/vba/comments/anvwq3/tip_if_you_get_compile_error_constant_expression/#:~:text=That's%20right...just%20cut,it%20was%20fine%20all%20along.

Det fungerade att klippa ut koden och klistra in den igen. Men då kom det förra felmeddelandet tillbaka igen:

.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop,  _
                        Operator:=xlBetween,  _
                        Formulal:=getFormulal (CStr(arrSource(i))) 

Jag väljer Debug/Step into, och följande markeras i gult i modulkoden DropDownOP:

Function getFormulal (drDownSourceName As String) As String

Jag väljer Continue, och felmeddelandet öppnas i VBA-redigeraren:

Run-time error '1004':
Application-defined or object-defined error

Föregående Föregående
 
Nästa Nästa
ForumForumDiskussionerDiskussionerVBAVBAHur löser jag bäst felmeddelandet "We found a problem with some content..."?Hur löser jag bäst felmeddelandet "We found a problem with some content..."?

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